Saxon extensions to the W3C XSLT/XQuery specifications
The EXSLT extension function exslt:node-set(), which is widely implemented in XSLT 1.0 processors, is now implemented in Saxon-HE (it has always been available in PE and EE). This is to make it easier to write stylesheets that work both under Saxon and under XSLT 1.0 processors.
In XQuery, the option declaration declare option saxon:default
, which was
introduced to allow a default value to be defined for an external variable before a standard
mechanism for this became available in XQuery 3.0, is now dropped.
In XSLT, the extension instruction saxon:call-template
, which allowed the name
of the called template to be computed dynamically, is dropped. With the introduction of
higher-order functions there is no longer any need for this extension, and it is complex to
redefine the semantics in a way that makes sense with XSLT 3.0 packages. The effect of
saxon:call-template
can be achieved by replacing (or wrapping) the relevant
templates with functions, and replacing the call on saxon:call-template
with a
dynamic call on a function found using fn:function-lookup().
In XSLT, the extension declaration saxon:collation
, which has been deprecated
since Saxon 8.8, is dropped.
The extension function saxon:generate-id
is dropped. It is no longer needed,
since the standard fn:generate-id() is now available in XPath and XQuery as well as XSLT.
The extension function saxon:get-pseudo-attribute() now returns an empty sequence rather than a zero-length string if the requested pseudo-attribute is absent.
The XSLT extension attribute saxon:read-once="yes"
, which was an early interface
provided for streamed processing, is dropped. In place of <xsl:copy-of
select="doc('a.xml')//e" saxon:read-once="yes"/>
, use
<xsl:stream href="a.xml"><xsl:apply-templates select=".//e"/></xsl:stream>
;
or use <xsl:sequence select="saxon:stream(doc('a.xml')//e)"/>
.
The saxon:stream() extension
function now delivers snapshots of the selected nodes (that is, the result of fn:snapshot() rather than
fn:copy-of()
); the effect is that the copied nodes come with copies of their
ancestors and the attributes of ancestors, as well as the node's own attributes and
descendants).
The extension function saxon:query() now accepts queries using XQuery 3.0 syntax.
The EXPath binary module (see http://www.expath.org/modules/binary/) is now implemented in Saxon-PE/EE. This provides a number of extension functions for manipulating binary data and converting to and from numeric and string forms. As the specification has been given Version 1.0 status, the set of functions provided can be considered stable.
The proposed EXPath archive module (see http://www.expath.org/modules/archive/) is now implemented in Saxon-PE/EE. This provides a number of extension functions for manipulating archive directory structures, such as ZIP and JAR formats. It is intended to replace the functionality of the EXPath ZIP module, support for which was withdrawn in 9.5.1.1.
Some of the signatures of the functions in the proposed EXPath file module (see http://www.expath.org/modules/file/), implemented in Saxon-PE/EE, have altered.