XPath 2.0 implementation

The "?" in the SequenceType syntax element(N, T?) or element(*, T?) is now implemented. Without the "?", the test does not match an element that has xsi:nil="true". Similarly, the syntax schema-element(N) no longer matches an element with xsi:nil="true".

The SequenceType syntax document-node(element(N,T)) or document-node(schema-element(N)) is now supported in all contexts, including within a step of a path expression.

The SequenceType syntax void() (previously empty()) has changed again: it is now empty-sequence(). Saxon currently allows void() and empty-sequence() as synonyms.

The tokenizer now disallows constructs of the form 10div 3: that is, a numeric literal must now be separated by whitespace from a following operator keyword.

The expression optimizer now recognizes constructs that can be speeded up by indexing, and builds the necessary indexes automatically. This works both in XSLT and in XQuery. This optimization is available in Saxon-SA only. There are two constructs that are recognized as candidates for indexing. Firstly, the optimizer recognizes an absolute path expression (one starting at a document node) containing a predicate that is an equality match between a value that depends on the context node and a value that doesn't depend on the path, or an equivalent FLWOR expression in XQuery. This causes a document-level index to be built - in effect, an implicit xsl:key declaration. Such indexes last as long as the document stays in memory, and can be shared by multiple queries executing against the same document. Secondly, the optimizer recognizes similar path expressions whose first term is a variable reference, provided that the path expression is itself in a loop relative to the variable binding. This causes the value of the variable to be indexed: this index lasts only as long as the variable itself.