XSLT 2.0 implementation

A schema-aware transformation can now be requested using the new -sa option on the command net.sf.saxon.Transform, as an alternative to using the command com.saxonica.Transform.

The initial context node supplied as input to a transformation is no longer required to be part of a document (for example, it can be a parentless element). There are some API changes to the Controller class as a consequence of this change: in particular, the methods getPrincipalSourceDocument and setPrincipalSourceDocument are deprecated and replaced by methods to get or set the initialContextNode.

The evaluation of XSLT attribute value templates is now notified to the TraceListener. The standard TraceListener ignores this notification, but a user-written TraceListener can take action on it.

In xsl:namespace-alias, checking and reporting of the error conditions XTSE0810, XTSE0812, and XTSE0815 has been improved.

The xsl:namespace-alias declaration now allows use of #default in either the stylesheet-prefix or result-prefix attributes to refer to the null namespace if no default namespace has been declared. This change was made by the working group to restore backwards compatibility with the interpretation of the XSLT 1.0 specification adopted by some processors (including Saxon and MSXML).

The format-number() function now outputs NaN without any prefix or suffix. (W3C change, see W3C Bugzilla 2712).

Alphanumeric collations are now supported. In such a collation, any sequence of consecutive digits is treated as a number and is sorted numerically. For example, by specifying collation="http://saxon.sf.net/collation?alphanumeric=yes" on the xsl:sort element, a collating sequence is used in which "iso8859" sorts before "iso10646".

The saxon:collation declaration has been enhanced to allow additional properties of the collation to be specified: case-order, alphanumeric, ignore-case, ignore-modifiers, ignore-symbols, ignore-width. These properties are also available as query parameters in collation URIs.

When copying elements or attributes using xsl:copy-of, or when copying attributes using xsl:copy, Saxon now reports an error if the copy asks for type annotations to be retained when the content is namespace-sensitive (QName or NOTATION values), unless namespaces are also copied. Error XTTE0950 is reported when this error occurs.

XSLT input supplied using a JAXP TransformerHandler is now schema-validated if the Configuration is set up to request schema-validation of source documents.

If the href attribute of xsl:include or xsl:import contains a fragment identifier, this is now stripped from the URI before calling the URIResolver. The URIResolver is now responsible for locating the document containing the referenced stylesheet module, while Saxon itself then locates the xsl:stylesheet element within that document using the fragment identifer as an ID value. There should be no change in behaviour if the default URIResolver is used.