com.icl.saxon.expr

Class Expression

public abstract class Expression extends Object

This class serves two purposes: it is an abstract superclass for different kinds of XPath expression, and it contains a static method to invoke the expression parser
Field Summary
protected StaticContextstaticContext
Method Summary
booleancontainsReferences()
Determine whether the expression contains any references to variables
abstract voiddisplay(int level)
Diagnostic print of expression structure
NodeEnumerationenumerate(Context context, boolean sorted)
Return an enumeration of nodes in a nodeset.
abstract Valueevaluate(Context context)
Evaluate an expression.
booleanevaluateAsBoolean(Context context)
Evaluate an expression as a Boolean.
The result of x.evaluateAsBoolean(c) must be equivalent to x.evaluate(c).asBoolean(); but optimisations are possible when it is known that a boolean result is required, especially in the case of a NodeSet.
NodeSetValueevaluateAsNodeSet(Context context)
Evaluate an expression as a NodeSet.
doubleevaluateAsNumber(Context context)
Evaluate an expression as a Number.
The result of x.evaluateAsNumber(c) must be equivalent to x.evaluate(c).asNumber(); but optimisations are possible when it is known that a numeric result is required, especially in the case of a NodeSet.
StringevaluateAsString(Context context)
Evaluate an expression as a String.
The result of x.evaluateAsString(c) must be equivalent to x.evaluate(c).asString(); but optimisations are possible when it is known that a string result is required, especially in the case of a NodeSet.
abstract intgetDataType()
Determine the data type of the expression, if possible
abstract intgetDependencies()
Determine which aspects of the context the expression depends on.
StaticContextgetStaticContext()
Determine the static context used when the expression was parsed
protected static Stringindent(int level)
Construct indent string, for diagnostic output
booleanisContextDocumentNodeSet()
Determine, in the case of an expression whose data type is Value.NODESET, whether all the nodes in the node-set are guaranteed to come from the same document as the context node.
static Expressionmake(String expression, StaticContext env)
Parse an expression
voidoutputStringValue(Outputter out, Context context)
Evaluate an expression as a String and write the result to the specified outputter.
abstract Expressionreduce(int dependencies, Context context)
Perform a partial evaluation of the expression, by eliminating specified dependencies on the context.
voidsetStaticContext(StaticContext sc)
Set the static context used when the expression was parsed
Expressionsimplify()
Simplify an expression.
booleanusesCurrent()
Determine whether the expression uses the current() function.

Field Detail

staticContext

protected StaticContext staticContext

Method Detail

containsReferences

public boolean containsReferences()
Determine whether the expression contains any references to variables

Returns: true if so

display

public abstract void display(int level)
Diagnostic print of expression structure

enumerate

public NodeEnumeration enumerate(Context context, boolean sorted)
Return an enumeration of nodes in a nodeset.

Parameters: context The context in which the expression is to be evaluated sorted Indicates whether the nodes are required in document order. If this is false, they may come in any order, but there will be no duplicates.

Throws: XPathException when the expression does not return a nodeset.

evaluate

public abstract Value evaluate(Context context)
Evaluate an expression.

Parameters: context The context in which the expression is to be evaluated

Returns: the value of the expression, evaluated in the current context

evaluateAsBoolean

public boolean evaluateAsBoolean(Context context)
Evaluate an expression as a Boolean.
The result of x.evaluateAsBoolean(c) must be equivalent to x.evaluate(c).asBoolean(); but optimisations are possible when it is known that a boolean result is required, especially in the case of a NodeSet.

Parameters: context The context in which the expression is to be evaluated

Returns: the value of the expression, evaluated in the current context

evaluateAsNodeSet

public NodeSetValue evaluateAsNodeSet(Context context)
Evaluate an expression as a NodeSet.

Parameters: context The context in which the expression is to be evaluated

Returns: the value of the expression, evaluated in the current context. Note that the result is not necessarily in document order; to get it into document order, call sort() on the result.

Throws: XPathException when the expression does not return a nodeset.

evaluateAsNumber

public double evaluateAsNumber(Context context)
Evaluate an expression as a Number.
The result of x.evaluateAsNumber(c) must be equivalent to x.evaluate(c).asNumber(); but optimisations are possible when it is known that a numeric result is required, especially in the case of a NodeSet.

Parameters: context The context in which the expression is to be evaluated

Returns: the value of the expression, evaluated in the current context

evaluateAsString

public String evaluateAsString(Context context)
Evaluate an expression as a String.
The result of x.evaluateAsString(c) must be equivalent to x.evaluate(c).asString(); but optimisations are possible when it is known that a string result is required, especially in the case of a NodeSet.

Parameters: context The context in which the expression is to be evaluated

Returns: the value of the expression, evaluated in the current context

getDataType

public abstract int getDataType()
Determine the data type of the expression, if possible

Returns: one of the values Value.STRING, Value.BOOLEAN, Value.NUMBER, Value.NODESET, Value.FRAGMENT, or Value.ANY (meaning not known in advance)

getDependencies

public abstract int getDependencies()
Determine which aspects of the context the expression depends on. The result is a bitwise-or'ed value composed from constants such as Context.VARIABLES and Context.CURRENT_NODE

getStaticContext

public final StaticContext getStaticContext()
Determine the static context used when the expression was parsed

indent

protected static String indent(int level)
Construct indent string, for diagnostic output

isContextDocumentNodeSet

public boolean isContextDocumentNodeSet()
Determine, in the case of an expression whose data type is Value.NODESET, whether all the nodes in the node-set are guaranteed to come from the same document as the context node. Used for optimization.

make

public static Expression make(String expression, StaticContext env)
Parse an expression

Parameters: expression The expression (as a character string) env An object giving information about the compile-time context of the expression

Returns: an object of type Expression

outputStringValue

public void outputStringValue(Outputter out, Context context)
Evaluate an expression as a String and write the result to the specified outputter.

Parameters: out The required outputter context The context in which the expression is to be evaluated

reduce

public abstract Expression reduce(int dependencies, Context context)
Perform a partial evaluation of the expression, by eliminating specified dependencies on the context.

Parameters: dependencies The dependencies to be removed, e.g. Context.VARIABLES context The context to be used for the partial evaluation

Returns: a new expression (or Value) that does not have any of the specified dependencies

setStaticContext

public final void setStaticContext(StaticContext sc)
Set the static context used when the expression was parsed

simplify

public Expression simplify()
Simplify an expression. Default implementation does nothing.

Returns: the simplified expression

usesCurrent

public boolean usesCurrent()
Determine whether the expression uses the current() function. This is an error if the expression is within a pattern