XSLT 2.0 implementation

Collations

The default collation for xsl:sort has changed. If no collation, lang, or case-order attribute is present on the xsl:sort element, the default collation is determined in the same way as the default collation for operators such as le and functions such as min and max: that is, it is taken from the nearest enclosing [xsl:]default-collation attribute if there is one, or failing that, the Unicode codepoint collation is used.

This change is motivated primarily by performance considerations. Previously Saxon used the linguistic collation for the current Java locale. Sort-intensive stylesheets can run at five times the speed when using the codepoint collation.

The change also has usability benefits in that it brings the default collation for xsl:sort into line with the defaults for all other functions and operators, and with the order by construct in XQuery.

For English-speaking users, the most noticeable effect will be that upper-case now precedes lower-case, for example, "ZEBRA" sorts before "aardvark".

Note that according to the XSLT 2.0 specification, the default collation used by xsl:sort is implementation-defined.

If linguistic collation is required, this can be achieved by specifying lang="en" (or another language) on the xsl:sort element. To pick up the collation for the current Java locale, whatever it might be, specify collation="http://saxon.sf.net/collation" with no query parameters. It is possible to specify a default collation for a stylesheet module using the default-collation attribute on the xsl:stylesheet element, but note that this will affect other operations besides sorting.

From this release, the saxon:collation declaration is deprecated, and the default attribute of this declaration is ignored.

Validation of Namespace URIs

XSLT error codes XTDE0835 and XTDE0865 are now detected and reported. This means that it is an error to supply a value for the namespace attribute of xsl:element or xsl:attribute that is not a valid URI. Note that this represents a backwards incompatibility from previous Saxon releases and from the XSLT 1.0 specification, which explicitly stated that supplying an invalid URI was not an error.

Similarly the xsl:namespace instruction now raises error XDTE0905 if the constructed namespace node has a string value that is not a valid URI.