XSLT
Static type checking is now implemented for non-tunnel parameters on xsl:call-template
in the same way as for function
calls: that is, the supplied value is compared against the required type, conversion code is generated if necessary, and errors are
reported if the static type of the supplied value is incompatible with the required type. Tunnel parameters and parameters for
xsl:apply-templates
are checked dynamically as before. One effect of this change is that declaring the required type
of parameters on named templates now gives a performance benefit as well as improving debugging and robustness.
In <xsl:number level="any">
, the rules have been changed for the case where the node being numbered
matches the pattern given in the from
attribute: such a node is now numbered 1, whereas previously it was
numbered according to its distance from the previous node that matched the from
pattern, if any. This implements
the change defined in W3C bug 5849.
For the three serialization parameters doctype-system
, doctype-public
, and saxon:next-in-chain
,
supplying "" (a zero-length string) as the value of the parameter is taken as setting the parameter to "absent". This is equivalent
to omitting the parameter, except that it overrides any setting that would otherwise be used. For example, this allows a value set
in <xsl:output>
to be overridden in an importing stylesheet, in an <xsl:result-document>
instruction, in the JAXP setOutputProperties()
method, or from the command line (where the syntax is simply
!doctype-system=
). (Note that this takes a slight liberty with the W3C and JAXP specifications.)
The doc-available()
function, when it returns false, now ensures that the document remains unavailable
for the rest of the transformation: previously, if called repeatedly it would check repeatedly, and therefore could
return different results on different calls. Also, once doc-available()
has returned false, subsequent
calls on doc()
or document()
are now guaranteed to fail. A call on doc-available()
that returns false does not prevent the document being created using xsl:result-document
, but any such
document will not be available during the same transformation.
The new function element-with-id()
, introduced in the errata for Functions and Operators, is available.
It behaves the same as the id()
function, except in the case of ID-valued elements, where it returns the
parent of the element having the is-ID
property, rather than the element itself.
For <xsl:number>
, numbering sequences have been added for format tokens x2460 (circled digits),
x2474 (parenthesized digits), and x2488 (digit followed by full stop). In each case the numbering sequence only handles
numbers in the range 1-20; numbers outside this range are formatted using the format token "1" (that is, as conventional decimal
numbers).
The option input-type-annotations="strip"
is now honoured for a document supplied in the form of a pre-built
tree, by creating a view of the tree in which all nodes appear as untyped. Previously it was honoured only when the tree
was built by the XSLT processor.
The TimedTraceListener
, used for timer profiling, is now capable of writing the profile output to a destination other than
System.err
. This option cannot however be enabled from the command line, only from the Java API.
A stylesheet that does not use an xsl:import-schema
declaration is now (by default) compiled with
schema-awareness disabled. This means that it will not be able to handle schema-typed input documents, or to
validate temporary trees created within the stylesheet, though it can still validate the final output tree. This
is for performance reasons: generating code to handle typed input data when it will not be encountered
adds to the execution cost. It is possible to override this setting from the s9api API on Java or from the Saxon.Api
on .NET. From the command line, schema-awareness is set automatically if the -sa option or any other option
implying schema-awareness is used (for example -val:strict). From JAXP, schema-awareness is set automatically
if the schema-aware TransformerFactory is used.
The amount of compile-time checking when schema-awareness is used has been further increased. In particular, if the expected type of a constructed element is known, Saxon now attempts to check (a) that the sequence constructor delivering the content of the element is capable of delivering a sequence of elements that matches the content model (previously it only checked that each child element could legitimately belong to the content model), and (b) that the sequence constructor is capable of creating each mandatory attribute required by the complex type of the element.
In the interests of performance, the decision whether to treat an ambiguous template rule match as a fatal error, a warning, or as fully recoverable, is now made at stylesheet compile time rather than at run-time.
The extension attribute saxon:allow-all-built-in-types
is no longer recognized.
Command line changes
If the filename specified in the -o option is in a directory that does not exist, the directory is now created.
A new option -config:filename
is available. This refers to a configuration file in which many
configuration options can be specified. Options specified directly on the command line override corresponding options
in the configuration file. The format of the configuration file is given in The Saxon configuration file.
Configuration files are not currently supported on .NET
Saxon-defined serialization parameters can now be defined on the command line using a lexical QName, for example
!saxon:indent-spaces=3
as an alternative to the Clark-format expanded name.
The command line interface (net.sf.saxon.Transform
) now allows a stylesheet parameter to be supplied as the value
of an XPath expression. For example, java net.sf.saxon.Transform -xsl:style.xsl ?p=current-dateTime()
sets the stylesheet
parameter p
to the value of the current date and time (as an instance of xs:dateTime
). The fact that the value
needs to be evaluated as an XPath expression is signalled by the leading "?" before the parameter name. Note that the context for evaluating
the expression includes only the "standard" namespaces, no context item, and no variables.
A new option is available (-dtd:recover
on the command line) to perform DTD validation but treat the error
as non-fatal if it fails.
A new option -now
is available on the command line to set the current date and time (and the implicit
timezone). This is designed for testing, to enable repeatable results to be obtained.