Stylus Studio XML Editor

Table of contents

Appendices

2.4 Predicates

Predicates

An axis is either a forward axis or a reverse axis. An axis that only ever contains the context node or nodes that are after the context node in [document order] is a forward axis. An axis that only ever contains the context node or nodes that are before the context node in [document order] is a reverse axis. Thus, the ancestor, ancestor-or-self, preceding, and preceding-sibling axes are reverse axes; all other axes are forward axes. Since the self axis always contains at most one node, it makes no difference whether it is a forward or reverse axis. The proximity position of a member of a node-set with respect to an axis is defined to be the position of the node in the node-set ordered in document order if the axis is a forward axis and ordered in reverse document order if the axis is a reverse axis. The first position is 1.

A predicate filters a node-set with respect to an axis to produce a new node-set. For each node in the node-set to be filtered, the [PredicateExpr] is evaluated with that node as the context node, with the number of nodes in the node-set as the context size, and with the [proximity position] of the node in the node-set with respect to the axis as the context position; if [PredicateExpr] evaluates to true for that node, the node is included in the new node-set; otherwise, it is not included.

A [PredicateExpr] is evaluated by evaluating the [Expr] and converting the result to a boolean. If the result is a number, the result will be converted to true if the number is equal to the context position and will be converted to false otherwise; if the result is not a number, then the result will be converted as if by a call to the boolean function. Thus a location path para[3] is equivalent to para[position()=3].

Predicates
2.4    Predicate   ::=   '[' [PredicateExpr] ']'
2.4    PredicateExpr   ::=    [Expr]