Streamable path expressions
The expression used as an argument to the
saxon:stream function must consist of:
A call to the
doc()function, followed by
A streamable pattern
Streamable patterns use a subset of XPath expression corresponding roughly to the rules for match patterns in XSLT (the reason for this is that both subsets are designed to make it efficient to test an individual node for membership of the selected set of nodes). There are some extensions and some restrictions.
Unlike XSLT match patterns, streamable patterns are not allowed to perform arbitrary navigation within a predicate. For example,
employee[id = preceding-sibling::employee/id]is not allowed.
More specifically, the predicate must not be positional (that is, it must not evaluate to a number, and must not call
last()), and it must only use downward selection from the context node (the self, child, attribute, descendant, descendant-or-self, or namespace axes)
The streamable pattern that follows
doc()/in the argument to
saxon:streammust be a relative path: unlike XSLT match patterns, it may not start with "/" or "//" or with a call to the
Some of the restrictions in XSLT match patterns are relaxed, however: for example, the descendant axis can be used.