SequenceValue has disappeared; all its functionality has been moved
up into the
Value class. This reflects the reality that every value in the XPath data
model is a sequence. (If there is a special case, it is the singleton value, not the sequence. However,
I decided not to add a
SingletonValue class, since we already have
AtomicValue which do the job between them.)
This may cause some side-effects on the detailed rules for binding of Java extension functions. In the
past some distinctions were made depending on whether the supplied value of an argument was or was not
A new class
ValueRepresentation has been introduced. This represents the union of
NodeInfo. In many places where previously a
was expected, the software can now handle a
NodeInfo as well: notably when setting or getting
the value of a variable. The greatly reduces the need to wrap a
NodeInfo within a
SingletonNode whenever there is a need to use it as a value.
When an expression is evaluated lazily, the Closure that contains all the information needed to
evaluate it no longer contains copies of local variables if the expression does not use any local variables
(which is true most of the time). As well as avoiding the small cost of doing the copying, this has the
more significant benefit that it avoids creating unnecessary long-lasting references to the objects representing
the variables, which means they can be garbage-collected sooner.
PipelineConfiguration object now includes, where appropriate, a reference to the
Controller. This makes much more context information available to a user-written serializer.
The code for creating a
CharacterMapExpander has been moved into a new method in the
Controller, allowing user-written serializers to expand character maps if they wish to do so.
convert method (or set of methods) on
AtomicValue has been
changed. Conversion to a built-in type is now handled using the
These and similar methods (such as
validateContent) now return an
rather than throwing an exception when the conversion fails: this is designed to improve performance on paths
where failures are normal, such as when validating a union type. There is also an option to perform the conversion
without validation, which is especially useful when obtaining the typed value of a node that is known to be valid
(Saxon does not store the typed value, but computes it from the string value each time it is needed.)
The implementation of several of the XPath axes against a XOM object model has been rewritten
(for improved performance) by Wolfgang Hoschek.