fi.iki.hsivonen.gnu.xml.aelfred2
Class SAXDriver

java.lang.Object
  extended by fi.iki.hsivonen.gnu.xml.aelfred2.SAXDriver
All Implemented Interfaces:
AttributeList, Attributes, Attributes2, Locator, Parser, XMLReader

public final class SAXDriver
extends Object
implements Locator, Attributes2, XMLReader, Parser, AttributeList

An enhanced SAX2 version of Microstar's Ælfred XML parser. The enhancements primarily relate to significant improvements in conformance to the XML specification, and SAX2 support. Performance has been improved. See the package level documentation for more information.

Name Notes
Features ... URL prefix is http://xml.org/sax/features/
(URL)/external-general-entities Value defaults to true
(URL)/external-parameter-entities Value defaults to true
(URL)/is-standalone (PRELIMINARY) Returns true iff the document's parsing has started (some non-error event after startDocument() was reported) and the document's standalone flag is set.
(URL)/namespace-prefixes Value defaults to false (but XML 1.0 names are always reported)
(URL)/lexical-handler/parameter-entities Value is fixed at true
(URL)/namespaces Value defaults to true
(URL)/resolve-dtd-uris (PRELIMINARY) Value defaults to true
(URL)/string-interning Value is fixed at true
(URL)/use-attributes2 (PRELIMINARY) Value is fixed at true
(URL)/use-entity-resolver2 (PRELIMINARY) Value defaults to true
(URL)/validation Value is fixed at false
Handler Properties ... URL prefix is http://xml.org/sax/properties/
(URL)/declaration-handler A declaration handler may be provided.
(URL)/lexical-handler A lexical handler may be provided.

This parser currently implements the SAX1 Parser API, but it may not continue to do so in the future.

Author:
Written by David Megginson (version 1.2a from Microstar), Updated by David Brownell <dbrownell@users.sourceforge.net>
See Also:
Parser

Nested Class Summary
private static class SAXDriver.Adapter
           
private static class SAXDriver.Attribute
           
 
Field Summary
private  int attributeCount
           
private  boolean attributes
           
private  List<SAXDriver.Attribute> attributesList
           
private  DefaultHandler2 base
           
(package private)  boolean checkNormalization
           
private  ContentHandler contentHandler
           
private  DeclHandler declHandler
           
private  DTDHandler dtdHandler
           
private  String elementName
           
private  EntityResolver entityResolver
           
private  Stack<String> entityStack
           
private  ErrorHandler errorHandler
           
private  boolean extGE
           
private  boolean extPE
           
(package private) static String FEATURE
           
private  LexicalHandler lexicalHandler
           
private  boolean namespaces
           
private  String[] nsTemp
           
private  XmlParser parser
           
private  NamespaceSupport prefixStack
           
(package private) static String PROPERTY
           
private  boolean resolveAll
           
private  EntityResolver2 resolver2
           
(package private)  boolean stringInterning
           
private  boolean useResolver2
           
private  boolean xmlNames
           
 
Constructor Summary
SAXDriver()
          Constructs a SAX Parser.
 
Method Summary
(package private)  String absolutize(String baseURI, String systemId, boolean nice)
           
(package private)  void attribute(String qname, String value, boolean isSpecified)
           
(package private)  void charData(char[] ch, int start, int length)
           
(package private)  void comment(char[] ch, int start, int length)
           
private  void declarePrefix(String prefix, String uri)
           
(package private)  void doctypeDecl(String name, String publicId, String systemId)
           
(package private)  void endCDATA()
           
(package private)  void endDoctype()
           
(package private)  void endElement(String elname)
           
(package private)  void endExternalEntity(String name)
           
(package private)  void endInternalEntity(String name)
           
(package private)  void fatal(String message)
           
 int getColumnNumber()
          SAX Locator method (don't invoke on parser);
 ContentHandler getContentHandler()
          SAX2: Returns the object used to report the logical content of an XML document.
(package private)  DeclHandler getDeclHandler()
           
 DTDHandler getDTDHandler()
          SAX2: Returns the object used to process declarations related to notations and unparsed entities.
 EntityResolver getEntityResolver()
          SAX2: Returns the object used when resolving external entities during parsing (both general and parameter entities).
 ErrorHandler getErrorHandler()
          SAX2: Returns the object used to receive callbacks for XML errors of all levels (fatal, nonfatal, warning); this is never null;
(package private)  InputSource getExternalSubset(String name, String baseURI)
           
 boolean getFeature(String featureId)
          SAX2: Tells the value of the specified feature flag.
 int getIndex(String xmlName)
          SAX2 Attributes method (don't invoke on parser);
 int getIndex(String uri, String local)
          SAX2 Attributes method (don't invoke on parser);
 int getLength()
          SAX1 AttributeList, SAX2 Attributes method (don't invoke on parser);
 int getLineNumber()
          SAX Locator method (don't invoke on parser);
 String getLocalName(int index)
          SAX2 Attributes method (don't invoke on parser);
 String getName(int index)
          SAX1 AttributeList method (don't invoke on parser);
 Object getProperty(String propertyId)
          SAX2: Returns the specified property.
 String getPublicId()
          SAX Locator method (don't invoke on parser);
 String getQName(int index)
          SAX2 Attributes method (don't invoke on parser);
 String getSystemId()
          SAX Locator method (don't invoke on parser);
 String getType(int index)
          SAX1 AttributeList, SAX2 Attributes method (don't invoke on parser);
 String getType(String xmlName)
          SAX1 AttributeList, SAX2 Attributes method (don't invoke on parser);
 String getType(String uri, String local)
          SAX2 Attributes method (don't invoke on parser);
 String getURI(int index)
          SAX2 Attributes method (don't invoke on parser);
 String getValue(int index)
          SAX1 AttributeList, SAX2 Attributes method (don't invoke on parser);
 String getValue(String xmlName)
          SAX1 AttributeList, SAX2 Attributes method (don't invoke on parser);
 String getValue(String uri, String local)
          SAX Attributes method (don't invoke on parser);
(package private)  void ignorableWhitespace(char[] ch, int start, int length)
           
 boolean isDeclared(int index)
           
 boolean isDeclared(String qName)
           
 boolean isDeclared(String uri, String localName)
           
 boolean isSpecified(int index)
          SAX-ext Attributes2 method (don't invoke on parser);
 boolean isSpecified(String xmlName)
          SAX-ext Attributes2 method (don't invoke on parser);
 boolean isSpecified(String uri, String local)
          SAX-ext Attributes2 method (don't invoke on parser);
(package private)  void notationDecl(String name, String publicId, String systemId, String baseUri)
           
 void parse(InputSource source)
          SAX1, SAX2: Auxiliary API to parse an XML document, used mostly when no URI is available.
 void parse(String systemId)
          SAX1, SAX2: Preferred API to parse an XML document, using a system identifier (URI).
(package private)  void processingInstruction(String target, String data)
           
private  void reset()
           
(package private)  InputSource resolveEntity(boolean isPE, String name, InputSource in, String baseURI)
           
(package private)  boolean resolveURIs()
           
 void setContentHandler(ContentHandler handler)
          SAX2: Assigns the object used to report the logical content of an XML document.
 void setDocumentHandler(DocumentHandler handler)
          Deprecated. SAX2 programs should use the XMLReader interface and a ContentHandler.
 void setDTDHandler(DTDHandler handler)
          SAX1, SAX2: Set the DTD handler for this parser.
 void setEntityResolver(EntityResolver resolver)
          SAX1, SAX2: Set the entity resolver for this parser.
 void setErrorHandler(ErrorHandler handler)
          SAX1, SAX2: Set the error handler for this parser.
 void setFeature(String featureId, boolean value)
          SAX2: Sets the state of feature flags in this parser.
 void setLocale(Locale locale)
          SAX1: Sets the locale used for diagnostics; currently, only locales using the English language are supported.
 void setProperty(String propertyId, Object value)
          SAX2: Assigns the specified property.
(package private)  void skippedEntity(String name)
           
(package private)  void startCDATA()
           
(package private)  void startDocument()
           
(package private)  void startElement(String elname)
           
(package private)  void startExternalEntity(String name, String systemId, boolean stackOnly)
           
(package private)  void startInternalEntity(String name)
           
(package private)  void unparsedEntityDecl(String name, String publicId, String systemId, String baseUri, String notation)
           
(package private)  void verror(String message)
           
(package private)  void warn(String message)
           
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

base

private final DefaultHandler2 base

parser

private XmlParser parser

entityResolver

private EntityResolver entityResolver

resolver2

private EntityResolver2 resolver2

contentHandler

private ContentHandler contentHandler

dtdHandler

private DTDHandler dtdHandler

errorHandler

private ErrorHandler errorHandler

declHandler

private DeclHandler declHandler

lexicalHandler

private LexicalHandler lexicalHandler

elementName

private String elementName

entityStack

private Stack<String> entityStack

attributesList

private List<SAXDriver.Attribute> attributesList

namespaces

private boolean namespaces

xmlNames

private boolean xmlNames

extGE

private boolean extGE

extPE

private boolean extPE

resolveAll

private boolean resolveAll

useResolver2

private boolean useResolver2

stringInterning

boolean stringInterning

attributeCount

private int attributeCount

attributes

private boolean attributes

nsTemp

private String[] nsTemp

prefixStack

private NamespaceSupport prefixStack

checkNormalization

boolean checkNormalization

FEATURE

static final String FEATURE
See Also:
Constant Field Values

PROPERTY

static final String PROPERTY
See Also:
Constant Field Values
Constructor Detail

SAXDriver

public SAXDriver()
Constructs a SAX Parser.

Method Detail

reset

private void reset()

setLocale

public void setLocale(Locale locale)
               throws SAXException
SAX1: Sets the locale used for diagnostics; currently, only locales using the English language are supported.

Specified by:
setLocale in interface Parser
Parameters:
locale - The locale for which diagnostics will be generated
Throws:
SAXException

getEntityResolver

public EntityResolver getEntityResolver()
SAX2: Returns the object used when resolving external entities during parsing (both general and parameter entities).

Specified by:
getEntityResolver in interface XMLReader

setEntityResolver

public void setEntityResolver(EntityResolver resolver)
SAX1, SAX2: Set the entity resolver for this parser.

Specified by:
setEntityResolver in interface Parser
Specified by:
setEntityResolver in interface XMLReader
Parameters:
handler - The object to receive entity events.

getDTDHandler

public DTDHandler getDTDHandler()
SAX2: Returns the object used to process declarations related to notations and unparsed entities.

Specified by:
getDTDHandler in interface XMLReader

setDTDHandler

public void setDTDHandler(DTDHandler handler)
SAX1, SAX2: Set the DTD handler for this parser.

Specified by:
setDTDHandler in interface Parser
Specified by:
setDTDHandler in interface XMLReader
Parameters:
handler - The object to receive DTD events.

setDocumentHandler

public void setDocumentHandler(DocumentHandler handler)
Deprecated. SAX2 programs should use the XMLReader interface and a ContentHandler.

SAX1: Set the document handler for this parser. If a content handler was set, this document handler will supplant it. The parser is set to report all XML 1.0 names rather than to filter out "xmlns" attributes (the "namespace-prefixes" feature is set to true).

Specified by:
setDocumentHandler in interface Parser
Parameters:
handler - The object to receive document events.

getContentHandler

public ContentHandler getContentHandler()
SAX2: Returns the object used to report the logical content of an XML document.

Specified by:
getContentHandler in interface XMLReader

setContentHandler

public void setContentHandler(ContentHandler handler)
SAX2: Assigns the object used to report the logical content of an XML document. If a document handler was set, this content handler will supplant it (but XML 1.0 style name reporting may remain enabled).

Specified by:
setContentHandler in interface XMLReader

setErrorHandler

public void setErrorHandler(ErrorHandler handler)
SAX1, SAX2: Set the error handler for this parser.

Specified by:
setErrorHandler in interface Parser
Specified by:
setErrorHandler in interface XMLReader
Parameters:
handler - The object to receive error events.

getErrorHandler

public ErrorHandler getErrorHandler()
SAX2: Returns the object used to receive callbacks for XML errors of all levels (fatal, nonfatal, warning); this is never null;

Specified by:
getErrorHandler in interface XMLReader

parse

public void parse(InputSource source)
           throws SAXException,
                  IOException
SAX1, SAX2: Auxiliary API to parse an XML document, used mostly when no URI is available. If you want anything useful to happen, you should set at least one type of handler.

Specified by:
parse in interface Parser
Specified by:
parse in interface XMLReader
Parameters:
source - The XML input source. Don't set 'encoding' unless you know for a fact that it's correct.
Throws:
SAXException - The handlers may throw any SAXException, and the parser normally throws SAXParseException objects.
IOException - IOExceptions are normally through through the parser if there are problems reading the source document.
See Also:
setEntityResolver(org.xml.sax.EntityResolver), setDTDHandler(org.xml.sax.DTDHandler), setContentHandler(org.xml.sax.ContentHandler), setErrorHandler(org.xml.sax.ErrorHandler)

parse

public void parse(String systemId)
           throws SAXException,
                  IOException
SAX1, SAX2: Preferred API to parse an XML document, using a system identifier (URI).

Specified by:
parse in interface Parser
Specified by:
parse in interface XMLReader
Throws:
SAXException
IOException

getFeature

public boolean getFeature(String featureId)
                   throws SAXNotRecognizedException,
                          SAXNotSupportedException
SAX2: Tells the value of the specified feature flag.

Specified by:
getFeature in interface XMLReader
Throws:
SAXNotRecognizedException - thrown if the feature flag is neither built in, nor yet assigned.
SAXNotSupportedException

getDeclHandler

DeclHandler getDeclHandler()

resolveURIs

boolean resolveURIs()

getProperty

public Object getProperty(String propertyId)
                   throws SAXNotRecognizedException
SAX2: Returns the specified property.

Specified by:
getProperty in interface XMLReader
Throws:
SAXNotRecognizedException - thrown if the property value is neither built in, nor yet stored.

setFeature

public void setFeature(String featureId,
                       boolean value)
                throws SAXNotRecognizedException,
                       SAXNotSupportedException
SAX2: Sets the state of feature flags in this parser. Some built-in feature flags are mutable.

Specified by:
setFeature in interface XMLReader
Throws:
SAXNotRecognizedException
SAXNotSupportedException

setProperty

public void setProperty(String propertyId,
                        Object value)
                 throws SAXNotRecognizedException,
                        SAXNotSupportedException
SAX2: Assigns the specified property. Like SAX1 handlers, these may be changed at any time.

Specified by:
setProperty in interface XMLReader
Throws:
SAXNotRecognizedException
SAXNotSupportedException

startDocument

void startDocument()
             throws SAXException
Throws:
SAXException

skippedEntity

void skippedEntity(String name)
             throws SAXException
Throws:
SAXException

getExternalSubset

InputSource getExternalSubset(String name,
                              String baseURI)
                        throws SAXException,
                               IOException
Throws:
SAXException
IOException

resolveEntity

InputSource resolveEntity(boolean isPE,
                          String name,
                          InputSource in,
                          String baseURI)
                    throws SAXException,
                           IOException
Throws:
SAXException
IOException

absolutize

String absolutize(String baseURI,
                  String systemId,
                  boolean nice)
            throws MalformedURLException,
                   SAXException
Throws:
MalformedURLException
SAXException

startExternalEntity

void startExternalEntity(String name,
                         String systemId,
                         boolean stackOnly)
                   throws SAXException
Throws:
SAXException

endExternalEntity

void endExternalEntity(String name)
                 throws SAXException
Throws:
SAXException

startInternalEntity

void startInternalEntity(String name)
                   throws SAXException
Throws:
SAXException

endInternalEntity

void endInternalEntity(String name)
                 throws SAXException
Throws:
SAXException

doctypeDecl

void doctypeDecl(String name,
                 String publicId,
                 String systemId)
           throws SAXException
Throws:
SAXException

notationDecl

void notationDecl(String name,
                  String publicId,
                  String systemId,
                  String baseUri)
            throws SAXException
Throws:
SAXException

unparsedEntityDecl

void unparsedEntityDecl(String name,
                        String publicId,
                        String systemId,
                        String baseUri,
                        String notation)
                  throws SAXException
Throws:
SAXException

endDoctype

void endDoctype()
          throws SAXException
Throws:
SAXException

declarePrefix

private void declarePrefix(String prefix,
                           String uri)
                    throws SAXException
Throws:
SAXException

attribute

void attribute(String qname,
               String value,
               boolean isSpecified)
         throws SAXException
Throws:
SAXException

startElement

void startElement(String elname)
            throws SAXException
Throws:
SAXException

endElement

void endElement(String elname)
          throws SAXException
Throws:
SAXException

startCDATA

void startCDATA()
          throws SAXException
Throws:
SAXException

charData

void charData(char[] ch,
              int start,
              int length)
        throws SAXException
Throws:
SAXException

endCDATA

void endCDATA()
        throws SAXException
Throws:
SAXException

ignorableWhitespace

void ignorableWhitespace(char[] ch,
                         int start,
                         int length)
                   throws SAXException
Throws:
SAXException

processingInstruction

void processingInstruction(String target,
                           String data)
                     throws SAXException
Throws:
SAXException

comment

void comment(char[] ch,
             int start,
             int length)
       throws SAXException
Throws:
SAXException

fatal

void fatal(String message)
     throws SAXException
Throws:
SAXException

verror

void verror(String message)
      throws SAXException
Throws:
SAXException

warn

void warn(String message)
    throws SAXException
Throws:
SAXException

getLength

public int getLength()
SAX1 AttributeList, SAX2 Attributes method (don't invoke on parser);

Specified by:
getLength in interface AttributeList
Specified by:
getLength in interface Attributes

getURI

public String getURI(int index)
SAX2 Attributes method (don't invoke on parser);

Specified by:
getURI in interface Attributes

getLocalName

public String getLocalName(int index)
SAX2 Attributes method (don't invoke on parser);

Specified by:
getLocalName in interface Attributes

getQName

public String getQName(int index)
SAX2 Attributes method (don't invoke on parser);

Specified by:
getQName in interface Attributes

getName

public String getName(int index)
SAX1 AttributeList method (don't invoke on parser);

Specified by:
getName in interface AttributeList

getType

public String getType(int index)
SAX1 AttributeList, SAX2 Attributes method (don't invoke on parser);

Specified by:
getType in interface AttributeList
Specified by:
getType in interface Attributes

getValue

public String getValue(int index)
SAX1 AttributeList, SAX2 Attributes method (don't invoke on parser);

Specified by:
getValue in interface AttributeList
Specified by:
getValue in interface Attributes

getIndex

public int getIndex(String uri,
                    String local)
SAX2 Attributes method (don't invoke on parser);

Specified by:
getIndex in interface Attributes

getIndex

public int getIndex(String xmlName)
SAX2 Attributes method (don't invoke on parser);

Specified by:
getIndex in interface Attributes

getType

public String getType(String uri,
                      String local)
SAX2 Attributes method (don't invoke on parser);

Specified by:
getType in interface Attributes

getType

public String getType(String xmlName)
SAX1 AttributeList, SAX2 Attributes method (don't invoke on parser);

Specified by:
getType in interface AttributeList
Specified by:
getType in interface Attributes

getValue

public String getValue(String uri,
                       String local)
SAX Attributes method (don't invoke on parser);

Specified by:
getValue in interface Attributes

getValue

public String getValue(String xmlName)
SAX1 AttributeList, SAX2 Attributes method (don't invoke on parser);

Specified by:
getValue in interface AttributeList
Specified by:
getValue in interface Attributes

isDeclared

public boolean isDeclared(int index)
Specified by:
isDeclared in interface Attributes2
Returns:
false unless the attribute was declared in the DTD.
Throws:
ArrayIndexOutOfBoundsException - When the supplied index does not identify an attribute.

isDeclared

public boolean isDeclared(String qName)
Specified by:
isDeclared in interface Attributes2
Returns:
false unless the attribute was declared in the DTD.
Throws:
IllegalArgumentException - When the supplied names do not identify an attribute.

isDeclared

public boolean isDeclared(String uri,
                          String localName)
Specified by:
isDeclared in interface Attributes2
Returns:
false unless the attribute was declared in the DTD.
Throws:
IllegalArgumentException - When the supplied names do not identify an attribute.

isSpecified

public boolean isSpecified(int index)
SAX-ext Attributes2 method (don't invoke on parser);

Specified by:
isSpecified in interface Attributes2

isSpecified

public boolean isSpecified(String uri,
                           String local)
SAX-ext Attributes2 method (don't invoke on parser);

Specified by:
isSpecified in interface Attributes2

isSpecified

public boolean isSpecified(String xmlName)
SAX-ext Attributes2 method (don't invoke on parser);

Specified by:
isSpecified in interface Attributes2

getPublicId

public String getPublicId()
SAX Locator method (don't invoke on parser);

Specified by:
getPublicId in interface Locator

getSystemId

public String getSystemId()
SAX Locator method (don't invoke on parser);

Specified by:
getSystemId in interface Locator

getLineNumber

public int getLineNumber()
SAX Locator method (don't invoke on parser);

Specified by:
getLineNumber in interface Locator

getColumnNumber

public int getColumnNumber()
SAX Locator method (don't invoke on parser);

Specified by:
getColumnNumber in interface Locator