net.sf.saxon.style

Class StyleElement

public abstract class StyleElement extends ElementWithAttributes implements Locator, Container, InstructionInfo

Abstract superclass for all element nodes in the stylesheet.
Note: this class implements Locator. The element retains information about its own location in the stylesheet, which is useful when an XSL error is found.
Field Summary
protected StringdefaultCollationName
protected StringdefaultXPathNamespace
protected short[]extensionNamespaces
protected intreportingCircumstances
static intREPORT_ALWAYS
static intREPORT_IF_INSTANTIATED
static intREPORT_UNLESS_FALLBACK_AVAILABLE
static intREPORT_UNLESS_FORWARDS_COMPATIBLE
protected StaticContextstaticContext
protected StaticErrorvalidationError
protected BigDecimalversion
Constructor Summary
StyleElement()
Constructor
Method Summary
intallocateLocationId(String systemId, int lineNumber)
Allocate a location identifier
voidallocateSlots(Expression exp)
Allocate slots in the local stack frame to range variables used in an XPath expression
booleanbackwardsCompatibleModeIsEnabled()
Determine whether backwards-compatible mode is enabled for this element
XSLVariableDeclarationbindVariable(int fingerprint)
Bind a variable used in this element to the compiled form of the XSLVariable element in which it is declared
voidcheckEmpty()
Convenience method to check that the stylesheet element is empty
protected voidcheckSortComesFirst(boolean sortRequired)
Check that among the children of this element, any xsl:sort elements precede any other elements
voidcheckTopLevel(String errorCode)
Convenience method to check that the stylesheet element is at the top level
protected voidcheckUnknownAttribute(int nc)
Check whether an unknown attribute is permitted.
voidcheckWithinTemplate()
Check that the stylesheet element is within a sequence constructor
abstract Expressioncompile(Executable exec)
Compile the instruction on the stylesheet tree into an executable instruction for use at run-time.
protected voidcompileError(TransformerException error)
Construct an exception with diagnostic information
protected voidcompileError(String message)
protected voidcompileError(String message, String errorCode)
Compile time error, specifying an error code
ExpressioncompileSequenceConstructor(Executable exec, AxisIterator iter, boolean includeParams)
Compile the children of this instruction on the stylesheet tree, adding the subordinate instructions to the parent instruction on the execution tree.
protected voidcompileWarning(String message, String errorCode)
protected booleandefinesExcludedNamespace(short uriCode)
Check whether this node excludes a particular namespace from the result.
protected booleandefinesExtensionElement(short uriCode)
Check whether a particular extension element namespace is defined on this node.
protected ExpressionfallbackProcessing(Executable exec, StyleElement instruction)
Perform fallback processing.
voidfixupReferences()
Fix up references from XPath expressions.
booleanforwardsCompatibleModeIsEnabled()
Determine whether forwards-compatible mode is enabled for this element
protected AttributeSet[]getAttributeSets(String use, List list)
Get the list of attribute-sets associated with this element.
StringgetAttributeValue(String clarkName)
Get an attribute value given the Clark name of the attribute (that is, the name in {uri}local format).
protected ItemTypegetCommonChildItemType()
Get the most general type of item returned by the children of this instruction
intgetConstructType()
Get the type of construct.
SlotManagergetContainingSlotManager()
Get the SlotManager for the containing Procedure definition
XSLStylesheetgetContainingStylesheet()
Get the containing XSLStylesheet element
protected StringgetDefaultCollationName()
Get the default collation for this element
protected shortgetDefaultXPathNamespace()
Get the default XPath namespace code applicable to this element
ExecutablegetExecutable()
intgetHostLanguage()
Get the host language (XSLT, XQuery, XPath) used to implement the code in this container
protected StyleElementgetLastChildInstruction()
Find the last child instruction of this instruction.
intgetLineNumber()
intgetLineNumber(int locationId)
LocationProvidergetLocationProvider()
Get the LocationProvider allowing location identifiers to be resolved.
NamespaceResolvergetNamespaceResolver()
Get the namespace context of the instruction.
intgetObjectFingerprint()
Get a fingerprint identifying the object of the expression, for example a function name, template name, variable name, key name, element name, etc.
intgetObjectNameCode()
Get a name identifying the object of the expression, for example a function name, template name, variable name, key name, element name, etc.
intgetPrecedence()
Get the import precedence of this stylesheet element.
PreparedStylesheetgetPreparedStylesheet()
Get the PreparedStylesheet object.
protected XSLStylesheetgetPrincipalStylesheet()
Get the principal XSLStylesheet node.
IteratorgetProperties()
Get an iterator over all the properties available.
ObjectgetProperty(String name)
Get the value of a particular property of the instruction.
protected ItemTypegetReturnedItemType()
Determine the type of item returned by this instruction (only relevant if it is an instruction).
SchemaTypegetSchemaType(String typeAtt)
Get the Schema type definition for a type named in the stylesheet (in a "type" attribute).
StaticContextgetStaticContext()
Get the static context for expressions on this element
XSLFunctiongetStylesheetFunction(int fingerprint, int arity)
Get a FunctionCall declared using an xsl:function element in the stylesheet
StringgetSystemId(int locationId)
NamePoolgetTargetNamePool()
Get the namepool to be used at run-time, this namepool holds the names used in all XPath expressions and patterns
intgetTypeAnnotation(SchemaType schemaType)
Get the type annotation to use for a given schema type
BigDecimalgetVersion()
Get the numeric value of the version number on this element, or inherited from its ancestors
protected WithParam[]getWithParamInstructions(Executable exec, boolean tunnel, Instruction caller)
Get the list of xsl:with-param elements for a calling element (apply-templates, call-template, apply-imports, next-match).
booleanisExcludedNamespace(short uriCode)
Check whether a namespace uri defines an namespace excluded from the result.
protected booleanisExplaining()
Determine whether saxon:explain has been set to "yes"
booleanisExtensionNamespace(short uriCode)
Check whether a namespace uri defines an extension element.
booleanisInstruction()
Determine whether this node is an instruction.
protected booleanisPermittedChild(StyleElement child)
Specify that certain children are permitted for this element
protected voidissueWarning(TransformerException error)
Construct an exception with diagnostic information
protected voidissueWarning(String message, SourceLocator locator)
booleanisTopLevel()
Test whether this is a top-level element
ExpressionmakeAttributeValueTemplate(String expression)
Make an attribute value template in the context of this stylesheet element
ExpressionmakeExpression(String expression)
Make an expression in the context of this stylesheet element
intmakeNameCode(String qname)
Make a NameCode, using this Element as the context for namespace resolution, and registering the code in the namepool.
SavedNamespaceContextmakeNamespaceContext()
Make a NamespaceContext object representing the list of in-scope namespaces.
PatternmakePattern(String pattern)
Make a pattern in the context of this stylesheet element
SequenceTypemakeSequenceType(String sequenceType)
Process an attribute whose value is a SequenceType
protected SortKeyDefinition[]makeSortKeys()
Construct sort keys for a SortedIterator
protected static TraceWrappermakeTraceInstruction(StyleElement source, Expression child)
Create a trace instruction to wrap a real instruction
voidmarkTailCalls()
Mark tail-recursive calls on templates and functions.
booleanmayContainFallback()
Determine whether this type of element is allowed to contain an xsl:fallback instruction
booleanmayContainSequenceConstructor()
Determine whether this type of element is allowed to contain a sequence constructor
voidpostValidate()
Hook to allow additional validation of a parent element immediately after its children have been validated.
abstract voidprepareAttributes()
Set the attribute list for the element.
voidprocessAllAttributes()
Process the attributes of this element and all its children
voidprocessAttributes()
Process the attribute list for the element.
protected voidprocessDefaultCollationAttribute(String nc)
Process the [xsl:]default-xpath-namespace attribute if there is one
protected voidprocessDefaultXPathNamespaceAttribute(String nc)
Process the [xsl:]default-xpath-namespace attribute if there is one
protected voidprocessExcludedNamespaces(String nc)
Process the [xsl:]exclude-result-prefixes attribute if there is one
protected voidprocessExtensionElementAttribute(String nc)
Process the [xsl:]extension-element-prefixes attribute if there is one
protected voidprocessVersionAttribute(String nc)
Process the [xsl:]version attribute if there is one
voidreportAbsence(String attribute)
Convenience method to report the absence of a mandatory attribute
voidsetLineNumber(int lineNumber)
voidsetObjectNameCode(int nameCode)
Set the object name code
protected voidsetValidationError(TransformerException reason, int circumstances)
Set a validation error
voidsubstituteFor(StyleElement temp)
Make this node a substitute for a temporary one previously added to the tree.
ExpressiontypeCheck(String name, Expression exp)
Type-check an expression.
PatterntypeCheck(String name, Pattern pattern)
Type-check a pattern.
protected voidundeclaredNamespaceError(String prefix, String errorCode)
voidvalidate()
Check that the stylesheet element is valid.
protected voidvalidateChildren()
Validate the children of this node, recursively.
voidvalidateSubtree()
Recursive walk through the stylesheet to validate all nodes

Field Detail

defaultCollationName

protected String defaultCollationName

defaultXPathNamespace

protected String defaultXPathNamespace

extensionNamespaces

protected short[] extensionNamespaces

reportingCircumstances

protected int reportingCircumstances

REPORT_ALWAYS

public static final int REPORT_ALWAYS

REPORT_IF_INSTANTIATED

public static final int REPORT_IF_INSTANTIATED

REPORT_UNLESS_FALLBACK_AVAILABLE

public static final int REPORT_UNLESS_FALLBACK_AVAILABLE

REPORT_UNLESS_FORWARDS_COMPATIBLE

public static final int REPORT_UNLESS_FORWARDS_COMPATIBLE

staticContext

protected StaticContext staticContext

validationError

protected StaticError validationError

version

protected BigDecimal version

Constructor Detail

StyleElement

public StyleElement()
Constructor

Method Detail

allocateLocationId

public int allocateLocationId(String systemId, int lineNumber)
Allocate a location identifier

allocateSlots

public void allocateSlots(Expression exp)
Allocate slots in the local stack frame to range variables used in an XPath expression

Parameters: exp the XPath expression for which slots are to be allocated

backwardsCompatibleModeIsEnabled

public boolean backwardsCompatibleModeIsEnabled()
Determine whether backwards-compatible mode is enabled for this element

bindVariable

public XSLVariableDeclaration bindVariable(int fingerprint)
Bind a variable used in this element to the compiled form of the XSLVariable element in which it is declared

Parameters: fingerprint The fingerprint of the name of the variable

Returns: the XSLVariableDeclaration (that is, an xsl:variable or xsl:param instruction) for the variable

Throws: net.sf.saxon.trans.StaticError if the variable has not been declared

checkEmpty

public void checkEmpty()
Convenience method to check that the stylesheet element is empty

Throws: XPathException if it is not empty

checkSortComesFirst

protected void checkSortComesFirst(boolean sortRequired)
Check that among the children of this element, any xsl:sort elements precede any other elements

Parameters: sortRequired true if there must be at least one xsl:sort element

Throws: XPathException if invalid

checkTopLevel

public void checkTopLevel(String errorCode)
Convenience method to check that the stylesheet element is at the top level

Throws: XPathException if not at top level

checkUnknownAttribute

protected void checkUnknownAttribute(int nc)
Check whether an unknown attribute is permitted.

Parameters: nc The name code of the attribute name

checkWithinTemplate

public void checkWithinTemplate()
Check that the stylesheet element is within a sequence constructor

Throws: XPathException if not within a sequence constructor

compile

public abstract Expression compile(Executable exec)
Compile the instruction on the stylesheet tree into an executable instruction for use at run-time.

Returns: either a ComputedExpression, or null. The value null is returned when compiling an instruction that returns a no-op, or when compiling a top-level object such as an xsl:template that compiles into something other than an instruction.

compileError

protected void compileError(TransformerException error)
Construct an exception with diagnostic information

compileError

protected void compileError(String message)

compileError

protected void compileError(String message, String errorCode)
Compile time error, specifying an error code

Parameters: message the error message errorCode the error code. May be null if not known or not defined

Throws: XPathException

compileSequenceConstructor

public Expression compileSequenceConstructor(Executable exec, AxisIterator iter, boolean includeParams)
Compile the children of this instruction on the stylesheet tree, adding the subordinate instructions to the parent instruction on the execution tree.

Returns: the array of children

compileWarning

protected void compileWarning(String message, String errorCode)

definesExcludedNamespace

protected boolean definesExcludedNamespace(short uriCode)
Check whether this node excludes a particular namespace from the result. This method checks this node only, not the ancestor nodes.

Parameters: uriCode the code of the namespace URI being tested

definesExtensionElement

protected boolean definesExtensionElement(short uriCode)
Check whether a particular extension element namespace is defined on this node. This checks this node only, not the ancestor nodes. The implementation checks whether the prefix is included in the [xsl:]extension-element-prefixes attribute.

Parameters: uriCode the namespace URI code being tested

fallbackProcessing

protected Expression fallbackProcessing(Executable exec, StyleElement instruction)
Perform fallback processing. Generate fallback code for an extension instruction that is not recognized by the implementation.

Parameters: instruction The unknown extension instruction

fixupReferences

public void fixupReferences()
Fix up references from XPath expressions. Overridden for function declarations and variable declarations

forwardsCompatibleModeIsEnabled

public boolean forwardsCompatibleModeIsEnabled()
Determine whether forwards-compatible mode is enabled for this element

getAttributeSets

protected AttributeSet[] getAttributeSets(String use, List list)
Get the list of attribute-sets associated with this element. This is used for xsl:element, xsl:copy, xsl:attribute-set, and on literal result elements

Parameters: use the original value of the [xsl:]use-attribute-sets attribute list an empty list to hold the list of XSLAttributeSet elements in the stylesheet tree. Or null, if these are not required.

Returns: an array of AttributeList instructions representing the compiled attribute sets

getAttributeValue

public String getAttributeValue(String clarkName)
Get an attribute value given the Clark name of the attribute (that is, the name in {uri}local format).

getCommonChildItemType

protected ItemType getCommonChildItemType()
Get the most general type of item returned by the children of this instruction

Returns: the lowest common supertype of the item types returned by the children

getConstructType

public int getConstructType()
Get the type of construct. This will be a constant in class Location. This method is part of the InstructionInfo interface

getContainingSlotManager

public SlotManager getContainingSlotManager()
Get the SlotManager for the containing Procedure definition

Returns: the SlotManager associated with the containing Function, Template, etc, or null if there is no such containing Function, Template etc.

getContainingStylesheet

public XSLStylesheet getContainingStylesheet()
Get the containing XSLStylesheet element

getDefaultCollationName

protected String getDefaultCollationName()
Get the default collation for this element

getDefaultXPathNamespace

protected short getDefaultXPathNamespace()
Get the default XPath namespace code applicable to this element

getExecutable

public Executable getExecutable()

getHostLanguage

public int getHostLanguage()
Get the host language (XSLT, XQuery, XPath) used to implement the code in this container

Returns: typically XSLT or XQUERY

getLastChildInstruction

protected StyleElement getLastChildInstruction()
Find the last child instruction of this instruction. Returns null if there are no child instructions, or if the last child is a text node.

getLineNumber

public int getLineNumber()

getLineNumber

public int getLineNumber(int locationId)

getLocationProvider

public LocationProvider getLocationProvider()
Get the LocationProvider allowing location identifiers to be resolved.

getNamespaceResolver

public NamespaceResolver getNamespaceResolver()
Get the namespace context of the instruction.

getObjectFingerprint

public int getObjectFingerprint()
Get a fingerprint 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. If there is no name, the value will be -1.

getObjectNameCode

public int getObjectNameCode()
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. If there is no name, the value will be -1.

getPrecedence

public int getPrecedence()
Get the import precedence of this stylesheet element.

getPreparedStylesheet

public PreparedStylesheet getPreparedStylesheet()
Get the PreparedStylesheet object.

Returns: the PreparedStylesheet to which this stylesheet element belongs

getPrincipalStylesheet

protected XSLStylesheet getPrincipalStylesheet()
Get the principal XSLStylesheet node. This gets the principal style sheet, i.e. the one originally loaded, that forms the root of the import/include tree

getProperties

public Iterator getProperties()
Get an iterator over all the properties available. The values returned by the iterator will be of type String, and each string can be supplied as input to the getProperty() method to retrieve the value of the property.

getProperty

public Object getProperty(String name)
Get the value of a particular property of the instruction. This is part of the InstructionInfo interface for run-time tracing and debugging. The properties available include all the attributes of the source instruction (named by the attribute name): these are all provided as string values.

Parameters: name The name of the required property

Returns: The value of the requested property, or null if the property is not available

getReturnedItemType

protected ItemType getReturnedItemType()
Determine the type of item returned by this instruction (only relevant if it is an instruction). Default implementation returns Type.ITEM, indicating that we don't know, it might be anything. Returns null in the case of an element such as xsl:sort or xsl:variable that can appear in a sequence constructor but contributes nothing to the result sequence.

Returns: the item type returned

getSchemaType

public SchemaType getSchemaType(String typeAtt)
Get the Schema type definition for a type named in the stylesheet (in a "type" attribute).

Throws: XPathException if the type is not declared in an imported schema, or is not a built-in type

getStaticContext

public StaticContext getStaticContext()
Get the static context for expressions on this element

Returns: the static context

getStylesheetFunction

public XSLFunction getStylesheetFunction(int fingerprint, int arity)
Get a FunctionCall declared using an xsl:function element in the stylesheet

Parameters: fingerprint the fingerprint of the name of the function arity the number of arguments in the function call. The value -1 indicates that any arity will do (this is used to support the function-available() function).

Returns: the XSLFunction object representing the function declaration in the stylesheet, or null if no such function is defined.

getSystemId

public String getSystemId(int locationId)

getTargetNamePool

public NamePool getTargetNamePool()
Get the namepool to be used at run-time, this namepool holds the names used in all XPath expressions and patterns

getTypeAnnotation

public int getTypeAnnotation(SchemaType schemaType)
Get the type annotation to use for a given schema type

getVersion

public BigDecimal getVersion()
Get the numeric value of the version number on this element, or inherited from its ancestors

getWithParamInstructions

protected WithParam[] getWithParamInstructions(Executable exec, boolean tunnel, Instruction caller)
Get the list of xsl:with-param elements for a calling element (apply-templates, call-template, apply-imports, next-match). This method can be used to get either the tunnel parameters, or the non-tunnel parameters.

Parameters: tunnel true if the tunnel="yes" parameters are wanted, false to get caller

isExcludedNamespace

public boolean isExcludedNamespace(short uriCode)
Check whether a namespace uri defines an namespace excluded from the result. This checks whether the namespace is defined as an excluded namespace on this or any ancestor node.

Parameters: uriCode the code of the namespace URI being tested

isExplaining

protected boolean isExplaining()
Determine whether saxon:explain has been set to "yes"

isExtensionNamespace

public boolean isExtensionNamespace(short uriCode)
Check whether a namespace uri defines an extension element. This checks whether the namespace is defined as an extension namespace on this or any ancestor node.

Parameters: uriCode the namespace URI code being tested

isInstruction

public boolean isInstruction()
Determine whether this node is an instruction. The default implementation says it isn't.

isPermittedChild

protected boolean isPermittedChild(StyleElement child)
Specify that certain children are permitted for this element

issueWarning

protected void issueWarning(TransformerException error)
Construct an exception with diagnostic information

issueWarning

protected void issueWarning(String message, SourceLocator locator)

isTopLevel

public boolean isTopLevel()
Test whether this is a top-level element

makeAttributeValueTemplate

public Expression makeAttributeValueTemplate(String expression)
Make an attribute value template in the context of this stylesheet element

makeExpression

public Expression makeExpression(String expression)
Make an expression in the context of this stylesheet element

makeNameCode

public final int makeNameCode(String qname)
Make a NameCode, using this Element as the context for namespace resolution, and registering the code in the namepool. If the name is unprefixed, the default namespace is not used.

Parameters: qname The name as written, in the form "[prefix:]localname". The name must have already been validated as a syntactically-correct QName.

Throws: XPathException if the qname is not a lexically-valid QName, or if the name is in a reserved namespace. NamespaceException if the prefix of the qname has not been declared

makeNamespaceContext

public SavedNamespaceContext makeNamespaceContext()
Make a NamespaceContext object representing the list of in-scope namespaces. The NamePool used for numeric codes in the NamespaceContext will be the target name pool.

makePattern

public Pattern makePattern(String pattern)
Make a pattern in the context of this stylesheet element

makeSequenceType

public SequenceType makeSequenceType(String sequenceType)
Process an attribute whose value is a SequenceType

makeSortKeys

protected SortKeyDefinition[] makeSortKeys()
Construct sort keys for a SortedIterator

Returns: an array of SortKeyDefinition objects if there are any sort keys; or null if there are none.

makeTraceInstruction

protected static TraceWrapper makeTraceInstruction(StyleElement source, Expression child)
Create a trace instruction to wrap a real instruction

markTailCalls

public void markTailCalls()
Mark tail-recursive calls on templates and functions. For most instructions, this does nothing.

mayContainFallback

public boolean mayContainFallback()
Determine whether this type of element is allowed to contain an xsl:fallback instruction

mayContainSequenceConstructor

public boolean mayContainSequenceConstructor()
Determine whether this type of element is allowed to contain a sequence constructor

postValidate

public void postValidate()
Hook to allow additional validation of a parent element immediately after its children have been validated.

prepareAttributes

public abstract void prepareAttributes()
Set the attribute list for the element. This is called to process the attributes (note the distinction from processAttributes in the superclass). Must be supplied in a subclass

processAllAttributes

public void processAllAttributes()
Process the attributes of this element and all its children

processAttributes

public final void processAttributes()
Process the attribute list for the element. This is a wrapper method that calls prepareAttributes (provided in the subclass) and traps any exceptions

processDefaultCollationAttribute

protected void processDefaultCollationAttribute(String nc)
Process the [xsl:]default-xpath-namespace attribute if there is one

Parameters: nc the Clark name of the attribute required

processDefaultXPathNamespaceAttribute

protected void processDefaultXPathNamespaceAttribute(String nc)
Process the [xsl:]default-xpath-namespace attribute if there is one

Parameters: nc the Clark name of the attribute required

processExcludedNamespaces

protected void processExcludedNamespaces(String nc)
Process the [xsl:]exclude-result-prefixes attribute if there is one

Parameters: nc the Clark name of the attribute required

processExtensionElementAttribute

protected void processExtensionElementAttribute(String nc)
Process the [xsl:]extension-element-prefixes attribute if there is one

Parameters: nc the Clark name of the attribute required

processVersionAttribute

protected void processVersionAttribute(String nc)
Process the [xsl:]version attribute if there is one

Parameters: nc the Clark name of the attribute required

reportAbsence

public void reportAbsence(String attribute)
Convenience method to report the absence of a mandatory attribute

Throws: XPathException if the attribute is missing

setLineNumber

public void setLineNumber(int lineNumber)

setObjectNameCode

public void setObjectNameCode(int nameCode)
Set the object name code

setValidationError

protected void setValidationError(TransformerException reason, int circumstances)
Set a validation error

substituteFor

public void substituteFor(StyleElement temp)
Make this node a substitute for a temporary one previously added to the tree. See StyleNodeFactory for details. "A node like the other one in all things but its class". Note that at this stage, the node will not yet be known to its parent, though it will contain a reference to its parent; and it will have no children.

typeCheck

public Expression typeCheck(String name, Expression exp)
Type-check an expression. This is called to check each expression while the containing instruction is being validated. It is not just a static type-check, it also adds code to perform any necessary run-time type checking and/or conversion.

typeCheck

public Pattern typeCheck(String name, Pattern pattern)
Type-check a pattern. This is called to check each pattern while the containing instruction is being validated. It is not just a static type-check, it also adds code to perform any necessary run-time type checking and/or conversion.

undeclaredNamespaceError

protected void undeclaredNamespaceError(String prefix, String errorCode)

validate

public void validate()
Check that the stylesheet element is valid. This is called once for each element, after the entire tree has been built. As well as validation, it can perform first-time initialisation. The default implementation does nothing; it is normally overriden in subclasses.

validateChildren

protected void validateChildren()
Validate the children of this node, recursively. Overridden for top-level data elements.

validateSubtree

public void validateSubtree()
Recursive walk through the stylesheet to validate all nodes