XSLT: Sorting and Collations
The default collation for
xsl:sort has changed. If no
case-order attribute is present on the
element, the default collation is determined in the same way as the default collation for operators
le and functions such as
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
into line with the defaults for all other functions and operators, and with the
order by construct
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
If linguistic collation is required, this can be achieved by specifying
(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.
XSLT: 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
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.
xsl:namespace instruction now raises error
XDTE0905 if the constructed
namespace node has a string value that is not a valid URI.