Package net.sf.saxon.expr.instruct
Class ElementCreator
- java.lang.Object
-
- net.sf.saxon.expr.Expression
-
- net.sf.saxon.expr.instruct.Instruction
-
- net.sf.saxon.expr.instruct.ParentNodeConstructor
-
- net.sf.saxon.expr.instruct.ElementCreator
-
- All Implemented Interfaces:
ExportAgent
,InstructionWithComplexContent
,TailCallReturner
,ValidatingInstruction
,Locatable
,IdentityComparable
,Traceable
- Direct Known Subclasses:
ComputedElement
,Copy
,FixedElement
public abstract class ElementCreator extends ParentNodeConstructor
An instruction that creates an element node. There are two subtypes, FixedElement for use where the name is known statically, and Element where it is computed dynamically. To allow use in both XSLT and XQuery, the class acts both as an Instruction and as an Expression.
-
-
Field Summary
-
Fields inherited from class net.sf.saxon.expr.instruct.ParentNodeConstructor
contentOp, preservingTypes
-
Fields inherited from class net.sf.saxon.expr.Expression
EFFECTIVE_BOOLEAN_VALUE, EVALUATE_METHOD, ITEM_FEED_METHOD, ITERATE_METHOD, MAX_COST, MAX_SEQUENCE_LENGTH, MAX_STRING_LENGTH, PROCESS_METHOD, staticProperties, UNBOUNDED_LOWER, UNBOUNDED_UPPER, UPDATE_METHOD, WATCH_METHOD
-
-
Constructor Summary
Constructors Constructor Description ElementCreator()
Construct an ElementCreator.
-
Method Summary
All Methods Instance Methods Abstract Methods Concrete Methods Modifier and Type Method Description protected void
checkContentSequence(StaticContext env)
Check statically whether the content of the element creates attributes or namespaces after creating any child nodesint
computeSpecialProperties()
Get the static properties of this expression (other than its type).int
getCardinality()
Determine the static cardinality of the expression.abstract NodeName
getElementName(XPathContext context, NodeInfo copiedNode)
Determine (at run-time) the name code of the element being constructedint
getImplementationMethod()
An implementation of Expression must provide at least one of the methods evaluateItem(), iterate(), or process().ItemType
getItemType()
Get the item type of the value returned by this instructionabstract java.lang.String
getNewBaseURI(XPathContext context, NodeInfo copiedNode)
Get the base URI for the element being constructedjava.lang.String
getStreamerName()
Get the (partial) name of a class that supports streaming of this kind of expressionboolean
isBequeathNamespacesToChildren()
Ask whether the inherit namespaces flag is setboolean
isInheritNamespacesFromParent()
Ask whether this element inherits namespaces from its parent.abstract void
outputNamespaceNodes(Outputter receiver, NodeName nodeName, NodeInfo copiedNode)
Callback to output namespace bindings for the new element.TailCall
processLeavingTail(Outputter output, XPathContext context)
Evaluate the instruction to produce a new element node.TailCall
processLeavingTail(Outputter out, XPathContext context, NodeInfo copiedNode)
Evaluate the instruction to produce a new element node.void
setBequeathNamespacesToChildren(boolean inherit)
Say whether this element causes its children to inherit namespacesvoid
setInheritanceFlags(java.lang.String flags)
void
setInheritNamespacesFromParent(boolean inherit)
Say whether this element causes inherits namespaces from its parent.void
suppressValidation(int parentValidationMode)
Suppress validation on contained element constructors, on the grounds that the parent element is already performing validation.-
Methods inherited from class net.sf.saxon.expr.instruct.ParentNodeConstructor
addToPathMap, allowExtractingCommonSubexpressions, alwaysCreatesNewNodes, computeCardinality, getContentExpression, getContentOperand, getSchemaType, getValidationAction, getValidationOptions, isLocal, isPreservingTypes, mayCreateNewNodes, optimize, setContentExpression, setNoNeedToStrip, setValidationAction, typeCheck
-
Methods inherited from class net.sf.saxon.expr.instruct.Instruction
assembleParams, assembleTunnelParams, dynamicError, evaluateAsString, evaluateItem, getExpressionName, getInstructionNameCode, getNetCost, getSourceLocator, isInstruction, isXSLT, iterate, operands, process, someOperandCreatesNewNodes
-
Methods inherited from class net.sf.saxon.expr.Expression
adoptChildExpression, checkedOperands, checkForUpdatingSubexpressions, checkPermittedContents, computeDependencies, computeHashCode, computeStaticProperties, copy, dynamicError, effectiveBooleanValue, equals, evaluatePendingUpdates, explain, export, getConfiguration, getCost, getDependencies, getEvaluationMethod, getExtraProperty, getIntegerBounds, getInterpretedExpression, getIntrinsicDependencies, getLocalRetainedStaticContext, getLocation, getObjectName, getPackageData, getParentExpression, getProperties, getProperty, getRetainedStaticContext, getScopingExpression, getSlotsUsed, getSpecialProperties, getStaticBaseURI, getStaticBaseURIString, getStaticType, getStaticUType, getTracingTag, hasCompatibleStaticContext, hashCode, hasSpecialProperty, hasVariableBinding, identityHashCode, implementsStaticTypeCheck, isCallOn, isEqual, isIdentical, isLiftable, isMultiThreaded, isStaticPropertiesKnown, isSubtreeExpression, isUpdatingExpression, isVacuousExpression, markTailFunctionCalls, operandList, operandSparseList, optimizeChildren, prepareForStreaming, resetLocalStaticProperties, restoreParentPointers, setEvaluationMethod, setExtraProperty, setFiltered, setFlattened, setLocation, setParentExpression, setRetainedStaticContext, setRetainedStaticContextLocally, setRetainedStaticContextThoroughly, setStaticProperty, simplify, simplifyChildren, staticTypeCheck, toPattern, toShortString, toString, typeCheckChildren, typeError, unordered, verifyParentPointers
-
Methods inherited from class java.lang.Object
clone, finalize, getClass, notify, notifyAll, wait, wait, wait
-
Methods inherited from interface net.sf.saxon.trace.Traceable
gatherProperties
-
-
-
-
Method Detail
-
getItemType
public ItemType getItemType()
Get the item type of the value returned by this instruction- Overrides:
getItemType
in classInstruction
- Returns:
- the item type
-
getCardinality
public int getCardinality()
Description copied from class:Expression
Determine the static cardinality of the expression. This establishes how many items there will be in the result of the expression, at compile time (i.e., without actually evaluating the result.- Overrides:
getCardinality
in classParentNodeConstructor
- Returns:
- one of the values Cardinality.ONE_OR_MORE, Cardinality.ZERO_OR_MORE, Cardinality.EXACTLY_ONE, Cardinality.ZERO_OR_ONE, Cardinality.EMPTY. This default implementation returns ZERO_OR_MORE (which effectively gives no information).
-
setBequeathNamespacesToChildren
public void setBequeathNamespacesToChildren(boolean inherit)
Say whether this element causes its children to inherit namespaces- Parameters:
inherit
- true if namespaces are to be inherited by the children
-
isBequeathNamespacesToChildren
public boolean isBequeathNamespacesToChildren()
Ask whether the inherit namespaces flag is set- Returns:
- true if namespaces constructed on this parent element are to be inherited by its children
-
setInheritNamespacesFromParent
public void setInheritNamespacesFromParent(boolean inherit)
Say whether this element causes inherits namespaces from its parent. True except in XQuery where one direct element constructor forms the immediate content of another (see W3C bug 22334)- Parameters:
inherit
- true if namespaces are to be inherited from the parent
-
isInheritNamespacesFromParent
public boolean isInheritNamespacesFromParent()
Ask whether this element inherits namespaces from its parent. True except in XQuery where one direct element constructor forms the immediate content of another (see W3C bug 22334)- Returns:
- true if this child element inherits namespaces from its parent element
-
computeSpecialProperties
public int computeSpecialProperties()
Get the static properties of this expression (other than its type). The result is bit-signficant. These properties are used for optimizations. In general, if property bit is set, it is true, but if it is unset, the value is unknown.- Overrides:
computeSpecialProperties
in classInstruction
- Returns:
- a set of flags indicating static properties of this expression
-
suppressValidation
public void suppressValidation(int parentValidationMode)
Suppress validation on contained element constructors, on the grounds that the parent element is already performing validation. The default implementation does nothing.- Overrides:
suppressValidation
in classExpression
- Parameters:
parentValidationMode
- the kind of validation being performed on the parent expression
-
checkContentSequence
protected void checkContentSequence(StaticContext env) throws XPathException
Check statically whether the content of the element creates attributes or namespaces after creating any child nodes- Specified by:
checkContentSequence
in classParentNodeConstructor
- Parameters:
env
- the static context- Throws:
XPathException
- if the content is found to be incorrect
-
getElementName
public abstract NodeName getElementName(XPathContext context, NodeInfo copiedNode) throws XPathException
Determine (at run-time) the name code of the element being constructed- Parameters:
context
- the XPath dynamic evaluation contextcopiedNode
- for the benefit of xsl:copy, the node being copied; otherwise null- Returns:
- the integer name code representing the element name
- Throws:
XPathException
- if a failure occurs
-
getNewBaseURI
public abstract java.lang.String getNewBaseURI(XPathContext context, NodeInfo copiedNode)
Get the base URI for the element being constructed- Parameters:
context
- the XPath dynamic evaluation contextcopiedNode
- the node being copied (for xsl:copy), otherwise null- Returns:
- the base URI of the constructed element
-
outputNamespaceNodes
public abstract void outputNamespaceNodes(Outputter receiver, NodeName nodeName, NodeInfo copiedNode) throws XPathException
Callback to output namespace bindings for the new element. This method is responsible for ensuring that a namespace binding is always generated for the namespace of the element name itself.- Parameters:
receiver
- the Outputter where the namespace bindings are to be writtennodeName
- the name of the element being createdcopiedNode
- the node being copied (for xsl:copy) or null otherwise- Throws:
XPathException
- if a dynamic error occurs
-
getImplementationMethod
public int getImplementationMethod()
An implementation of Expression must provide at least one of the methods evaluateItem(), iterate(), or process(). This method indicates which of these methods is prefered. For instructions this is the process() method.- Overrides:
getImplementationMethod
in classInstruction
- Returns:
- the implementation method, for example
Expression.ITERATE_METHOD
orExpression.EVALUATE_METHOD
orExpression.PROCESS_METHOD
-
processLeavingTail
public TailCall processLeavingTail(Outputter output, XPathContext context) throws XPathException
Evaluate the instruction to produce a new element node. This method is typically used when there is a parent element or document in a result tree, to which the new element is added.- Specified by:
processLeavingTail
in interfaceTailCallReturner
- Specified by:
processLeavingTail
in classInstruction
- Parameters:
output
- the destination for the resultcontext
- XPath dynamic evaluation context- Returns:
- null (this instruction never returns a tail call)
- Throws:
XPathException
- if a dynamic error occurs
-
processLeavingTail
public final TailCall processLeavingTail(Outputter out, XPathContext context, NodeInfo copiedNode) throws XPathException
Evaluate the instruction to produce a new element node. This method is typically used when there is a parent element or document in a result tree, to which the new element is added.- Parameters:
out
- The destination for the resultcontext
- XPath dynamic evaluation contextcopiedNode
- null except in the case of xsl:copy, when it is the node being copied; otherwise null- Returns:
- null (this instruction never returns a tail call)
- Throws:
XPathException
- if a dynamic error occurs
-
setInheritanceFlags
public void setInheritanceFlags(java.lang.String flags)
-
getStreamerName
public java.lang.String getStreamerName()
Get the (partial) name of a class that supports streaming of this kind of expression- Overrides:
getStreamerName
in classExpression
- Returns:
- the partial name of a class that can be instantiated to provide streaming support in Saxon-EE, or null if there is no such class
-
-