System Programming Interfaces
A process has started of identifying all the Java classes and methods that are considered to form Saxon's public API. These classes and methods are identified with the tag "since 8.4" in the JavaDoc. Every effort will be made in the future to avoid gratuitous changes to these interfaces in future releases. However, there is no absolute guarantee of backwards compatibility, given that the W3C language specifications are still subject to change.
The SequenceIterator
specification has been tightened-up to define the results returned
by the current()
and position()
methods before the first item has been read,
and after the next()
method has returned null to indicate the end of the sequence. In addition,
it is now specified that further calls on next()
should continue to return null: previously this happened for
some iterators, while others threw an exception. Existing implementations of SequenceIterator
have been changed to conform to these tighter rules. There were a number of places in the Saxon code
that relied on the current()
function when applied to a SingletonIterator
returning
the same result irrespective of the state of the iterator. This is no longer the case: before next()
is called for the first time, and after next()
is called for the second time, the current()
method on a SingletonIterator
now returns null.
In the XQuery API, the QueryProcessor
class, which has been deprecated since Saxon 8.1,
is now withdrawn. All its methods are available on the StaticQueryContext
class.
A user-defined StaticQueryContext
is no longer modified by Saxon when a query is compiled.
Instead, Saxon makes a copy for its internal use. This means that the same StaticQueryContext
object may now be used to define multiple queries, in series or in parallel threads. A consequence of this
change is that it is no longer possible to obtain information about the query, for example the names of the
functions that it declares, from the original StaticQueryContext
. However, the modified
copy of the StaticQueryContext
is available via a method on the XQueryExpression
object.
The API for defining extension instructions in XSLT has changed slightly: various methods are now defined
to throw an XPathException
rather than a TransformerConfigurationException
.
This change was made to enable error codes to be associated with all error conditions: error codes can be
held in an XPathException
, but not in a TransformerConfigurationException
.