XSLStyleSheet
Date: 2016-07-03

com.icl.saxon.style

## Class XSLStyleSheet

- java.lang.Object
- - com.icl.saxon.om.AbstractNode
  - - com.icl.saxon.tree.NodeImpl
    - - com.icl.saxon.tree.ElementImpl
      - - com.icl.saxon.tree.ElementWithAttributes
        - - com.icl.saxon.style.StyleElement
          - - 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

    Fields
    Modifier and Type | Field and Description
    --- | ---
    `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

    Constructors
    Constructor and Description
    `XSLStyleSheet()`

  - ### Method Summary

    Methods
    Modifier and Type | Method and Description
    --- | ---
    `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`