com.icl.saxon.style
Class XSLStyleSheet

java.lang.Object
  extended by com.icl.saxon.om.AbstractNode
      extended by com.icl.saxon.tree.NodeImpl
          extended by com.icl.saxon.tree.ElementImpl
              extended by com.icl.saxon.tree.ElementWithAttributes
                  extended by com.icl.saxon.style.StyleElement
                      extended by com.icl.saxon.style.XSLStyleSheet
All Implemented Interfaces:
NodeInfo, javax.xml.transform.dom.DOMLocator, javax.xml.transform.Source, javax.xml.transform.SourceLocator, org.w3c.dom.Element, org.w3c.dom.NamedNodeMap, org.w3c.dom.Node, org.xml.sax.Locator

public class XSLStyleSheet
extends StyleElement

An xsl:stylesheet or xsl:transform element in the stylesheet.
Note this element represents a stylesheet module, not necessarily the whole stylesheet.


Field Summary
protected  int sequence
           
 
Fields inherited from class com.icl.saxon.style.StyleElement
attributeSets, extensionNamespaces, REPORT_ALWAYS, REPORT_IF_INSTANTIATED, REPORT_UNLESS_FORWARDS_COMPATIBLE, reportingCircumstances, staticContext, validationError, version
 
Fields inherited from class com.icl.saxon.tree.ElementWithAttributes
attributeList, namespaceList
 
Fields inherited from class com.icl.saxon.tree.ElementImpl
nameCode, root
 
Fields inherited from class com.icl.saxon.tree.NodeImpl
emptyArray, index, parent
 
Fields inherited from class com.icl.saxon.om.AbstractNode
NODE_LETTER
 
Fields inherited from interface org.w3c.dom.Node
ATTRIBUTE_NODE, CDATA_SECTION_NODE, COMMENT_NODE, DOCUMENT_FRAGMENT_NODE, DOCUMENT_NODE, DOCUMENT_POSITION_CONTAINED_BY, DOCUMENT_POSITION_CONTAINS, DOCUMENT_POSITION_DISCONNECTED, DOCUMENT_POSITION_FOLLOWING, DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC, DOCUMENT_POSITION_PRECEDING, DOCUMENT_TYPE_NODE, ELEMENT_NODE, ENTITY_NODE, ENTITY_REFERENCE_NODE, NOTATION_NODE, PROCESSING_INSTRUCTION_NODE, TEXT_NODE
 
Fields inherited from interface com.icl.saxon.om.NodeInfo
ATTRIBUTE, COMMENT, ELEMENT, NAMESPACE, NODE, NONE, NUMBER_OF_TYPES, PI, ROOT, TEXT
 
Constructor Summary
XSLStyleSheet()
           
 
Method Summary
 void addChild(NodeImpl node, int index)
          Add a child node to this node.
 void allocateLocalSlots(int n)
          Ensure there is enuogh space for local variables or parameters in any template
 int allocateSlotNumber()
          Allocate a slot number for a global variable or parameter
 void compact(int size)
          Compact the space used by this node
 void copyStringValue(Outputter out)
          Copy the string-value of this node to a given outputter
 void dropChildren()
          Drop a branch of the tree.
 AxisEnumeration enumerateChildren(NodeTest test)
          Get an enumeration of the children of this node
 void gatherOutputProperties(java.util.Properties details)
          Update an output properties object using the xsl:output elements in the stylesheet.
 org.w3c.dom.NodeList getChildNodes()
          Return a NodeList that contains all children of this node.
 DecimalFormatManager getDecimalFormatManager()
          Get the DecimalFormatManager which handles decimal-format definitions
 java.lang.Class getExternalJavaClass(java.lang.String uri)
          Get a Java class for a given namespace URI, if possible.
 org.w3c.dom.Node getFirstChild()
          Get the first child node of the element
 XSLStyleSheet getImporter()
          Get the StyleSheet that included or imported this one.
 KeyManager getKeyManager()
          Get the KeyManager which handles key definitions
 org.w3c.dom.Node getLastChild()
          Get the last child node of the element
 int getMinImportPrecedence()
          Get the minimum import precedence of this stylesheet, that is, the lowest precedence of any stylesheet imported by this one
protected  short getNamespaceAlias(short uriCode)
          Get the declared namespace alias for a given namespace URI code if there is one.
 java.lang.String getNodeValue()
          Get the node value as defined in the DOM.
protected  NodeImpl getNthChild(int n)
          Get the nth child node of the element (numbering from 0)
 int getPrecedence()
          Get the import precedence of this stylesheet
 PreparedStyleSheet getPreparedStyleSheet()
          Get the owning PreparedStyleSheet object
 PreviewManager getPreviewManager()
          Get the PreviewManager which handles saxon:preview element definitions
 RuleManager getRuleManager()
          Get the RuleManager which handles template rules
protected  long getSequenceNumber()
          Get the node sequence number (in document order).
 java.lang.String getStringValue()
          Return the string-value of the node, that is, the concatenation of the character content of all descendent elements and text nodes.
protected  Mode getStripperRules()
          Get the rules determining which nodes are to be stripped from the tree
 java.util.Vector getTopLevel()
          Get the top level elements in this stylesheet, after applying include/import
 boolean hasChildNodes()
          Determine if the node has any children.
protected  boolean hasNamespaceAliases()
           
 void initialiseBindery(Bindery bindery)
          Allocate space in bindery for all the variables needed This has to be done early to accommodate preview mode
 Stripper newStripper()
          Create a Stripper which handles whitespace stripping definitions
 void prepareAttributes()
          Prepare the attributes on the stylesheet element
 void preprocess()
          Preprocess does all the processing possible before the source document is available.
 void process(Context context)
          Process() is called once the source document is available.
 void processAllAttributes()
          Process the attributes of every node in the stylesheet
protected  void processVersionAttribute(int nc)
          Process the version attribute - mandatory on this element (but checked elsewhere)
 void removeChild(int index)
          Remove node at given index.
 void renumberChildren()
          Renumber the children of a given parent node.
 void setImporter(XSLStyleSheet importer)
          Set the StyleSheet that included or imported this one.
 void setMinImportPrecedence(int precedence)
          Set the minimum import precedence of this stylesheet, that is, the lowest precedence of any stylesheet imported by this one
 void setPrecedence(int prec)
          Set the import precedence of this stylesheet
 void setPreparedStyleSheet(PreparedStyleSheet sheet)
          Create link to the owning PreparedStyleSheet object
 void setPreviewManager(PreviewManager pm)
          Set the preview manager
 void setWasIncluded()
          Indicate that this stylesheet was included (by its "importer") using an xsl:include statement as distinct from xsl:import
 void spliceIncludes()
          Process xsl:include and xsl:import elements.
 boolean stripsWhitespace()
          Determine whether this stylesheet does any whitespace stripping
 void updateOutputProperties(java.util.Properties details, Context context)
          Update an output properties object using the xsl:output elements in the stylesheet.
 void useChildrenArray(NodeImpl[] array)
          Supply an array to be used for the array of children.
 void validate()
          Validate this element
 boolean wasIncluded()
          Determine whether this stylesheet was included (by its "importer") using an xsl:include statement as distinct from xsl:import.
 
Methods inherited from class com.icl.saxon.style.StyleElement
bindVariable, checkEmpty, checkNotTopLevel, checkTopLevel, checkUnknownAttribute, checkWithinTemplate, compileError, compileError, definesExcludedNamespace, definesExtensionElement, doesPostProcessing, fallbackProcessing, findAttributeSets, forwardsCompatibleModeIsEnabled, getContainingStyleSheet, getPrincipalStyleSheet, getStandardNames, getStyleSheetFunction, getVariableBinding, getVariableNames, getVersion, handleSortKeys, isExcludedNamespace, isExtensionNamespace, isInstruction, isTopLevel, makeAttributeValueTemplate, makeExpression, makePattern, mayContainTemplateBody, processAttributes, processAttributeSets, processChildren, processExcludedNamespaces, processExtensionElementAttribute, reportAbsence, setValidationError, styleError, styleError, substituteFor, validateChildren, validateSubtree
 
Methods inherited from class com.icl.saxon.tree.ElementWithAttributes
addNamespaceNodes, copy, getAttribute, getAttributeList, getAttributeNode, getAttributeNodeNS, getAttributeNS, getAttributes, getAttributeValue, getAttributeValue, getAttributeValue, getLength, getNamedItem, getNamedItemNS, getNamespaceCodes, getPrefixForURI, getURICodeForPrefix, hasAttribute, hasAttributeNS, hasAttributes, initialise, item, outputNamespaceNodes, removeAttribute, removeAttributeNode, removeAttributeNS, removeNamedItem, removeNamedItemNS, setAttribute, setAttributeNode, setAttributeNodeNS, setAttributeNS, setNamedItem, setNamedItemNS, setNamespaceDeclarations
 
Methods inherited from class com.icl.saxon.tree.ElementImpl
copy, generateId, getBaseURI, getDocumentRoot, getLineNumber, getNameCode, getNodeType, getSystemId, makeNameCode, setLineNumber, setNameCode, setSystemId
 
Methods inherited from class com.icl.saxon.tree.NodeImpl
compareOrder, getDisplayName, getDocumentElement, getEnumeration, getFingerprint, getLocalName, getNamePool, getNextInDocument, getNextSibling, getOriginatingNode, getParent, getPrefix, getPreviousInDocument, getPreviousSibling, getURI, isSameNodeInfo, removeNode
 
Methods inherited from class com.icl.saxon.om.AbstractNode
appendChild, appendData, cloneNode, compareDocumentPosition, createAttribute, createAttributeNS, createCDATASection, createComment, createDocumentFragment, createElement, createElementNS, createEntityReference, createProcessingInstruction, createTextNode, deleteData, disallowUpdate, getColumnNumber, getData, getDoctype, getElementById, getElementsByTagName, getElementsByTagNameNS, getFeature, getImplementation, getName, getNamespaceURI, getNodeName, getOwnerDocument, getOwnerElement, getParentNode, getPublicId, getSchemaTypeInfo, getSpecified, getTagName, getTextContent, getUserData, getValue, getWholeText, importNode, insertBefore, insertData, isDefaultNamespace, isElementContentWhitespace, isEqualNode, isId, isSameNode, isSupported, lookupNamespaceURI, lookupPrefix, normalize, removeChild, replaceChild, replaceData, replaceWholeText, setData, setIdAttribute, setIdAttributeNode, setIdAttributeNS, setNodeValue, setPrefix, setTextContent, setUserData, setValue, splitText, substringData, supports
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 
Methods inherited from interface org.xml.sax.Locator
getColumnNumber, getLineNumber, getPublicId, getSystemId
 
Methods inherited from interface org.w3c.dom.Element
getElementsByTagName, getElementsByTagNameNS, getSchemaTypeInfo, getTagName, setIdAttribute, setIdAttributeNode, setIdAttributeNS
 
Methods inherited from interface org.w3c.dom.Node
appendChild, cloneNode, compareDocumentPosition, getBaseURI, getChildNodes, getFeature, getFirstChild, getLastChild, getLocalName, getNamespaceURI, getNextSibling, getNodeName, getNodeType, getNodeValue, getOwnerDocument, getParentNode, getPrefix, getPreviousSibling, getTextContent, getUserData, hasChildNodes, insertBefore, isDefaultNamespace, isEqualNode, isSameNode, isSupported, lookupNamespaceURI, lookupPrefix, normalize, removeChild, replaceChild, setNodeValue, setPrefix, setTextContent, setUserData
 

Field Detail

sequence

protected int sequence
Constructor Detail

XSLStyleSheet

public XSLStyleSheet()
Method Detail

setPreparedStyleSheet

public void setPreparedStyleSheet(PreparedStyleSheet sheet)
Create link to the owning PreparedStyleSheet object


getPreparedStyleSheet

public PreparedStyleSheet getPreparedStyleSheet()
Get the owning PreparedStyleSheet object

Overrides:
getPreparedStyleSheet in class StyleElement
Returns:
the PreparedStyleSheet to which this stylesheet element belongs

getRuleManager

public RuleManager getRuleManager()
Get the RuleManager which handles template rules


getStripperRules

protected Mode getStripperRules()
Get the rules determining which nodes are to be stripped from the tree


newStripper

public Stripper newStripper()
Create a Stripper which handles whitespace stripping definitions


stripsWhitespace

public boolean stripsWhitespace()
Determine whether this stylesheet does any whitespace stripping


getKeyManager

public KeyManager getKeyManager()
Get the KeyManager which handles key definitions


getDecimalFormatManager

public DecimalFormatManager getDecimalFormatManager()
Get the DecimalFormatManager which handles decimal-format definitions


getPreviewManager

public PreviewManager getPreviewManager()
Get the PreviewManager which handles saxon:preview element definitions

Returns:
null if there are no saxon:preview elements

setPreviewManager

public void setPreviewManager(PreviewManager pm)
Set the preview manager


setPrecedence

public void setPrecedence(int prec)
Set the import precedence of this stylesheet


getPrecedence

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

Overrides:
getPrecedence in class StyleElement

getMinImportPrecedence

public int getMinImportPrecedence()
Get the minimum import precedence of this stylesheet, that is, the lowest precedence of any stylesheet imported by this one


setMinImportPrecedence

public void setMinImportPrecedence(int precedence)
Set the minimum import precedence of this stylesheet, that is, the lowest precedence of any stylesheet imported by this one


setImporter

public void setImporter(XSLStyleSheet importer)
Set the StyleSheet that included or imported this one.


getImporter

public XSLStyleSheet getImporter()
Get the StyleSheet that included or imported this one.

Returns:
null if this is the principal stylesheet

setWasIncluded

public void setWasIncluded()
Indicate that this stylesheet was included (by its "importer") using an xsl:include statement as distinct from xsl:import


wasIncluded

public boolean wasIncluded()
Determine whether this stylesheet was included (by its "importer") using an xsl:include statement as distinct from xsl:import.


getTopLevel

public java.util.Vector getTopLevel()
Get the top level elements in this stylesheet, after applying include/import


allocateSlotNumber

public int allocateSlotNumber()
Allocate a slot number for a global variable or parameter


allocateLocalSlots

public void allocateLocalSlots(int n)
Ensure there is enuogh space for local variables or parameters in any template


prepareAttributes

public void prepareAttributes()
                       throws javax.xml.transform.TransformerConfigurationException
Prepare the attributes on the stylesheet element

Specified by:
prepareAttributes in class StyleElement
Throws:
javax.xml.transform.TransformerConfigurationException

processVersionAttribute

protected void processVersionAttribute(int nc)
Process the version attribute - mandatory on this element (but checked elsewhere)

Overrides:
processVersionAttribute in class StyleElement
Parameters:
nc - the name code of the attribute required

getNamespaceAlias

protected short getNamespaceAlias(short uriCode)
Get the declared namespace alias for a given namespace URI code if there is one. If there is more than one, we get the last.

Parameters:
uriCode - The code of the uri used in the stylesheet.
Returns:
The code of the result uri to be used: return the stylesheet uri unchanged if no alias is defined

validate

public void validate()
              throws javax.xml.transform.TransformerConfigurationException
Validate this element

Overrides:
validate in class StyleElement
Throws:
javax.xml.transform.TransformerConfigurationException

preprocess

public void preprocess()
                throws javax.xml.transform.TransformerConfigurationException
Preprocess does all the processing possible before the source document is available. It is done once per stylesheet, so the stylesheet can be reused for multiple source documents.

Overrides:
preprocess in class StyleElement
Throws:
javax.xml.transform.TransformerConfigurationException

spliceIncludes

public void spliceIncludes()
                    throws javax.xml.transform.TransformerConfigurationException
Process xsl:include and xsl:import elements.

Throws:
javax.xml.transform.TransformerConfigurationException

hasNamespaceAliases

protected boolean hasNamespaceAliases()

processAllAttributes

public void processAllAttributes()
                          throws javax.xml.transform.TransformerConfigurationException
Process the attributes of every node in the stylesheet

Overrides:
processAllAttributes in class StyleElement
Throws:
javax.xml.transform.TransformerConfigurationException

initialiseBindery

public void initialiseBindery(Bindery bindery)
Allocate space in bindery for all the variables needed This has to be done early to accommodate preview mode


gatherOutputProperties

public void gatherOutputProperties(java.util.Properties details)
Update an output properties object using the xsl:output elements in the stylesheet. This method can be called before the source document is available; all properties will be returned as written, with attribute value templates and namespace prefixes unexpanded, and no validation performed.


updateOutputProperties

public void updateOutputProperties(java.util.Properties details,
                                   Context context)
                            throws javax.xml.transform.TransformerException
Update an output properties object using the xsl:output elements in the stylesheet. Note, as xsl:output now allows attribute value templates, this cannot be called until the source document is available.

Throws:
javax.xml.transform.TransformerException

getExternalJavaClass

public java.lang.Class getExternalJavaClass(java.lang.String uri)
                                     throws javax.xml.transform.TransformerException
Get a Java class for a given namespace URI, if possible. return null if none is found.

Throws:
javax.xml.transform.TransformerException - if a class is found but cannot be loaded

process

public void process(Context context)
             throws javax.xml.transform.TransformerException
Process() is called once the source document is available. It activates those top-level stylesheet elements that were not dealt with at preprocessing stage, notably global variables and parameters, and xsl:output elements

Specified by:
process in class StyleElement
Parameters:
context - The context in the source XML document, giving access to the current node, the current variables, etc.
Throws:
javax.xml.transform.TransformerException

getSequenceNumber

protected final long getSequenceNumber()
Get the node sequence number (in document order). Sequence numbers are monotonic but not consecutive. In the current implementation, parent nodes (elements and roots) have a zero least-significant word, while namespaces, attributes, text nodes, comments, and PIs have the top word the same as their owner and the bottom half reflecting their relative position.

Overrides:
getSequenceNumber in class NodeImpl

hasChildNodes

public final boolean hasChildNodes()
Determine if the node has any children.

Specified by:
hasChildNodes in interface NodeInfo
Specified by:
hasChildNodes in interface org.w3c.dom.Node
Overrides:
hasChildNodes in class NodeImpl
Returns:
true if the node has any children, false if the node has no children.

enumerateChildren

public final AxisEnumeration enumerateChildren(NodeTest test)
Get an enumeration of the children of this node


getFirstChild

public final org.w3c.dom.Node getFirstChild()
Get the first child node of the element

Specified by:
getFirstChild in interface org.w3c.dom.Node
Overrides:
getFirstChild in class NodeImpl
Returns:
the first child node of the required type, or null if there are no children

getLastChild

public final org.w3c.dom.Node getLastChild()
Get the last child node of the element

Specified by:
getLastChild in interface org.w3c.dom.Node
Overrides:
getLastChild in class NodeImpl
Returns:
the last child of the element, or null if there are no children

getChildNodes

public final org.w3c.dom.NodeList getChildNodes()
Return a NodeList that contains all children of this node. If there are no children, this is a NodeList containing no nodes.

Specified by:
getChildNodes in interface org.w3c.dom.Node
Overrides:
getChildNodes in class NodeImpl

getNthChild

protected final NodeImpl getNthChild(int n)
Get the nth child node of the element (numbering from 0)

Returns:
the last child of the element, or null if there is no n'th child

getStringValue

public java.lang.String getStringValue()
Return the string-value of the node, that is, the concatenation of the character content of all descendent elements and text nodes.

Returns:
the accumulated character content of the element, including descendant elements.

copyStringValue

public void copyStringValue(Outputter out)
                     throws javax.xml.transform.TransformerException
Copy the string-value of this node to a given outputter

Specified by:
copyStringValue in interface NodeInfo
Overrides:
copyStringValue in class AbstractNode
Throws:
javax.xml.transform.TransformerException

useChildrenArray

public void useChildrenArray(NodeImpl[] array)
Supply an array to be used for the array of children. For system use only.


addChild

public void addChild(NodeImpl node,
                     int index)
Add a child node to this node. For system use only. Note: normalizing adjacent text nodes is the responsibility of the caller.


removeChild

public void removeChild(int index)
Remove node at given index. Will always be followed by a renumberChildren().


renumberChildren

public void renumberChildren()
Renumber the children of a given parent node. For system use only


dropChildren

public void dropChildren()
Drop a branch of the tree. The target element remains in the tree, but its children are disconnected from the parent. Unless there are other references to the children (e.g. in a variable) they will be deleted from memory next time the garbage collector comes round.


compact

public void compact(int size)
Compact the space used by this node


getNodeValue

public java.lang.String getNodeValue()
Get the node value as defined in the DOM. This is not the same as the XPath string-value.

Specified by:
getNodeValue in interface org.w3c.dom.Node
Overrides:
getNodeValue in class AbstractNode