XSLT 2.0 implementation
The warning that is issued when a stylesheet that specifies version="1.0"
is now suppressed
by default when the transformation is run via an API rather than from the command line. The default can be changed
by calling Configuration.setVersionWarning(true)
. User feedback suggests that this warning is often
an irritant and there are environments where it is hard to suppress it. The XSLT specification says that the warning
SHOULD be produced unless the user has requested otherwise; therefore be informed that calling the Saxon API without setting
this switch counts as "requesting otherwise".
Tail call optimization is now implemented for xsl:next-match
as well as xsl:call-template
and xsl:apply-templates
. This caters for mutual recursion involving a mixture of these three instructions.
The type-available()
function can now be used to check for the availability of Java classes. For example
type-available('jt:java.util.HashMap')
returns true, where the prefix jt
is bound to the URI
http://saxon.sf.net/java-type
.
The system property xsl:supports-namespace-axis
, introduced in erratum E14, is now recognized (and returns the
value "yes").
In xsl:number
, the specification classifies characters as alphanumeric if they are in one of the Unicode
categories Nd, Nl, No, Lu, Ll, Lt, Lm or Lo. Saxon was previously using the Java method Character.isLetterOrDigit()
which turns out not to be precisely equivalent to this definition. This has been corrected.
An additional option -xsd:schemadoc1.xsd;schemadoc2.xsd...
is available on the command line. This supplies
a list of additional schema documents to be loaded. These are not automatically available in the static context of the stylesheet, but they
are available for use when validating input documents (or result documents). The argument can also be used to supply the schema
location of a schema document imported by the stylesheet, in the case where the xsl:import-schema
declaration
refers only to the target namespace of the schema and not to its location.
An additional command line option -traceout
allows the output from the trace()
function to be directed
to a file, or to be discarded. A corresponding option is available in the API (classes Controller
and XsltTransformer
).
A new extension instruction saxon:iterate
is available experimentally, with subsidiary instructions
saxon:continue
, saxon:break
, and saxon:finally
. This is designed partly for easier coding of operations
that otherwise require explicit recursion, but mainly to enable streamed processing of input files. For details see
saxon:iterate.
The code supporting the creation and testing of patterns, as defined in XSLT, has now been decoupled from
the XSLT engine, allowing patterns to be used in a non-XSLT environment (for example, in an XProc processor).
Java APIs for invoking this functionality have been added to the sxpath.XPathEvaluator
and s9api.XPathCompiler
classes. These APIs compile the pattern into an object that masquerades as an XPath expression;
when evaluating this expression, the result is true if the pattern matches the context node, false if it does not.
The AntTransform task, a customized Ant task for invoking Saxon XSLT transformations, is no longer issued as an intrinsic part of the Saxon product, but can be downloaded as a separate package from SourceForge: see https://sourceforge.net/project/showfiles.php?group_id=29872.