XSLT 3.0 implementation
The type-available() function now allows the argument to be an EQName in the format "Q{uri}local".
A call on system-property('xsl:version') now returns "2.0" or "3.0" depending on whether XSLT 3.0 has been enabled.
The xsl:analyze-string instruction allows the regular expression to be one that matches a zero-length string.
The XSLT 3.0 pattern syntax
is fully implemented. Support for the syntax ~typename
, which was present in
earlier versions of the specification, has been discontinued.
Accumulators have been changed to use the syntax in the latest working draft (functions accumulator-before() and accumulator-after() with a first argument giving the accumulator name, rather than functions with user-defined names.)
The attribute applies-to
on xsl:accumulator is implemented.
The version number 2.1 is no longer recognized as a synonym for 3.0.
The xsl:function attributes
cache
and identity-sensitive
are accepted. Setting
cache="full"
or cache="partial"
and
identity-sensitive="no"
has the same effect as setting
saxon:memo-function=yes
; it causes the function to be implemented as a memo
function, remembering the results of all previous calls.
The select
attribute of xsl:break and xsl:on-completion is implemented.
With a non-schema-aware processor at version="3.0", the attributes
validation="preserve"
and validation="lax"
are now treated as
validation="strip"
, rather than being rejected as in 2.0.
Full support for the use of the Unicode Collation Algorithm is provided in Saxon-PE/EE, with fallback behaviour in Saxon-HE.
Conversion between JSON and XML using the json-to-xml() function is supported as per the specification in Saxon-PE/EE.
Support for the bind-group
and bind-grouping-key
attributes in xsl:for-each-group is dropped,
and the semantics of current-group() and current-grouping-key() change reflecting the latest XSLT 3.0 specification.
The xsl:merge syntax has been updated
to the latest spec (bug 24150, post-last-call change). The
xsl:merge-source/@for-each
attribute is renamed for-each-item
, and
calls to current-group()
and current-grouping-key()
are replaced by
current-merge-group()
and current-merge-key()
respectively. The for-each-stream
attribute is implemented, with the capability
to validate input documents, and the single-argument form of
current-merge-group()
is available, allowing selection of merged items
according to which input source they came from. Streamed merging is not yet implemented.
The typed
attribute on xsl:mode is partially implemented. Currently with typed="strict"
or
typed="lax"
, only simple name patterns are converted to the
schema-element(N)
form.
Maps no longer have a collation
property (the feature was dropped from the
spec); instead there is now a collation-key() function, which has been implemented.
The function library for maps is updated to
reflect the current specification. The functions map:merge()
,
map:put()
, and map:for-each-entry()
are implemented. The function
map:new()
, which has been removed from the specification, is retained in Saxon
for the time being.
Shadow attributes (also known as static AVTs) are implemented. This facility allows any
attribute of an XSLT element to be computed during preprocessing by means of a static
expression: for example, to include a module whose URI is computed from static parameters, you
can write <xsl:include _href="lib{$V}.xsl"/>
. Note the leading underscore on
the attribute name to indicate that this is a shadow attribute. The feature applies to all
no-namespace attributes of elements in the XSLT namespace.