Read XSLT 2.0 and XPath 2.0 Programmer's Reference, 4th Edition Online
Authors: Michael Kay
There are two kinds of predicate: those that depend on the node's position relative to its siblings, and those that don't. A positional predicate is one whose value is a number, or one that uses the functions
position()
or
last()
; all others are nonpositional. For example, the predicates
[1]
,
[position()!=1]
, and
[last()-1]
are all positional predicates, whereas
[@name = ’Tokyo’]
and
[*]
are nonpositional.
For a nonpositional predicate, its meaning is that the
PatternStep
matches a node only if the
effective boolean value
of the predicate is true. The concept of effective boolean value is defined in XPath, and is summarized in the entry for
[@security = ’secret’]
is true when the node has a
security
attribute whose value is
‘secret’
, so any
PatternStep
that uses this predicate will fail if the node has no
security
attribute or if the
security
attribute has any value other than
‘secret’
.
For a positional predicate, the meaning of the predicate can be deduced from the formal rules given at the start of this chapter. However, it is easier to understand their meaning by using informal rules. A numeric predicate such as
[1]
or
[last()-1]
is equivalent to the boolean predicate
[position() = 1]
or
[position() = last()-1]
. So to evaluate a positional predicate, we need to know what
position()
and
last()
are.