Class TemplateRule

java.lang.Object
net.sf.saxon.expr.instruct.TemplateRule
All Implemented Interfaces:
SourceLocator, ExpressionOwner, Locatable, Location, Traceable, TraceableComponent, RuleTarget, Locator
Direct Known Subclasses:
TemplateRuleEE

public class TemplateRule extends Object implements RuleTarget, Location, ExpressionOwner, TraceableComponent
The runtime object corresponding to an xsl:template element in the stylesheet.

Note that the Template object no longer has precedence information associated with it; this is now only in the Rule object that references this Template. This allows two rules to share the same template, with different precedences. This occurs when a stylesheet module is imported more than once, from different places, with different import precedences.

From Saxon 9.7, the old Template class is split into NamedTemplate and TemplateRule.

From Saxon 9.8, a subclass is used in Saxon-EE

  • Field Details Link icon

  • Constructor Details Link icon

    • TemplateRule Link icon

      public TemplateRule()
      Create a template
  • Method Details Link icon

    • setMatchPattern Link icon

      public void setMatchPattern(Pattern pattern)
      Set the match pattern used with this template
      Parameters:
      pattern - the match pattern (may be null for a named template)
    • setMode Link icon

      public void setMode(Mode m)
      Set the mode used by this template rule
      Parameters:
      m - the mode
    • getMode Link icon

      public Mode getMode()
      Get the mode used by this template rule
      Returns:
      the mode
    • getBody Link icon

      public Expression getBody()
      Description copied from interface: TraceableComponent
      Get the expression at the root of the expression tree used to evaluate this construct
      Specified by:
      getBody in interface TraceableComponent
      Returns:
      the root expression
    • getChildExpression Link icon

      public Expression getChildExpression()
      Specified by:
      getChildExpression in interface ExpressionOwner
    • getLocation Link icon

      public Location getLocation()
      Description copied from interface: Locatable
      Get the location of the construct
      Specified by:
      getLocation in interface Locatable
      Returns:
      the location. If no location information is available, the method should return Loc.NONE rather than returning null. However, callers would be well advised to check for the result being null.
    • gatherProperties Link icon

      public void gatherProperties(BiConsumer<String,Object> consumer)
      Get the properties of this object to be included in trace messages, by supplying the property values to a supplied consumer function
      Specified by:
      gatherProperties in interface Traceable
      Parameters:
      consumer - the function to which the properties should be supplied, as (property name, value) pairs.
    • setContextItemRequirements Link icon

      public void setContextItemRequirements(ItemType type, boolean absentFocus)
      Set the required context item type. Used when there is an xsl:context-item child element
      Parameters:
      type - the required context item type
      absentFocus - true if the context item is treated as absent even if supplied (use="absent")
    • getComponentKind Link icon

      public int getComponentKind()
    • getMatchPattern Link icon

      public Pattern getMatchPattern()
      Get the match pattern used with this template
      Returns:
      the match pattern, or null if this is a named template with no match pattern. In the case of a template rule whose pattern is a union pattern, this will be the original union pattern; the individual Rule objects contain the branches of the union pattern.
    • setBody Link icon

      public void setBody(Expression body)
      Set the expression that forms the body of the template
      Specified by:
      setBody in interface TraceableComponent
      Parameters:
      body - the body of the template
    • setStackFrameMap Link icon

      public void setStackFrameMap(SlotManager map)
    • getStackFrameMap Link icon

      public SlotManager getStackFrameMap()
    • setRequiredType Link icon

      public void setRequiredType(SequenceType type)
      Set the required type to be returned by this template
      Parameters:
      type - the required type as defined in the "as" attribute on the xsl:template element
    • getRequiredType Link icon

      public SequenceType getRequiredType()
      Get the required type to be returned by this template
      Returns:
      the required type as defined in the "as" attribute on the xsl:template element
    • registerRule Link icon

      public void registerRule(Rule rule)
      Register a rule for which this is the target
      Specified by:
      registerRule in interface RuleTarget
      Parameters:
      rule - a rule in which this is the target
    • getRules Link icon

      public List<Rule> getRules()
      Get the rules that use this template. For a template with no match pattern, this will be an empty list. For a union pattern, there will be one rule for each branch of the union.
      Returns:
      the rules corresponding to this template.
    • getContainerGranularity Link icon

      public int getContainerGranularity()
    • getPackageData Link icon

      public PackageData getPackageData()
    • setPackageData Link icon

      public void setPackageData(PackageData data)
    • getPublicId Link icon

      public String getPublicId()
      Description copied from interface: Location
      Get the Public ID
      Specified by:
      getPublicId in interface Location
      Specified by:
      getPublicId in interface Locator
      Specified by:
      getPublicId in interface SourceLocator
      Returns:
      usually null
    • getSystemId Link icon

      public String getSystemId()
      Description copied from interface: Location
      Get the system ID. This should be the system identifier of an XML external entity; if a stylesheet module comprises multiple external entities, the distinction should be retained. This means, for example, that an instruction in a stylesheet can have a different system identifier from its parent instruction. However, SAX parsers only provide location information at the element level, so when part of an XPath expression is in a different external entity from other parts of the same expression, this distinction is lost.

      The system identifier of a node is in general not the same as its base URI. The base URI is affected by xml:base attributes; the system identifier is not.

      Specified by:
      getSystemId in interface Location
      Specified by:
      getSystemId in interface Locator
      Specified by:
      getSystemId in interface SourceLocator
      Returns:
      the system ID, or null if the information is not available.
    • setSystemId Link icon

      public void setSystemId(String id)
    • getLineNumber Link icon

      public int getLineNumber()
      Description copied from interface: Location
      Get the line number. This line number is relative to the external entity identified by the system identifier. Line numbers start at 1. The value may be an approximation; SAX parsers only provide line number information at the level of element nodes.
      Specified by:
      getLineNumber in interface Location
      Specified by:
      getLineNumber in interface Locator
      Specified by:
      getLineNumber in interface SourceLocator
      Returns:
      the line number, or -1 if the information is not available.
    • setLineNumber Link icon

      public void setLineNumber(int line)
    • setColumnNumber Link icon

      public void setColumnNumber(int col)
    • getColumnNumber Link icon

      public int getColumnNumber()
      Description copied from interface: Location
      Get the column number. This column number is relative to the line identified by the line number. Column numbers start at 1.
      Specified by:
      getColumnNumber in interface Location
      Specified by:
      getColumnNumber in interface Locator
      Specified by:
      getColumnNumber in interface SourceLocator
      Returns:
      the column number, or -1 if the information is not available.
    • saveLocation Link icon

      public Location saveLocation()
      Get an immutable copy of this Location object. By default Location objects may be mutable, so they should not be saved for later use. The result of this operation holds the same location information, but in an immutable form.
      Specified by:
      saveLocation in interface Location
      Returns:
      an immutable copy (which may be the original object, if it is already immutable)
    • getRequiredContextItemType Link icon

      public ItemType getRequiredContextItemType()
    • isAbsentFocus Link icon

      public boolean isAbsentFocus()
    • getLocalParams Link icon

      public List<LocalParam> getLocalParams()
    • prepareInitializer Link icon

      public void prepareInitializer(Compilation compilation, ComponentDeclaration decl)
      Prepare for JIT compilation.
      Parameters:
      compilation - the XSLT compilation
      decl - the component declaration of this template rule
    • initialize Link icon

      public void initialize() throws XPathException
      Ensure that any first-time initialization has been done. Used in Saxon-EE to do JIT compilation
      Throws:
      XPathException - if any error occurs
    • apply Link icon

      public void apply(Outputter output, XPathContextMajor context) throws XPathException
      Process the template, without returning any tail calls. This path is used by xsl:apply-imports and xsl:next-match
      Parameters:
      output - the destination for the result
      context - The dynamic context, giving access to the current node,
      Throws:
      XPathException - if a dynamic error occurs while evaluating the template
    • applyLeavingTail Link icon

      public TailCall applyLeavingTail(Outputter output, XPathContext context) throws XPathException
      Process this template, with the possibility of returning a tail call package if the template contains any tail calls that are to be performed by the caller.
      Parameters:
      output - the destination for the result
      context - the XPath dynamic context
      Returns:
      null if the template exited normally; but if it was a tail call, details of the call that hasn't been made yet and needs to be made by the caller
      Throws:
      XPathException - if a dynamic error occurs while evaluating the template
    • export Link icon

      public void export(ExpressionPresenter presenter) throws XPathException
      Output diagnostic explanation to an ExpressionPresenter
      Specified by:
      export in interface RuleTarget
      Parameters:
      presenter - the destination for the explanation
      Throws:
      XPathException - if output fails
    • setDeclaredStreamable Link icon

      public void setDeclaredStreamable(boolean streamable)
      Say whether or not this template is declared as streamable
      Parameters:
      streamable - true if the template belongs to a streamable mode; set to false if it does not belong to a streamable mode, or if it is found that the template is not actually streamable, and fallback to non-streaming has been requested.
    • isDeclaredStreamable Link icon

      public boolean isDeclaredStreamable()
    • explainProperties Link icon

      public void explainProperties(ExpressionPresenter presenter) throws XPathException
      Throws:
      XPathException
    • copyTo Link icon

      protected void copyTo(TemplateRule tr)
    • setChildExpression Link icon

      public void setChildExpression(Expression expr)
      Specified by:
      setChildExpression in interface ExpressionOwner
    • getObjectName Link icon

      public StructuredQName getObjectName()
      Description copied from interface: Traceable
      Get a name identifying the object of the expression, for example a function name, template name, variable name, key name, element name, etc. This is used only where the name is known statically.
      Specified by:
      getObjectName in interface Traceable
      Returns:
      the QName of the object declared or manipulated by this instruction or expression
    • getTracingTag Link icon

      public String getTracingTag()
      Description copied from interface: TraceableComponent
      Get a string to identify the type of component
      Specified by:
      getTracingTag in interface TraceableComponent
      Returns:
      an identifying string