org.apache.xalan.processor

Class StylesheetHandler

public class StylesheetHandler extends DefaultHandler implements TemplatesHandler, PrefixResolver, NodeConsumer

Initializes and processes a stylesheet via SAX events. This class acts as essentially a state machine, maintaining a ContentHandler stack, and pushing appropriate content handlers as parse events occur.

UNKNOWN: advanced

Field Summary
static intSTYPE_IMPORT
If getStylesheetType returns this value, the current stylesheet is an imported stylesheet.
static intSTYPE_INCLUDE
If getStylesheetType returns this value, the current stylesheet is an included stylesheet.
static intSTYPE_ROOT
If getStylesheetType returns this value, the current stylesheet is a root stylesheet.
Constructor Summary
StylesheetHandler(TransformerFactoryImpl processor)
Create a StylesheetHandler object, creating a root stylesheet as the target.
Method Summary
voidcharacters(char[] ch, int start, int length)
Receive notification of character data inside an element.
XPathcreateXPath(String str, ElemTemplateElement owningTemplate)
Process an expression string into an XPath.
voidendDocument()
Receive notification of the end of the document.
voidendElement(String uri, String localName, String rawName)
Receive notification of the end of an element.
voidendPrefixMapping(String prefix)
Receive notification of the end of a Namespace mapping.
voiderror(SAXParseException e)
Receive notification of a recoverable XSLT processing error.
voidfatalError(SAXParseException e)
Report a fatal XSLT processing error.
StringgetBaseIdentifier()
Return the base identifier.
booleangetIncremental()
SAXSourceLocatorgetLocator()
Get the current stylesheet Locator object.
StringgetNamespaceForPrefix(String prefix)
Given a namespace, get the corrisponding prefix from the current namespace support context.
StringgetNamespaceForPrefix(String prefix, Node context)
Given a namespace, get the corrisponding prefix.
booleangetOptimize()
NodegetOriginatingNode()
Set the node that is originating the SAX event.
XSLTSchemagetSchema()
Get the root of the XSLT Schema, which tells us how to transition content handlers, create elements, etc.
booleangetSource_location()
TransformerFactoryImplgetStylesheetProcessor()
Get the XSLT TransformerFactoryImpl for needed services.
StylesheetRootgetStylesheetRoot()
Return the stylesheet root that this handler is constructing.
StringgetSystemId()
Get the base ID (URI or system ID) from where relative URLs will be resolved.
TemplatesgetTemplates()
When this object is used as a ContentHandler or ContentHandler, it will create a Templates object, which the caller can get once the SAX events have been completed.
booleanhandlesNullPrefixes()
voidignorableWhitespace(char[] ch, int start, int length)
Receive notification of ignorable whitespace in element content.
booleanisStylesheetParsingComplete()
Test whether the _last_ endDocument() has been processed.
voidnotationDecl(String name, String publicId, String systemId)
Receive notification of a notation declaration.
voidprocessingInstruction(String target, String data)
Receive notification of a processing instruction.
voidpushStylesheet(Stylesheet s)
Push the current stylesheet being constructed.
InputSourceresolveEntity(String publicId, String systemId)
Resolve an external entity.
voidsetDocumentLocator(Locator locator)
Receive a Locator object for document events.
voidsetOriginatingNode(Node n)
Set the node that is originating the SAX event.
voidsetSystemId(String baseID)
Set the base ID (URL or system ID) for the stylesheet created by this builder.
voidskippedEntity(String name)
Receive notification of a skipped entity.
voidstartDocument()
Receive notification of the beginning of the document.
voidstartElement(String uri, String localName, String rawName, Attributes attributes)
Receive notification of the start of an element.
voidstartPrefixMapping(String prefix, String uri)
Receive notification of the start of a Namespace mapping.
voidunparsedEntityDecl(String name, String publicId, String systemId, String notationName)
Receive notification of an unparsed entity declaration.
voidwarn(String msg, Object[] args)
Warn the user of an problem.
voidwarning(SAXParseException e)
Receive notification of a XSLT processing warning.

Field Detail

STYPE_IMPORT

public static final int STYPE_IMPORT
If getStylesheetType returns this value, the current stylesheet is an imported stylesheet.

UNKNOWN: internal

STYPE_INCLUDE

public static final int STYPE_INCLUDE
If getStylesheetType returns this value, the current stylesheet is an included stylesheet.

UNKNOWN: internal

STYPE_ROOT

public static final int STYPE_ROOT
If getStylesheetType returns this value, the current stylesheet is a root stylesheet.

UNKNOWN: internal

Constructor Detail

StylesheetHandler

public StylesheetHandler(TransformerFactoryImpl processor)
Create a StylesheetHandler object, creating a root stylesheet as the target.

Parameters: processor non-null reference to the transformer factory that owns this handler.

Throws: TransformerConfigurationException if a StylesheetRoot can not be constructed for some reason.

Method Detail

characters

public void characters(char[] ch, int start, int length)
Receive notification of character data inside an element.

Parameters: ch The characters. start The start position in the character array. length The number of characters to use from the character array.

Throws: org.xml.sax.SAXException Any SAX exception, possibly wrapping another exception.

See Also: org.xml.sax.ContentHandler#characters

createXPath

public XPath createXPath(String str, ElemTemplateElement owningTemplate)
Process an expression string into an XPath. Must be public for access by the AVT class.

Parameters: str A non-null reference to a valid or invalid XPath expression string.

Returns: A non-null reference to an XPath object that represents the string argument.

Throws: javax.xml.transform.TransformerException if the expression can not be processed.

See Also: Section 4 Expressions in XSLT Specification

endDocument

public void endDocument()
Receive notification of the end of the document.

Throws: org.xml.sax.SAXException Any SAX exception, possibly wrapping another exception.

See Also: org.xml.sax.ContentHandler#endDocument

endElement

public void endElement(String uri, String localName, String rawName)
Receive notification of the end of an element.

Parameters: uri The Namespace URI, or an empty string. localName The local name (without prefix), or empty string if not namespace processing. rawName The qualified name (with prefix).

Throws: org.xml.sax.SAXException Any SAX exception, possibly wrapping another exception.

See Also: org.xml.sax.ContentHandler#endElement

endPrefixMapping

public void endPrefixMapping(String prefix)
Receive notification of the end of a Namespace mapping.

By default, do nothing. Application writers may override this method in a subclass to take specific actions at the start of each element (such as allocating a new tree node or writing output to a file).

Parameters: prefix The Namespace prefix being declared.

Throws: org.xml.sax.SAXException Any SAX exception, possibly wrapping another exception.

See Also: org.xml.sax.ContentHandler#endPrefixMapping

error

public void error(SAXParseException e)
Receive notification of a recoverable XSLT processing error.

Parameters: e The error information encoded as an exception.

Throws: org.xml.sax.SAXException that wraps a javax.xml.transform.TransformerException if the current javax.xml.transform.ErrorListener#error method chooses to flag this condition as an error.

fatalError

public void fatalError(SAXParseException e)
Report a fatal XSLT processing error.

Parameters: e The error information encoded as an exception.

Throws: org.xml.sax.SAXException that wraps a javax.xml.transform.TransformerException if the current javax.xml.transform.ErrorListener#fatalError method chooses to flag this condition as an error.

getBaseIdentifier

public String getBaseIdentifier()
Return the base identifier.

Returns: The base identifier of the current stylesheet.

getIncremental

public boolean getIncremental()

Returns: Incremental flag

getLocator

public SAXSourceLocator getLocator()
Get the current stylesheet Locator object.

Returns: non-null reference to the current locator object.

getNamespaceForPrefix

public String getNamespaceForPrefix(String prefix)
Given a namespace, get the corrisponding prefix from the current namespace support context.

Parameters: prefix The prefix to look up, which may be an empty string ("") for the default Namespace.

Returns: The associated Namespace URI, or null if the prefix is undeclared in this context.

getNamespaceForPrefix

public String getNamespaceForPrefix(String prefix, Node context)
Given a namespace, get the corrisponding prefix. This is here only to support the PrefixResolver interface, and will throw an error if invoked on this object.

Parameters: prefix The prefix to look up, which may be an empty string ("") for the default Namespace. context The node context from which to look up the URI.

Returns: The associated Namespace URI, or null if the prefix is undeclared in this context.

getOptimize

public boolean getOptimize()

Returns: Optimization flag

getOriginatingNode

public Node getOriginatingNode()
Set the node that is originating the SAX event.

Returns: Reference to node that originated the current event.

See Also: NodeConsumer

getSchema

public XSLTSchema getSchema()
Get the root of the XSLT Schema, which tells us how to transition content handlers, create elements, etc.

Returns: The root XSLT Schema, which should never be null.

UNKNOWN: internal

getSource_location

public boolean getSource_location()

Returns: Source Location flag

getStylesheetProcessor

public TransformerFactoryImpl getStylesheetProcessor()
Get the XSLT TransformerFactoryImpl for needed services. TODO: This method should be renamed.

Returns: The TransformerFactoryImpl that owns this handler.

getStylesheetRoot

public StylesheetRoot getStylesheetRoot()
Return the stylesheet root that this handler is constructing.

Returns: The root stylesheet of the stylesheets tree.

getSystemId

public String getSystemId()
Get the base ID (URI or system ID) from where relative URLs will be resolved.

Returns: The systemID that was set with StylesheetHandler.

getTemplates

public Templates getTemplates()
When this object is used as a ContentHandler or ContentHandler, it will create a Templates object, which the caller can get once the SAX events have been completed.

Returns: The stylesheet object that was created during the SAX event process, or null if no stylesheet has been created. Author Scott Boag

handlesNullPrefixes

public boolean handlesNullPrefixes()

See Also: handlesNullPrefixes

ignorableWhitespace

public void ignorableWhitespace(char[] ch, int start, int length)
Receive notification of ignorable whitespace in element content.

Parameters: ch The whitespace characters. start The start position in the character array. length The number of characters to use from the character array.

Throws: org.xml.sax.SAXException Any SAX exception, possibly wrapping another exception.

See Also: org.xml.sax.ContentHandler#ignorableWhitespace

isStylesheetParsingComplete

public boolean isStylesheetParsingComplete()
Test whether the _last_ endDocument() has been processed. This is needed as guidance for stylesheet optimization and compilation engines, which generally don't want to start until all included and imported stylesheets have been fully parsed.

Returns: true iff the complete stylesheet tree has been built.

notationDecl

public void notationDecl(String name, String publicId, String systemId)
Receive notification of a notation declaration.

By default, do nothing. Application writers may override this method in a subclass if they wish to keep track of the notations declared in a document.

Parameters: name The notation name. publicId The notation public identifier, or null if not available. systemId The notation system identifier.

See Also: org.xml.sax.DTDHandler#notationDecl

processingInstruction

public void processingInstruction(String target, String data)
Receive notification of a processing instruction.

The Parser will invoke this method once for each processing instruction found: note that processing instructions may occur before or after the main document element.

A SAX parser should never report an XML declaration (XML 1.0, section 2.8) or a text declaration (XML 1.0, section 4.3.1) using this method.

By default, do nothing. Application writers may override this method in a subclass to take specific actions for each processing instruction, such as setting status variables or invoking other methods.

Parameters: target The processing instruction target. data The processing instruction data, or null if none is supplied.

Throws: org.xml.sax.SAXException Any SAX exception, possibly wrapping another exception.

See Also: org.xml.sax.ContentHandler#processingInstruction

pushStylesheet

public void pushStylesheet(Stylesheet s)
Push the current stylesheet being constructed. If no other stylesheets have been pushed onto the stack, assume the argument is a stylesheet root, and also set the stylesheet root member.

Parameters: s non-null reference to a stylesheet.

resolveEntity

public InputSource resolveEntity(String publicId, String systemId)
Resolve an external entity.

Parameters: publicId The public identifer, or null if none is available. systemId The system identifier provided in the XML document.

Returns: The new input source, or null to require the default behaviour.

Throws: org.xml.sax.SAXException if the entity can not be resolved.

setDocumentLocator

public void setDocumentLocator(Locator locator)
Receive a Locator object for document events. This is called by the parser to push a locator for the stylesheet being parsed. The stack needs to be popped after the stylesheet has been parsed. We pop in popStylesheet.

Parameters: locator A locator for all SAX document events.

See Also: org.xml.sax.ContentHandler#setDocumentLocator org.xml.sax.Locator

setOriginatingNode

public void setOriginatingNode(Node n)
Set the node that is originating the SAX event.

Parameters: n Reference to node that originated the current event.

See Also: NodeConsumer

setSystemId

public void setSystemId(String baseID)
Set the base ID (URL or system ID) for the stylesheet created by this builder. This must be set in order to resolve relative URLs in the stylesheet.

Parameters: baseID Base URL for this stylesheet.

skippedEntity

public void skippedEntity(String name)
Receive notification of a skipped entity.

By default, do nothing. Application writers may override this method in a subclass to take specific actions for each processing instruction, such as setting status variables or invoking other methods.

Parameters: name The name of the skipped entity.

Throws: org.xml.sax.SAXException Any SAX exception, possibly wrapping another exception.

See Also: org.xml.sax.ContentHandler#processingInstruction

startDocument

public void startDocument()
Receive notification of the beginning of the document.

Throws: org.xml.sax.SAXException Any SAX exception, possibly wrapping another exception.

See Also: org.xml.sax.ContentHandler#startDocument

startElement

public void startElement(String uri, String localName, String rawName, Attributes attributes)
Receive notification of the start of an element.

Parameters: uri The Namespace URI, or an empty string. localName The local name (without prefix), or empty string if not namespace processing. rawName The qualified name (with prefix). attributes The specified or defaulted attributes.

Throws: org.xml.sax.SAXException

startPrefixMapping

public void startPrefixMapping(String prefix, String uri)
Receive notification of the start of a Namespace mapping.

By default, do nothing. Application writers may override this method in a subclass to take specific actions at the start of each element (such as allocating a new tree node or writing output to a file).

Parameters: prefix The Namespace prefix being declared. uri The Namespace URI mapped to the prefix.

Throws: org.xml.sax.SAXException Any SAX exception, possibly wrapping another exception.

See Also: org.xml.sax.ContentHandler#startPrefixMapping

unparsedEntityDecl

public void unparsedEntityDecl(String name, String publicId, String systemId, String notationName)
Receive notification of an unparsed entity declaration.

Parameters: name The entity name. publicId The entity public identifier, or null if not available. systemId The entity system identifier. notationName The name of the associated notation.

See Also: org.xml.sax.DTDHandler#unparsedEntityDecl

warn

public void warn(String msg, Object[] args)
Warn the user of an problem.

Parameters: msg An key into the XSLTErrorResources table, that is one of the WG_ prefixed definitions. args An array of arguments for the given warning.

Throws: org.xml.sax.SAXException that wraps a javax.xml.transform.TransformerException if the current javax.xml.transform.ErrorListener#warning method chooses to flag this condition as an error.

UNKNOWN: internal

warning

public void warning(SAXParseException e)
Receive notification of a XSLT processing warning.

Parameters: e The warning information encoded as an exception.

Throws: org.xml.sax.SAXException that wraps a javax.xml.transform.TransformerException if the current javax.xml.transform.ErrorListener#warning method chooses to flag this condition as an error.

Copyright B) 2005 Apache XML Project. All Rights Reserved.