S9API interface
With the DocumentBuilder class, when DTD or schema validation is
requested, the WhitespaceStrippingPolicy setting
was previously ignored (although the documentation didn't make this clear): whatever the setting, whitespace nodes were stripped if and
only if they appeared in elements with element-only content. This has changed so that any explicit setting other than
WhitespaceStrippingPolicy.IGNORABLE
results in an exception reporting the error.
It is now possible to define a custom WhitespaceStrippingPolicy
by supplying a callback predicate which indicates whether
whitespace for a particular element name is to be stripped or preserved. This provides XQuery users with a mechanism comparable to
XSLT's xsl:strip-space
and xsl:preserve-space
, and allows fine-grained control of whitespace stripping
to be taken out of the control of the transformation.
The constructors for the Serializer class (deprecated since 9.6) have been removed; the factory methods on
Processor must now be used instead. This change ensures that the Serializer
is always bound to a specific
Processor
.
New classes XdmMap and XdmArray have been added as subclasses of XdmFunctionItem,
making it easier to pass maps and arrays as parameters to queries or stylesheets. Maps and arrays are also now supported
in the s9api ItemType and ItemTypeFactory classes. The XdmMap
class implements
the interface java.util.Map<XdmAtomicValue, XdmValue>
, allowing it to be used directly in contexts where a Java map
is expected (it is immutable, however).
The class XdmAtomicValue now has equals()
and
hashCode()
methods that reflect the semantics
of the op:is-same-key()
relation which is used to compare keys in maps. (Without this, the XdmItem.asMap()
method was not very useful).
Static methods have been added to XdmValue
, XdmAtomicValue
, XdmMap
, and XdmArray
,
to allow conversion from ordinary Java values. For example, XdmArray.makeArray()
will construct an array of xs:int
values from a Java int[]
array.
A static method XdmFunctionItem.getSystemFunction() allows a function item representing a built-in function to be obtained. This can then be used for direct calls on system functions from the Java application without the inconvenience of parsing an XPath expression to represent the function call.
The method XdmFunctionItem.call() has been enhanced to
apply the function conversion rules to the supplied
arguments, and to return a clean error message (rather than a ClassCastException
) if the supplied arguments are of the wrong type.
The method Xslt30Transformer.setMessageListener() is
supplemented with a variant that accepts a MessageListener2
as its parameter; the MessageListener2
interface allows the xsl:message
error code to be reported along with the message
itself.