Saxon extensions to the W3C XSLT/XQuery specifications
A new extension function (technically a pseudo-function) saxon:try()
has been added. This returns the value of its first argument, unless evaluation of the first argument
fails, in which case it returns the value of its second argument. This provides a simple means for catching
dynamic errors. No information is available about the actual error that occurred.
This function is available only in Saxon-SA.
The EXSLT extension function random:random-sequence
has been
implemented (acknowledgements to Martin Szugat)
The saxon:serialize()
extension function is now available in
environments other than XSLT (for example, in XQuery): in such cases the second argument is the name
of the serialization method (xml, html, xhtml, text), and the other serialization parameters are all defaulted.
The XPath expression used within a saxon:evaluate
expression now has
access to all the functions that would be available to a static XPath expression appearing in the same position:
including constructor functions, user-defined stylesheet or XQuery functions, and Java extension functions.
The default function namespace is also inherited from the calling environment.
In the case of a node in a temporary tree, the saxon:line-number()
function
now identifies the line in the stylesheet containing the instruction that created this node. As with line numbering
in source documents, this only works if line numbering is enabled using the -l or -T option on the command line,
or the corresponding API option. This line number is also used to identify such nodes in trace output.
A new extension function saxon:string-to-utf8()
is available. It returns
a sequence of integers representing the octets in the UTF8 encoding of a string.
New extension functions saxon:octets-to-hexBinary()
and hexBinary-to-octets
are available. They translate between a sequence of integers (in the range 0-255) representing a sequence of octets,
and the xs:hexBinary
value representing that sequence of octets.
New extension functions saxon:octets-to-base64Binary()
and base64Binary-to-octets
are available. They translate between a sequence of integers (in the range 0-255) representing a sequence of octets,
and the xs:base64Binary
value representing that sequence of octets.
The single-argument extension functions saxon:min
and saxon:max
, which had already been
removed from the documentation, have now been dropped from the product. They are superseded by the standard
XPath 2.0 min()
and max()
functions. The EXSLT min()
and max()
functions
remain available.
The output of the trace()
function is now sent to the TraceListener, if a
TraceListener has been activated (for example by use of the -T option on the Query or XSLT command line). If no
TraceListener is active, the output is sent directly to System.err as before.
Two new extension functions are available (in Saxon-SA only) to enable the use of higher-order functions in
XSLT and XQuery. The first, saxon:function()
, takes the name and arity of a user-defined
function as input, and returns a value representing this function (a FirstClassFunction
object). The second function,
saxon:call()
takes this FirstClassFunction object as its first argument, and the values to be supplied
to the function as the second and subsequent arguments, and returns the result of calling the identified function with
these arguments. Higher-order functions make XSLT and XQuery into fully-capable functional programming languages,
and enable the implementation of many algorithms (for example, graph-searching algorithms) that would otherwise be
extremely clumsy to program.
A new higher-order extension function saxon:for-each-group
is
available (in Saxon-SA only). This is intended primarily
for use in XQuery, which lacks XSLT's xsl:for-each-group
construct. The function takes three parameters:
the population of items to be grouped, a function to calculate the grouping key, and a function to process each group (where
a group is defined as a subset of the population having the same values of the grouping key). It returns the result of
applying this function to each group in turn. The groups are processed in order of first appearance.
A new higher-order extension function saxon:analyze-string
is
available (in Saxon-SA only). This is intended primarily
for use in XQuery, which lacks XSLT's xsl:analyze-string
construct. The function takes four or five parameters:
the string to be analyzed, a regular expresion (regex), a function to process matching substrings,
a function to process non-matching substrings, and optionally, a set of flags corresponding to those available
on the matches()
function. The function splits the string into a sequence of substrings, each of which
either matches the regex or does not match it, and then calls one of the two functions as appropriate, with
this substring as an argument.
Versions of the XSLT functions format-date()
, format-dateTime
,
format-number()
, and format-time()
have been made available as extension functions
in the Saxon namespace, thus making them available to XQuery users. They are available in Saxon-SA only.
There is no equivalent of XSLT's decimal formats, so it is not possible to change the characters used for the
decimal point and grouping separators, for example.
A new extension function saxon:namespace-node()
is added. This allows a parentless
namespace node to be constructed. The function serves the same purpose in XQuery as the xsl:namespace
instruction in XSLT: it allows dynamically-computed namespaces to be added to the result document.