com.icl.saxon.expr
Class NodeSetValue

java.lang.Object
  extended bycom.icl.saxon.expr.Expression
      extended bycom.icl.saxon.expr.Value
          extended bycom.icl.saxon.expr.NodeSetValue
Direct Known Subclasses:
EmptyNodeSet, NodeSetExtent, NodeSetIntent, SingletonNodeSet

public abstract class NodeSetValue
extends Value

A node-set value. We use this both for node-sets and node-lists. The node set will only be sorted into document order when requested (using sort() or evaluate()). This is an abstract class with a number of concrete implementations including NodeSetExtent (for extensional node-sets) and NodeSetIntent (for intensional node-sets).


Field Summary
 
Fields inherited from class com.icl.saxon.expr.Value
ANY, BOOLEAN, NODESET, NUMBER, OBJECT, STRING
 
Fields inherited from class com.icl.saxon.expr.Expression
staticContext
 
Constructor Summary
NodeSetValue()
           
 
Method Summary
abstract  boolean asBoolean()
          Evaluate as a boolean.
 double asNumber()
          Evaluate as a number.
abstract  java.lang.String asString()
          Convert to string value
 boolean compare(int operator, Value other)
          Test how a nodeset compares to another Value under a relational comparison
 int conversionPreference(java.lang.Class required)
          Get conversion preference for this value to a Java class.
 java.lang.Object convertToJava(java.lang.Class target)
          Convert to Java object (for passing to external functions)
 void display(int level)
          Diagnostic print of expression structure
abstract  NodeEnumeration enumerate()
          Return an enumeration of this nodeset value.
 NodeEnumeration enumerate(Context c, boolean sorted)
          Return an enumeration of this nodeset value.
 boolean equals(Value other)
          Test whether a nodeset "equals" another Value
 Value evaluate(Context context)
          Evaluate the Node Set.
 NodeSetValue evaluateAsNodeSet(Context context)
          Evaluate an expression as a NodeSet.
abstract  int getCount()
          Count the nodes in the node-set.
 int getDataType()
          Determine the data type of the expression
abstract  NodeInfo getFirst()
          Get the first node in the nodeset (in document order)
abstract  boolean isSorted()
          Test whether the value is known to be sorted
 boolean notEquals(Value other)
          Test whether a nodeset "not-equals" another Value
abstract  void setSorted(boolean isSorted)
          Set a flag to indicate whether the nodes are sorted.
abstract  NodeSetValue sort()
          Sort the nodes into document order.
 
Methods inherited from class com.icl.saxon.expr.Value
getDependencies, inverse, numericCompare, reduce, simplify, stringToNumber
 
Methods inherited from class com.icl.saxon.expr.Expression
containsReferences, evaluateAsBoolean, evaluateAsNumber, evaluateAsString, getStaticContext, indent, isContextDocumentNodeSet, make, outputStringValue, setStaticContext, usesCurrent
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

NodeSetValue

public NodeSetValue()
Method Detail

getDataType

public int getDataType()
Determine the data type of the expression

Specified by:
getDataType in class Expression
Returns:
Value.NODESET

evaluate

public Value evaluate(Context context)
               throws XPathException
Evaluate the Node Set. This guarantees to return the result in sorted order.

Overrides:
evaluate in class Value
Parameters:
context - The context for evaluation (not used)
Returns:
the value, unchanged
Throws:
XPathException

evaluateAsNodeSet

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

Overrides:
evaluateAsNodeSet in class Expression
Parameters:
context - The context in which the expression is to be evaluated
Returns:
the value of the expression, evaluated in the current context
Throws:
XPathException - when the expression does not return a nodeset.

enumerate

public abstract NodeEnumeration enumerate()
                                   throws XPathException
Return an enumeration of this nodeset value. Unless sort() has been called the nodes can be in any order.

Throws:
XPathException

enumerate

public NodeEnumeration enumerate(Context c,
                                 boolean sorted)
                          throws XPathException
Return an enumeration of this nodeset value. This is to satisfy the interface for Expression.

Overrides:
enumerate in class Expression
Parameters:
sorted - Indicates that the result must be in document order
c - The context in which the expression is to be evaluated
Throws:
XPathException - when the expression does not return a nodeset.

setSorted

public abstract void setSorted(boolean isSorted)
Set a flag to indicate whether the nodes are sorted. Used when the creator of the node-set knows that they are already in document order.

Parameters:
isSorted - true if the caller wishes to assert that the nodes are in document order and do not need to be further sorted

isSorted

public abstract boolean isSorted()
                          throws XPathException
Test whether the value is known to be sorted

Returns:
true if the value is known to be sorted in document order, false if it is not known whether it is sorted.
Throws:
XPathException

asString

public abstract java.lang.String asString()
                                   throws XPathException
Convert to string value

Specified by:
asString in class Value
Returns:
the value of the first node in the node-set if there is one, otherwise an empty string
Throws:
XPathException

asNumber

public double asNumber()
                throws XPathException
Evaluate as a number.

Specified by:
asNumber in class Value
Returns:
the number obtained by evaluating as a String and converting the string to a number
Throws:
XPathException

asBoolean

public abstract boolean asBoolean()
                           throws XPathException
Evaluate as a boolean.

Specified by:
asBoolean in class Value
Returns:
true if the node set is not empty
Throws:
XPathException

getCount

public abstract int getCount()
                      throws XPathException
Count the nodes in the node-set. Note this will sort the node set if necessary, to make sure there are no duplicates.

Throws:
XPathException

sort

public abstract NodeSetValue sort()
                           throws XPathException
Sort the nodes into document order. This does nothing if the nodes are already known to be sorted; to force a sort, call setSorted(false)

Returns:
the same NodeSetValue, after sorting. (The reason for returning this is that it makes life easier for the XSL compiler).
Throws:
XPathException

getFirst

public abstract NodeInfo getFirst()
                           throws XPathException
Get the first node in the nodeset (in document order)

Returns:
the first node
Throws:
XPathException

equals

public boolean equals(Value other)
               throws XPathException
Test whether a nodeset "equals" another Value

Overrides:
equals in class Value
Returns:
a boolean giving the value of the expression, evaluated in the current context
Throws:
XPathException

notEquals

public boolean notEquals(Value other)
                  throws XPathException
Test whether a nodeset "not-equals" another Value

Overrides:
notEquals in class Value
Returns:
a boolean giving the value of the expression, evaluated in the current context
Throws:
XPathException

compare

public boolean compare(int operator,
                       Value other)
                throws XPathException
Test how a nodeset compares to another Value under a relational comparison

Overrides:
compare in class Value
Parameters:
operator - The comparison operator, one of Tokenizer.LE, Tokenizer.LT, Tokenizer.GE, Tokenizer.GT,
Throws:
XPathException

display

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

Specified by:
display in class Expression

conversionPreference

public int conversionPreference(java.lang.Class required)
Get conversion preference for this value to a Java class. A low result indicates higher preference.

Specified by:
conversionPreference in class Value

convertToJava

public java.lang.Object convertToJava(java.lang.Class target)
                               throws XPathException
Convert to Java object (for passing to external functions)

Specified by:
convertToJava in class Value
Parameters:
target - The class required by the external function
Returns:
an object of the target class
Throws:
XPathException