Pattern syntax for XSLT 2.0
Saxon supports the full XSLT syntax for patterns. The rules below describe a
                simplified form of this syntax (for example, it omits the legal but useless pattern
                    @comment()):
Note: not all combinations are allowed. If the anchor is // then the
                remainder is mandatory.
The form of a literal is as defined in expressions; and a predicate is itself a
                boolean or numeric expression. As with predicates in expressions, a numeric
                predicate [P] is shorthand for the boolean predicate
                    [position()=P].
Informally, a pattern consists of either a single path or a sequence of paths separated by vertical bars. An element matches the match-pattern if it matches any one of the paths.
A path consists of a sequence of path-parts separated by either / or
                    //. There is an optional separator (/ or
                    //) at the start; a // has no effect and can be
                ignored. The last path-part may be an element-match, a text-match, an
                attribute-match, a pi-match, or a node-match; in practice, a path-part other than
                the last should be an element-match. 
The axis syntax child:: and attribute:: may also be used in
                patterns, as described in the XSLT specification.