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 is equivalent to para[position()=3].
NOTE: The meaning of a Predicate depends crucially on which axis applies. For example, preceding::foo returns the first foo element in reverse document order, because the axis that applies to the  predicate is the preceding axis; by contrast, (preceding::foo) returns the first foo element in document order, because the axis that applies to the  predicate is the child axis.Examples (xslt:xml):
Interactive xlab: [xsl:value-of] [xsl:template]