XSLT 2.0 implementation
The xsl:sequence
instruction can no longer contain a sequence
constructor. Specifically, it must have no content other than (optionally)
one or more xsl:fallback
instructions. This is a change agreed by
the Working Group since the November 2003 drafts were published.
The xsl:perform-sort
instruction can now contain a sequence
constructor as an alternative to a select
attribute.
The xsl:sort
element can now contain a sequence
constructor as an alternative to a select
attribute.
A check has been added that within xsl:for-each
and
xsl:for-each-group
, any xsl:sort
elements appear before any other
instructions. This enforces a rule in XSLT 1.0 and XSLT 2.0 that was previously not enforced.
The xsl:key
element may now have a content constructor
to evaluate the key value, in place of the use
attribute.
The [xsl:]inherit-namespaces
attribute is implemented on
xsl:element
, xsl:copy
, and literal result elements. By default, the
namespace nodes on a constructed element are inherited by its children. Setting this attribute
to "no" prevents this. The difference will not usually be noticeable unless the result document
is serialized with version="1.1" undeclare-namespaces="yes"
.
The xsl:result-document
instruction may now take
serialization attributes such as method
, indent
, or saxon:indent-spaces
.
These attributes may be AVTs, so the values can be decided at run-time. Any values specified on the
xsl:result-document
instruction override the values specified on the xsl:output
declaration.
Zero-length text nodes can now be constructed. They disappear when added as a child
node of an element, but can exist so long as they are parentless. This means, for example, that a
function whose body evaluates three xsl:value-of
instructions will always return a
sequence of three text nodes, regardless of the actual values.
A dynamic error that occurs while evaluating a predicate in a match pattern is now treated as a recoverable error. By default, a warning is output, and execution continues as if the predicate returned false. (Previous releases of Saxon recovered silently from this error without reporting it; previous versions of the XSLT specification treated the error as fatal. The product is now aligned with the specification.)
When xsl:call-template
specifies a parameter
using xsl:with-param
for which there is no corresponding parameter declared in the called template, no error
is reported if the call-template instruction is in backwards compatible mode,
that is if the version
attribute is equal to "1.0".
A document node can now be copied using xsl:copy
or
xsl:copy-of
. If the destination is a tree, copying the document node has the same effect
as copying its children. But it the destination is a sequence, the document node itself is copied.