org.apache.xerces.impl

Class XMLDTDScannerImpl

Implemented Interfaces:
org.apache.xerces.xni.parser.XMLComponent, org.apache.xerces.xni.parser.XMLDTDScanner, XMLEntityHandler
Known Direct Subclasses:
XML11DTDScannerImpl

public class XMLDTDScannerImpl
extends XMLScanner
implements org.apache.xerces.xni.parser.XMLDTDScanner, org.apache.xerces.xni.parser.XMLComponent, XMLEntityHandler

This class is responsible for scanning the declarations found in the internal and external subsets of a DTD in an XML document. The scanner acts as the sources for the DTD information which is communicated to the DTD handlers.

This component requires the following features and properties from the component manager that uses it:

Version:
$Id: XMLDTDScannerImpl.java 377620 2006-02-14 04:56:13Z mrglavas $
Authors:
Arnaud Le Hors, IBM
Andy Clark, IBM
Glenn Marcy, IBM
Eric Ye, IBM

Field Summary

protected static int
SCANNER_STATE_END_OF_INPUT
Scanner state: end of input.
protected static int
SCANNER_STATE_MARKUP_DECL
Scanner state: markup declaration.
protected static int
SCANNER_STATE_TEXT_DECL
Scanner state: text declaration.
protected org.apache.xerces.xni.XMLDTDContentModelHandler
fDTDContentModelHandler
DTD content model handler.
protected org.apache.xerces.xni.XMLDTDHandler
fDTDHandler
DTD handler.
protected int
fScannerState
Scanner state.
protected boolean
fSeenExternalDTD
Seen external DTD.
protected boolean
fSeenExternalPE
Seen external parameter entity.
protected boolean
fStandalone
Standalone.

Fields inherited from class org.apache.xerces.impl.XMLScanner

DEBUG_ATTR_NORMALIZATION, ENTITY_MANAGER, ERROR_REPORTER, NAMESPACES, NOTIFY_CHAR_REFS, PARSER_SETTINGS, SYMBOL_TABLE, VALIDATION, fAmpSymbol, fAposSymbol, fCharRefLiteral, fEncodingSymbol, fEntityDepth, fEntityManager, fEntityScanner, fErrorReporter, fGtSymbol, fLtSymbol, fNamespaces, fNotifyCharRefs, fParserSettings, fQuotSymbol, fReportEntity, fResourceIdentifier, fScanningAttribute, fStandaloneSymbol, fSymbolTable, fValidation, fVersionSymbol

Constructor Summary

XMLDTDScannerImpl()
Default constructor.
XMLDTDScannerImpl(SymbolTable symbolTable, XMLErrorReporter errorReporter, XMLEntityManager entityManager)
Constructor for he use of non-XMLComponentManagers.

Method Summary

void
endEntity(String name, org.apache.xerces.xni.Augmentations augs)
This method notifies the end of an entity.
org.apache.xerces.xni.XMLDTDContentModelHandler
getDTDContentModelHandler()
getDTDContentModelHandler
org.apache.xerces.xni.XMLDTDHandler
getDTDHandler()
getDTDHandler
Boolean
getFeatureDefault(String featureId)
Returns the default state for a feature, or null if this component does not want to report a default value for this feature.
Object
getPropertyDefault(String propertyId)
Returns the default state for a property, or null if this component does not want to report a default value for this property.
String[]
getRecognizedFeatures()
Returns a list of feature identifiers that are recognized by this component.
String[]
getRecognizedProperties()
Returns a list of property identifiers that are recognized by this component.
void
reset()
void
reset(org.apache.xerces.xni.parser.XMLComponentManager componentManager)
reset
protected String
scanAttDefaultDecl(String elName, String atName, String type, org.apache.xerces.xni.XMLString defaultVal, org.apache.xerces.xni.XMLString nonNormalizedDefaultVal)
Scans an attribute default declaration

 [60] DefaultDecl ::= '#REQUIRED' | '#IMPLIED' | (('#FIXED' S)? AttValue)
 
protected void
scanAttlistDecl()
Scans an attlist declaration

 [52]  AttlistDecl    ::=   '<!ATTLIST' S Name AttDef* S? '>' 
 [53]  AttDef         ::=   S Name S AttType S DefaultDecl 
 

Note: Called after scanning past '<!ATTLIST'

protected void
scanComment()
Scans a comment.
boolean
scanDTDExternalSubset(boolean complete)
Scans the external subset of the document.
boolean
scanDTDInternalSubset(boolean complete, boolean standalone, boolean hasExternalSubset)
Scans the internal subset of the document.
protected boolean
scanDecls(boolean complete)
Dispatch an XML "event".
protected void
scanElementDecl()
Scans an element declaration

 [45]    elementdecl    ::=    '<!ELEMENT' S Name S contentspec S? '>'
 [46]    contentspec    ::=    'EMPTY' | 'ANY' | Mixed | children  
 

Note: Called after scanning past '<!ELEMENT'

protected void
scanEntityValue(org.apache.xerces.xni.XMLString value, org.apache.xerces.xni.XMLString nonNormalizedValue)
Scans an entity value.
protected void
scanPIData(String target, org.apache.xerces.xni.XMLString data)
Scans a processing data.
protected boolean
scanTextDecl()
Dispatch an XML "event".
protected boolean
scanningInternalSubset()
void
setDTDContentModelHandler(org.apache.xerces.xni.XMLDTDContentModelHandler dtdContentModelHandler)
setDTDContentModelHandler
void
setDTDHandler(org.apache.xerces.xni.XMLDTDHandler dtdHandler)
setDTDHandler
void
setInputSource(org.apache.xerces.xni.parser.XMLInputSource inputSource)
Sets the input source.
protected void
setScannerState(int state)
Sets the scanner state.
void
startEntity(String name, org.apache.xerces.xni.XMLResourceIdentifier identifier, String encoding, org.apache.xerces.xni.Augmentations augs)
This method notifies of the start of an entity.
protected void
startPE(String name, boolean literal)
start a parameter entity dealing with the textdecl if there is any

Methods inherited from class org.apache.xerces.impl.XMLScanner

endEntity, getFeature, getVersionNotSupportedKey, isInvalid, isInvalidLiteral, isUnchangedByNormalization, isValidNCName, isValidNameChar, isValidNameStartChar, isValidNameStartHighSurrogate, normalizeWhitespace, normalizeWhitespace, reportFatalError, reset, reset, scanAttributeValue, scanCharReferenceValue, scanComment, scanExternalID, scanPI, scanPIData, scanPseudoAttribute, scanPubidLiteral, scanSurrogates, scanXMLDeclOrTextDecl, setFeature, setProperty, startEntity, versionSupported

Field Details

SCANNER_STATE_END_OF_INPUT

protected static final int SCANNER_STATE_END_OF_INPUT
Scanner state: end of input.
Field Value:
0

SCANNER_STATE_MARKUP_DECL

protected static final int SCANNER_STATE_MARKUP_DECL
Scanner state: markup declaration.
Field Value:
2

SCANNER_STATE_TEXT_DECL

protected static final int SCANNER_STATE_TEXT_DECL
Scanner state: text declaration.
Field Value:
1

fDTDContentModelHandler

protected org.apache.xerces.xni.XMLDTDContentModelHandler fDTDContentModelHandler
DTD content model handler.

fDTDHandler

protected org.apache.xerces.xni.XMLDTDHandler fDTDHandler
DTD handler.

fScannerState

protected int fScannerState
Scanner state.

fSeenExternalDTD

protected boolean fSeenExternalDTD
Seen external DTD.

fSeenExternalPE

protected boolean fSeenExternalPE
Seen external parameter entity.

fStandalone

protected boolean fStandalone
Standalone.

Constructor Details

XMLDTDScannerImpl

public XMLDTDScannerImpl()
Default constructor.

XMLDTDScannerImpl

public XMLDTDScannerImpl(SymbolTable symbolTable,
                         XMLErrorReporter errorReporter,
                         XMLEntityManager entityManager)
Constructor for he use of non-XMLComponentManagers.

Method Details

endEntity

public void endEntity(String name,
                      org.apache.xerces.xni.Augmentations augs)
            throws org.apache.xerces.xni.XNIException
This method notifies the end of an entity. The DTD has the pseudo-name of "[dtd]" parameter entity names start with '%'; and general entities are just specified by their name.
Specified by:
endEntity in interface XMLEntityHandler
Overrides:
endEntity in interface XMLScanner
Parameters:
name - The name of the entity.
augs - Additional information that may include infoset augmentations
Throws:
org.apache.xerces.xni.XNIException - Thrown by handler to signal an error.

getDTDContentModelHandler

public org.apache.xerces.xni.XMLDTDContentModelHandler getDTDContentModelHandler()
getDTDContentModelHandler
Specified by:
getDTDContentModelHandler in interface org.apache.xerces.xni.parser.XMLDTDContentModelSource
Returns:
XMLDTDContentModelHandler

getDTDHandler

public org.apache.xerces.xni.XMLDTDHandler getDTDHandler()
getDTDHandler
Specified by:
getDTDHandler in interface org.apache.xerces.xni.parser.XMLDTDSource
Returns:
the XMLDTDHandler

getFeatureDefault

public Boolean getFeatureDefault(String featureId)
Returns the default state for a feature, or null if this component does not want to report a default value for this feature.
Specified by:
getFeatureDefault in interface org.apache.xerces.xni.parser.XMLComponent
Parameters:
featureId - The feature identifier.
Since:
Xerces 2.2.0

getPropertyDefault

public Object getPropertyDefault(String propertyId)
Returns the default state for a property, or null if this component does not want to report a default value for this property.
Specified by:
getPropertyDefault in interface org.apache.xerces.xni.parser.XMLComponent
Parameters:
propertyId - The property identifier.
Since:
Xerces 2.2.0

getRecognizedFeatures

public String[] getRecognizedFeatures()
Returns a list of feature identifiers that are recognized by this component. This method may return null if no features are recognized by this component.
Specified by:
getRecognizedFeatures in interface org.apache.xerces.xni.parser.XMLComponent

getRecognizedProperties

public String[] getRecognizedProperties()
Returns a list of property identifiers that are recognized by this component. This method may return null if no properties are recognized by this component.
Specified by:
getRecognizedProperties in interface org.apache.xerces.xni.parser.XMLComponent

reset

public void reset()
Overrides:
reset in interface XMLScanner

reset

public void reset(org.apache.xerces.xni.parser.XMLComponentManager componentManager)
            throws org.apache.xerces.xni.parser.XMLConfigurationException
reset
Specified by:
reset in interface org.apache.xerces.xni.parser.XMLComponent
Overrides:
reset in interface XMLScanner
Parameters:
componentManager -

scanAttDefaultDecl

protected final String scanAttDefaultDecl(String elName,
                                          String atName,
                                          String type,
                                          org.apache.xerces.xni.XMLString defaultVal,
                                          org.apache.xerces.xni.XMLString nonNormalizedDefaultVal)
            throws IOException,
                   org.apache.xerces.xni.XNIException
Scans an attribute default declaration

 [60] DefaultDecl ::= '#REQUIRED' | '#IMPLIED' | (('#FIXED' S)? AttValue)
 
Parameters:
defaultVal - The string to fill in with the default value.

scanAttlistDecl

protected final void scanAttlistDecl()
            throws IOException,
                   org.apache.xerces.xni.XNIException
Scans an attlist declaration

 [52]  AttlistDecl    ::=   '<!ATTLIST' S Name AttDef* S? '>' 
 [53]  AttDef         ::=   S Name S AttType S DefaultDecl 
 

Note: Called after scanning past '<!ATTLIST'


scanComment

protected final void scanComment()
            throws IOException,
                   org.apache.xerces.xni.XNIException
Scans a comment.

 [15] Comment ::= '<!--' ((Char - '-') | ('-' (Char - '-')))* '-->'
 

Note: Called after scanning past '<!--'


scanDTDExternalSubset

public boolean scanDTDExternalSubset(boolean complete)
            throws IOException,
                   org.apache.xerces.xni.XNIException
Scans the external subset of the document.
Specified by:
scanDTDExternalSubset in interface org.apache.xerces.xni.parser.XMLDTDScanner
Parameters:
complete - True if the scanner should scan the document completely, pushing all events to the registered document handler. A value of false indicates that that the scanner should only scan the next portion of the document and return. A scanner instance is permitted to completely scan a document if it does not support this "pull" scanning model.
Returns:
True if there is more to scan, false otherwise.

scanDTDInternalSubset

public boolean scanDTDInternalSubset(boolean complete,
                                     boolean standalone,
                                     boolean hasExternalSubset)
            throws IOException,
                   org.apache.xerces.xni.XNIException
Scans the internal subset of the document.
Specified by:
scanDTDInternalSubset in interface org.apache.xerces.xni.parser.XMLDTDScanner
Parameters:
complete - True if the scanner should scan the document completely, pushing all events to the registered document handler. A value of false indicates that that the scanner should only scan the next portion of the document and return. A scanner instance is permitted to completely scan a document if it does not support this "pull" scanning model.
standalone - True if the document was specified as standalone. This value is important for verifying certain well-formedness constraints.
Returns:
True if there is more to scan, false otherwise.

scanDecls

protected final boolean scanDecls(boolean complete)
            throws IOException,
                   org.apache.xerces.xni.XNIException
Dispatch an XML "event".
Parameters:
complete - True if this method is intended to scan and dispatch as much as possible.
Returns:
True if there is more to scan.
Throws:
org.apache.xerces.xni.XNIException - Thrown on parse error.

scanElementDecl

protected final void scanElementDecl()
            throws IOException,
                   org.apache.xerces.xni.XNIException
Scans an element declaration

 [45]    elementdecl    ::=    '<!ELEMENT' S Name S contentspec S? '>'
 [46]    contentspec    ::=    'EMPTY' | 'ANY' | Mixed | children  
 

Note: Called after scanning past '<!ELEMENT'


scanEntityValue

protected final void scanEntityValue(org.apache.xerces.xni.XMLString value,
                                     org.apache.xerces.xni.XMLString nonNormalizedValue)
            throws IOException,
                   org.apache.xerces.xni.XNIException
Scans an entity value.
Parameters:
value - The string to fill in with the value.
nonNormalizedValue - The string to fill in with the non-normalized value. Note: This method uses fString, fStringBuffer (through the use of scanCharReferenceValue), and fStringBuffer2, anything in them at the time of calling is lost.

scanPIData

protected final void scanPIData(String target,
                                org.apache.xerces.xni.XMLString data)
            throws IOException,
                   org.apache.xerces.xni.XNIException
Scans a processing data. This is needed to handle the situation where a document starts with a processing instruction whose target name starts with "xml". (e.g. xmlfoo)
Overrides:
scanPIData in interface XMLScanner
Parameters:
target - The PI target
data - The string to fill in with the data

scanTextDecl

protected final boolean scanTextDecl()
            throws IOException,
                   org.apache.xerces.xni.XNIException
Dispatch an XML "event".
Parameters:
Returns:
True if a TextDecl was scanned.
Throws:
org.apache.xerces.xni.XNIException - Thrown on parse error.

scanningInternalSubset

protected final boolean scanningInternalSubset()

setDTDContentModelHandler

public void setDTDContentModelHandler(org.apache.xerces.xni.XMLDTDContentModelHandler dtdContentModelHandler)
setDTDContentModelHandler
Specified by:
setDTDContentModelHandler in interface org.apache.xerces.xni.parser.XMLDTDContentModelSource
Parameters:
dtdContentModelHandler -

setDTDHandler

public void setDTDHandler(org.apache.xerces.xni.XMLDTDHandler dtdHandler)
setDTDHandler
Specified by:
setDTDHandler in interface org.apache.xerces.xni.parser.XMLDTDSource
Parameters:
dtdHandler -

setInputSource

public void setInputSource(org.apache.xerces.xni.parser.XMLInputSource inputSource)
            throws IOException
Sets the input source.
Specified by:
setInputSource in interface org.apache.xerces.xni.parser.XMLDTDScanner
Parameters:
inputSource - The input source or null.

setScannerState

protected final void setScannerState(int state)
Sets the scanner state.
Parameters:
state - The new scanner state.

startEntity

public void startEntity(String name,
                        org.apache.xerces.xni.XMLResourceIdentifier identifier,
                        String encoding,
                        org.apache.xerces.xni.Augmentations augs)
            throws org.apache.xerces.xni.XNIException
This method notifies of the start of an entity. The DTD has the pseudo-name of "[dtd]" parameter entity names start with '%'; and general entities are just specified by their name.
Specified by:
startEntity in interface XMLEntityHandler
Overrides:
startEntity in interface XMLScanner
Parameters:
name - The name of the entity.
identifier - The resource identifier.
encoding - The auto-detected IANA encoding name of the entity stream. This value will be null in those situations where the entity encoding is not auto-detected (e.g. internal entities or a document entity that is parsed from a java.io.Reader).
augs - Additional information that may include infoset augmentations
Throws:
org.apache.xerces.xni.XNIException - Thrown by handler to signal an error.

startPE

protected void startPE(String name,
                       boolean literal)
            throws IOException,
                   org.apache.xerces.xni.XNIException
start a parameter entity dealing with the textdecl if there is any
Parameters:
name - The name of the parameter entity to start (without the '%')
literal - Whether this is happening within a literal

Copyright B) 1999-2006 The Apache Software Foundation. All Rights Reserved.