net.sf.saxon.instruct

Class ParentNodeConstructor

public abstract class ParentNodeConstructor extends Instruction implements DivisibleInstruction

An abstract class to act as a common parent for instructions that create element nodes and document nodes.
Field Summary
protected Expressioncontent
intvalidation
Constructor Summary
ParentNodeConstructor()
Create a document or element node constructor instruction
Method Summary
PathMap.PathMapNodeSetaddToPathMap(PathMap pathMap, PathMap.PathMapNodeSet pathMapNodeSet)
Add a representation of this expression to a PathMap.
protected abstract voidcheckContentSequence(StaticContext env)
Check that the child instructions don't violate any obvious constraints for this kind of node
intcomputeCardinality()
Get the cardinality of the sequence returned by evaluating this instruction
booleancreatesNewNodes()
Determine whether this instruction creates new nodes.
StringgetBaseURI()
Get the static base URI of the instruction
intgetCardinality()
ExpressiongetContentExpression()
Get the expression that constructs the content of the element
SchemaTypegetSchemaType()
Get the schema type chosen for validation; null if not defined
intgetValidationMode()
Get the validation mode for this instruction
booleanisLazyConstruction()
Establish whether lazy construction is to be used
booleanisNamespaceSensitive()
Determine whether the schema type is namespace sensitive.
Iterator<Expression>iterateSubExpressions()
Get the immediate sub-expressions of this expression.
Expressionoptimize(ExpressionVisitor visitor, ItemType contextItemType)
protected voidpromoteInst(PromotionOffer offer)
Handle promotion offers, that is, non-local tree rewrites.
booleanreplaceSubExpression(Expression original, Expression replacement)
Replace one subexpression by a replacement subexpression
voidsetBaseURI(String uri)
Set the static base URI of the instruction
voidsetContentExpression(Expression content)
Set the expression that constructs the content of the element
voidsetLazyConstruction(boolean lazy)
Indicate that lazy construction should (or should not) be used.
voidsetSchemaType(SchemaType type)
Set the schema type to be used for validation
voidsetValidationMode(int mode)
Set the validation mode for the new document or element node
Expressionsimplify(ExpressionVisitor visitor)
Simplify an expression.
ExpressiontypeCheck(ExpressionVisitor visitor, ItemType contextItemType)
voidverifyLazyConstruction()
Check that lazy construction is possible for this element

Field Detail

content

protected Expression content

validation

int validation

Constructor Detail

ParentNodeConstructor

public ParentNodeConstructor()
Create a document or element node constructor instruction

Method Detail

addToPathMap

public PathMap.PathMapNodeSet addToPathMap(PathMap pathMap, PathMap.PathMapNodeSet pathMapNodeSet)
Add a representation of this expression to a PathMap. The PathMap captures a map of the nodes visited by an expression in a source tree.

The default implementation of this method assumes that an expression does no navigation other than the navigation done by evaluating its subexpressions, and that the subexpressions are evaluated in the same context as the containing expression. The method must be overridden for any expression where these assumptions do not hold. For example, implementations exist for AxisExpression, ParentExpression, and RootExpression (because they perform navigation), and for the doc(), document(), and collection() functions because they create a new navigation root. Implementations also exist for PathExpression and FilterExpression because they have subexpressions that are evaluated in a different context from the calling expression.

Parameters: pathMap the PathMap to which the expression should be added pathMapNodeSet the PathMapNodeSet to which the paths embodied in this expression should be added

Returns: the pathMapNodeSet representing the points in the source document that are both reachable by this expression, and that represent possible results of this expression. For an expression that does navigation, it represents the end of the arc in the path map that describes the navigation route. For other expressions, it is the same as the input pathMapNode.

checkContentSequence

protected abstract void checkContentSequence(StaticContext env)
Check that the child instructions don't violate any obvious constraints for this kind of node

Parameters: env the static context

Throws: XPathException

computeCardinality

public int computeCardinality()
Get the cardinality of the sequence returned by evaluating this instruction

Returns: the static cardinality

createsNewNodes

public final boolean createsNewNodes()
Determine whether this instruction creates new nodes. This implementation returns true.

getBaseURI

public String getBaseURI()
Get the static base URI of the instruction

Returns: the static base URI

getCardinality

public int getCardinality()

getContentExpression

public Expression getContentExpression()
Get the expression that constructs the content of the element

Returns: the content expression

getSchemaType

public SchemaType getSchemaType()
Get the schema type chosen for validation; null if not defined

Returns: the type to be used for validation. (For a document constructor, this is the required type of the document element)

getValidationMode

public int getValidationMode()
Get the validation mode for this instruction

Returns: the validation mode, for example STRICT or PRESERVE

isLazyConstruction

public final boolean isLazyConstruction()
Establish whether lazy construction is to be used

Returns: true if lazy construction is to be used

isNamespaceSensitive

public boolean isNamespaceSensitive()
Determine whether the schema type is namespace sensitive. The result is undefined if schemaType is null.

Returns: true if the schema type is namespace sensitive

iterateSubExpressions

public Iterator<Expression> iterateSubExpressions()
Get the immediate sub-expressions of this expression.

Returns: an iterator containing the sub-expressions of this expression

optimize

public Expression optimize(ExpressionVisitor visitor, ItemType contextItemType)

promoteInst

protected void promoteInst(PromotionOffer offer)
Handle promotion offers, that is, non-local tree rewrites.

Parameters: offer The type of rewrite being offered

Throws: net.sf.saxon.trans.XPathException

replaceSubExpression

public boolean replaceSubExpression(Expression original, Expression replacement)
Replace one subexpression by a replacement subexpression

Parameters: original the original subexpression replacement the replacement subexpression

Returns: true if the original subexpression is found

setBaseURI

public void setBaseURI(String uri)
Set the static base URI of the instruction

Parameters: uri the static base URI

setContentExpression

public void setContentExpression(Expression content)
Set the expression that constructs the content of the element

Parameters: content the content expression

setLazyConstruction

public void setLazyConstruction(boolean lazy)
Indicate that lazy construction should (or should not) be used. Note that this request will be ignored if validation is required

Parameters: lazy set to true if lazy construction should be used

setSchemaType

public void setSchemaType(SchemaType type)
Set the schema type to be used for validation

Parameters: type the type to be used for validation. (For a document constructor, this is the required type of the document element)

setValidationMode

public void setValidationMode(int mode)
Set the validation mode for the new document or element node

Parameters: mode the validation mode, for example STRICT

simplify

public Expression simplify(ExpressionVisitor visitor)
Simplify an expression. This performs any static optimization (by rewriting the expression as a different expression). The default implementation does nothing.

Parameters: visitor an expression visitor

Returns: the simplified expression

Throws: net.sf.saxon.trans.XPathException if an error is discovered during expression rewriting

typeCheck

public Expression typeCheck(ExpressionVisitor visitor, ItemType contextItemType)

verifyLazyConstruction

void verifyLazyConstruction()
Check that lazy construction is possible for this element