# XSLT 2.0

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.

Next