Class ElementCreator

All Implemented Interfaces:
ExportAgent, InstructionWithComplexContent, TailCallReturner, ValidatingInstruction, Locatable, IdentityComparable
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 Details

    • inheritNamespacesToChildren

      protected boolean inheritNamespacesToChildren
      The inheritNamespacesToChildren flag indicates that the namespace nodes on the element created by this instruction are to be inherited (copied) on the children of this element. That is, if this flag is false, the child elements must carry a namespace undeclaration for all the namespaces on the parent, unless they are redeclared in some way.
    • inheritNamespacesFromParent

      protected boolean inheritNamespacesFromParent
      The inheritNamespacesFromParent flag indicates that this element should inherit the namespaces of its parent element in the result tree. That is, if this flag is false, this element must carry a namespace undeclaration for all the namespaces on its parent, unless they are redeclared in some way.
  • Constructor Details

    • ElementCreator

      public ElementCreator()
      Construct an ElementCreator. Exists for the benefit of subclasses.
  • Method Details

    • getItemType

      public ItemType getItemType()
      Get the item type of the value returned by this instruction
      Overrides:
      getItemType in class Instruction
      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 class ParentNodeConstructor
      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).
    • setInheritNamespacesToChildren

      public void setInheritNamespacesToChildren(boolean inherit)
      Say whether this element causes its children to inherit namespaces
      Parameters:
      inherit - true if namespaces are to be inherited by the children
    • isInheritNamespacesToChildren

      public boolean isInheritNamespacesToChildren()
      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 class Instruction
      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 class Expression
      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 class ParentNodeConstructor
      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 context
      copiedNode - 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 String getNewBaseURI(XPathContext context, NodeInfo copiedNode)
      Get the base URI for the element being constructed
      Parameters:
      context - the XPath dynamic evaluation context
      copiedNode - the node being copied (for xsl:copy), otherwise null
      Returns:
      the base URI of the constructed element
    • outputNamespaceNodes

      public abstract void outputNamespaceNodes(XPathContext context, Receiver receiver, NodeName nameCode, NodeInfo copiedNode) throws XPathException
      Callback to output namespace nodes for the new element. This method is responsible for ensuring that a namespace node is always generated for the namespace of the element name itself.
      Parameters:
      context - The execution context
      receiver - the Receiver where the namespace nodes are to be written
      nameCode - the name code of the element being created
      copiedNode - the node being copied (for xsl:copy) or null otherwise
      Throws:
      XPathException - if a dynamic error occurs
    • getActiveNamespaces

      public NamespaceBinding[] getActiveNamespaces() throws XPathException
      Callback to get a list of the intrinsic namespaces that need to be generated for the element.
      Returns:
      the set of namespace bindings.
      Throws:
      XPathException - if an 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 class Instruction
      Returns:
      the implementation method, for example Expression.ITERATE_METHOD or Expression.EVALUATE_METHOD or Expression.PROCESS_METHOD
    • processLeavingTail

      public TailCall processLeavingTail(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 interface TailCallReturner
      Specified by:
      processLeavingTail in class Instruction
      Parameters:
      context - 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(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:
      context - XPath dynamic evaluation context
      copiedNode - 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
    • evaluateItem

      public Item evaluateItem(XPathContext context) throws XPathException
      Evaluate the constructor, returning the constructed element node. If lazy construction mode is in effect, then an UnconstructedParent object is returned instead.
      Overrides:
      evaluateItem in class Instruction
      Parameters:
      context - The context in which the expression is to be evaluated
      Returns:
      the node or atomic value that results from evaluating the expression; or null to indicate that the result is an empty sequence
      Throws:
      XPathException - if any dynamic error occurs evaluating the expression
    • exportValidationAndType

      protected void exportValidationAndType(ExpressionPresenter out)
    • getInheritanceFlags

      protected String getInheritanceFlags()
    • setInheritanceFlags

      public void setInheritanceFlags(String flags)
    • getStreamerName

      public String getStreamerName()
      Get the (partial) name of a class that supports streaming of this kind of expression
      Overrides:
      getStreamerName in class Expression
      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