Patterns in XSLT 3.0

XSLT 3.0 introduces a new pattern syntax .[expression]: this matches any item for which the effective boolean value of the expression (evaluated with that item as the context item) is true. For example .[. gt 0] will match any item (either an atomic number, or a node that atomizes to a number) if it is greater than zero, while .[nilled()] matches any element that is nilled (@xsi:nil='true'). Note that if the predicate cannot be evaluated because the item is of the wrong type, no error occurs, the pattern simply does not match.

Other XSLT 3.0 extensions to patterns that are implemented in Saxon 9.6 include the following:

The intersect and except operators are allowed at the top level: for example match="* except br".

Parentheses may be used in conjunction with a predicate, for example match="(//para)[1]"

Any downwards axis may be used in a pattern, for example descendant or descendant-or-self.

A pattern can consist simply of a variable reference: match="$v". This matches any node that is present in the value of $v. For a pattern used in template matching, this will necessarily be a global variable.

A pattern can also be a path starting with a variable reference: match="$v//book" matches any book element that is a descendant of a node in $v.

Patterns can be restricted to match nodes within a particular document, for example match="doc('books.xml')//book. (Note that Saxon will only read the document once, so this is not an expensive operation).