Saxon now checks that all the documents involved in a query or transformation were built under the same
Configuration. Previously this was not always checked; the consequence of breaking this rule was
that documents in different configurations could used the same document numbers and thus
be considered to have the same identity, causing incorrect results for operations that are sensitive to
node identity, for example elimination of duplicates in a path expression. Note that some of the issued
API sample applications have required changing as a result of these stricter checks.
PreparedSchema object now has methods allowing the application to iterate over all the components
in a schema: previously it was only possible to retrieve components by name.
Transform command line, it is now possible to nominate an
the new -or option.
Casting of a QName to a QName (typically a type derived from QName) and from a NOTATION to a NOTATION is now supported. This is a late change in the specification: see W3C bugzilla entry 2678.
In many cases the error that occurs when an attribute node is added to an element after adding child nodes (such as elements or text nodes) to the parent element is now detected statically. This also applies to the error that occurs when an attribute node is added directly to a document node. The change affects both XSLT and XQuery.
When reading input using a StAX parser, (a) ignorable whitespace is now recognized (if reported by the parser)
and stripped according to the configuration settings in use, and (b) unparsed entities are recognized and reported,
so they are available to the XSLT functions
When a Saxon tree is accessed using DOM interfaces (using the
NodeOverNodeInfo wrapper), namespace nodes
in the Saxon tree are now presented as attributes in the DOM interface.
If an unknown encoding is requested, the transformation now fails with error SESU0007 as defined in the serialization specification. Previously Saxon used ASCII as a fallback. Similarly, error SESU0013 is raised if the HTML output method is used with the version parameter set to a value other than "4.0" or "4.01".
DocumentBuilderImpl class, which is Saxon's implementation of the JAXP
interface, now has additional non-JAXP methods allowing a
Configuration to be supplied. It is
necessary to register a
Configuration if the new document is to be used within a query or
transformation, to ensure that it has a unique identity and uses the same
now checks that a document (whatever the object model) that is supplied as input to a query or transformation
uses the same
Configuration as that query or transformation.
ContentHandlerProxy class no longer implements
Locator directly; instead it provides this service
through a separate class
ContentHandlerProxyLocator. This change is made because
ContentHandlerProxy previously implemented both
Locator, both of which had a
getSystemId() method, and there was a tension between the semantics of the
It is now possible to specify at compile time that tracing is to be compiled in to the executable code, without
TraceListener until run-time. This is a more sensible approach when the compiled code
is executed repeatedly.
The serialization pipeline now processes
cdata-section-elements before processing character
maps, as required by the latest revision of the specification. This means that characters in an element where
CDATA sections are used are not subject to character mapping.
It is now possible to customize the serialization pipeline. A
SerializerFactory can be registered with the
Configuration, subclassing the standard
SerializerFactory, and by overriding methods in the standard
SerializerFactory it is possible to replace any of the components of the serialization pipeline with
customized subclasses; it is also possible to replace the entire pipeline, should you wish to.