net.sf.saxon.value.package.html Maven / Gradle / Ivy
Show all versions of saxon-he Show documentation
Package overview for net.sf.saxon.value
This package provides classes representing XPath values (that is, the results of
an expression). There are different classes for different types of value.
The principal class is:
Value:
This represents the result of evaluating an expression. But a Value is also an expression in its
own right, reflecting the fact that literal values can be used syntactically wherever expressions
can be used. AtomicValue
is a subclass of Value
that represents an atomic value: this in turn has subclasses for the different built-in data types:
StringValue, NumericValue, BooleanValue, DateValue, and so on.
There are two classes used to represent integer values: IntegerValue
for integers that
fit comfortably in 64 bits, and BigIntegerValue
for anything longer. Built-in subtypes
of xs:integer, such as xs:int
and xs:short
, are always represented using
an IntegerValue
, except for xs:unsignedLong
, which uses a BigIntegerValue
.
In general a value is a sequence. A sequence that is instantiated in memory is represented by a
SequenceExtent
object. The code tries to pipeline execution so that a SequenceExtent
is created as rarely as possible.
When an expression is evaluated lazily, the result is a Closure
. A Closure contains the original
expression, and a copy of the run-time context at the time evaluation was requested: that is, all the local variables
and other information that it depends on, such as the context item. There are two kinds of Closure, and the system
decides at compile time which to use. An ordinary Closure re-evaluates the expression every time the value is referenced;
this is used only when the compiler decides that the value is likely to be referenced only once. A MemoClosure remembers
the value the first time it is needed, so that subsequent references do not cause repeated evaluation of the
expression.
Michael H. Kay
Saxonica Limited
9 February 2005