Saxon extensions to the W3C XSLT/XQuery specifications
New XSLT 3.0 instructions such as xsl:iterate
and xsl:try
no longer
have synonyms in the Saxon namespace.
Extension function saxon:for-each-group()
is dropped (superseded by "group by"
in XQuery).
New extension functions saxon:schema()
and saxon:type
are available,
giving access to schema information. The saxon:schema()
function obtains information
from all the schema components available in the query or stylesheet; the saxon:type
function gives information about the type annotation of a node. In both cases, the information
is returned as a function item which behaves like a map from schema component property names to values;
for example the name of the type annotation of a node is given by saxon:type($node)('name')
.
A new extension function saxon:send-mail()
is available to send email via an SMTP server.
A new extension function saxon:key-map()
is available: this allows the index constructed
using xsl:key
to be viewed as a map, giving extra functionality such as getting all the entries
in a given range, enumerating the key values, concatenating keys across multiple documents, processing the
entries in sorted order, etc.
The third argument of saxon:transform()
, which supplies parameters to an XSLT transformation,
may now take the form of a map, allowing the parameter value to be any value whatsoever (the old mechanism restricted
it to atomic values.)
The extension function saxon:index
has changed to expect a function as its second argument
rather than a prepared expression, and it now returns a map which can be accessed using all the standard
map functions. The extension function saxon:find
is now a deprecated synonym for map:get
, which
means that it only accepts a single atomic value.
There is no longer an option to specify a collation.
A new flag "v" has been added to saxon:deep-equal()
to suppress the check that
two elements have the same "variety" of type: for example if one has element-only
content, the other must have element-only content. This check was not performed
in previous releases; in this release it is performed by default (as required by the
fn:deep-equal() specification), but may be suppressed using this option. The option is
useful when comparing validated and unvalidated documents.
The proposed EXPath file module (see http://www.expath.org/modules/file/) is implemented (in Saxon-PE and -EE). This provides a number of extension functions for reading and writing files in filestore, creating and deleting files and directories, listing the contents of directories, and so on.
The EXPath zip module (see http://expath.org/spec/zip) is implemented. The implementation is derived from the original implementation by Florent Georges, but has been more closely integrated into Saxon. This module is open source code; the extensions are integrated into the Saxon-PE and Saxon-EE distribution, and are available to Saxon-HE users in source code form, where they can be linked to the product in the same way as any other extension functions (see Integrated extension functions. The implementation is not thoroughly tested and there are a number of gaps in the specification. Neither the specification nor the implementation should be regarded as stable.
A new serialization option saxon:attribute-order
is available. The value is a whitespace-separated
list of attribute names. Attributes whose names are present in the list come first, in the order specified;
other attributes follow, sorted first by namespace URI and then by local name.
When the -wrap
option is used in XQuery, the serializer is now capable of generating an XML representation
of a map, using nested elements to represent the entries in the map with their keys and values.