Application Programming Interfaces
This section includes changes to the main s9api interface library, as well as other significant application programming interfaces
In s9api, an XQueryEvaluator
is now a
Destination
, so queries can participate in s9api
pipelines in the same way as transformations.
In s9api, the base output URI of an XsltTransformer
is now taken from the
Destination
if (a) no base output URI has been
explicitly set, and (b) the destination is a Serializer writing to a supplied File.
A class XdmFunctionItem
has been added to both s9api and the Saxon.NET API to represent
items that are functions (as distinct from atomic values and nodes).
It is now possible to set a default collection and a collection URI resolver at the
level of the Controller
(that is, an individual
transformation or query); previously it could only be set globally, in the
Configuration
. There is now a
defined constant URI (Collection.EMPTY_COLLECTION
) which always
represents an empty collection, without needing to be resolved by the URI resolver.
It is now possible to set an extension function library at the level of an individual query
(via the StaticQueryContext
object),
or an individudual stylesheet (via the CompilerInfo
object.
Previously an extension
function library could only be defined at the Configuration
level.
In the JAXP XPathFactory
implementation, Saxon configuration properties
(as listed in FeatureKeys
) can now be supplied to the getFeature()
and setFeature()
methods, provided the properties are of type boolean.
A new class Transmitter
is available as a new kind of
JAXP Source
, recognized in all Saxon interfaces that accept a Source
.
A Transmitter writes events to a Receiver
.
This is useful when the input to a streamed transformation is supplied programmatically.
A new simplified interface for defining context-free extension functions is available as part of the s9api package:
Processor.registerExtensionFunction
,
where the argument implements the interface ExtensionFunction
.
Saxon now recognizes the class StAXResult
in interfaces where a Result
is expected,
specifically in the JAXP interfaces for transformation and validation. The StAXResult
object
must contain an XMLStreamWriter
(Saxon does not yet support XMLEventWriter
). Because
StAXResult
and other StAX classes are dependent on JDK 1.6, this code has been packaged in a
separate JAR file, which must be on the classpath if the functionality is required.