System Programming Interfaces

The NodeInfo interface has changed:

A number of methods on the Controller interface have changed to reflect the fact that there is a difference between XSLT and XQuery in the handling of the initial context item/node, and the context item used for evaluating global variables. These can now be set independently using the methods setInitialContextItem and setGlobalVariableContext. (The difference is that in XSLT, global variables are evaluated with the context node set to the root of the tree containing the initial context item, whereas in XQuery, the initial context item is used directly.) Note that although the standard XSLT and XQuery interfaces follow the rules of their respective languages, it is possible by low-level API calls to achieve effects not permitted by the language specs, such as defining an initial context item in XSLT that is not a node.

The systemId passed in the constructor to a StreamResult may now be a relative URI, which is interpreted relative to the current directory.

In the NodeOverNodeInfo interface which provides a DOM wrapper to the Saxon tree structure, the isEqualNode() method has been enhanced to bring it closer to the DOM specification, by invoking the saxon:deep-equal() function with appropriate parameters.

I have re-instated the ability to determine the effective boolean value of an external object, that is, an value returned by an extension function that wraps a Java object. The effective boolean value is true if and only if the Java object reference is non-null.