org.apache.xerces.impl

## Class XMLDTDScannerImpl

- java.lang.Object
- - org.apache.xerces.impl.XMLScanner
  - - org.apache.xerces.impl.XMLDTDScannerImpl

- All Implemented Interfaces:
    XMLEntityHandler, org.apache.xerces.xni.parser.XMLComponent, org.apache.xerces.xni.parser.XMLDTDContentModelSource, org.apache.xerces.xni.parser.XMLDTDScanner, org.apache.xerces.xni.parser.XMLDTDSource
  Direct Known 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:

  - http://xml.org/sax/features/validation
  - http://apache.org/xml/features/scanner/notify-char-refs
  - http://apache.org/xml/properties/internal/symbol-table
  - http://apache.org/xml/properties/internal/error-reporter
  - http://apache.org/xml/properties/internal/entity-manager
  Version:
    $Id: XMLDTDScannerImpl.java 1514807 2013-08-16 17:29:22Z mrglavas $
  Author:
    Arnaud Le Hors, IBM, Andy Clark, IBM, Glenn Marcy, IBM, Eric Ye, IBM

  # INTERNAL:

    Usage of this class is not supported. It may be altered or removed at any time.

- - ### Field Summary

    Fields
    Modifier and Type | Field and Description
    --- | ---
    `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` | `fSeenPEReferences` Seen a parameter entity reference.
    `protected boolean` | `fStandalone` Standalone.
    `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.

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

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

  - ### Constructor Summary

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

  - ### Method Summary

    Methods
    Modifier and Type | Method and Description
    --- | ---
    `void` | `endEntity(java.lang.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
    `java.lang.Boolean` | `getFeatureDefault(java.lang.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.
    `java.lang.Object` | `getPropertyDefault(java.lang.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.
    `java.lang.String[]` | `getRecognizedFeatures()` Returns a list of feature identifiers that are recognized by this component.
    `java.lang.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 java.lang.String` | `scanAttDefaultDecl(java.lang.String elName, java.lang.String atName, java.lang.String type, org.apache.xerces.xni.XMLString defaultVal, org.apache.xerces.xni.XMLString nonNormalizedDefaultVal)` Scans an attribute default declaration
    `protected void` | `scanAttlistDecl()` Scans an attlist declaration
    `protected void` | `scanComment()` Scans a comment.
    `protected boolean` | `scanDecls(boolean complete)` Dispatch an XML "event".
    `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 void` | `scanElementDecl()` Scans an element declaration
    `protected int` | `scanEntityValue(org.apache.xerces.xni.XMLString value, org.apache.xerces.xni.XMLString nonNormalizedValue)` Scans an entity value.
    `protected boolean` | `scanningInternalSubset()`
    `protected void` | `scanPIData(java.lang.String target, org.apache.xerces.xni.XMLString data)` Scans a processing data.
    `protected boolean` | `scanTextDecl()` Dispatch an XML "event".
    `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(java.lang.String name, org.apache.xerces.xni.XMLResourceIdentifier identifier, java.lang.String encoding, org.apache.xerces.xni.Augmentations augs)` This method notifies of the start of an entity.
    `protected java.lang.String` | `startPE(java.lang.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

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

    - ### Methods inherited from class java.lang.Object

      `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

    - ### Methods inherited from interface org.apache.xerces.xni.parser.XMLComponent

      `setFeature, setProperty`

- - ### Field Detail

    - #### SCANNER_STATE_END_OF_INPUT

          protected static final int SCANNER_STATE_END_OF_INPUT

      Scanner state: end of input.
      See Also:
        Constant Field Values

    - #### SCANNER_STATE_TEXT_DECL

          protected static final int SCANNER_STATE_TEXT_DECL

      Scanner state: text declaration.
      See Also:
        Constant Field Values

    - #### SCANNER_STATE_MARKUP_DECL

          protected static final int SCANNER_STATE_MARKUP_DECL

      Scanner state: markup declaration.
      See Also:
        Constant Field Values

    - #### fDTDHandler

          protected org.apache.xerces.xni.XMLDTDHandler fDTDHandler

      DTD handler.

    - #### fDTDContentModelHandler

          protected org.apache.xerces.xni.XMLDTDContentModelHandler fDTDContentModelHandler

      DTD content model handler.

    - #### fScannerState

          protected int fScannerState

      Scanner state.

    - #### fStandalone

          protected boolean fStandalone

      Standalone.

    - #### fSeenExternalDTD

          protected boolean fSeenExternalDTD

      Seen external DTD.

    - #### fSeenPEReferences

          protected boolean fSeenPEReferences

      Seen a parameter entity reference.

  - ### Constructor Detail

    - #### XMLDTDScannerImpl

          public XMLDTDScannerImpl()

      Default constructor.

    - #### XMLDTDScannerImpl

          public XMLDTDScannerImpl(SymbolTable symbolTable,
                           XMLErrorReporter errorReporter,
                           XMLEntityManager entityManager)

      Constructor for he use of non-XMLComponentManagers.

  - ### Method Detail

    - #### setInputSource

          public void setInputSource(org.apache.xerces.xni.parser.XMLInputSource inputSource)
                              throws java.io.IOException

      Sets the input source.
      Specified by:
        `setInputSource` in interface `org.apache.xerces.xni.parser.XMLDTDScanner`
      Parameters:
        `inputSource` - The input source or null.
      Throws:
        `java.io.IOException` - Thrown on i/o error.

    - #### scanDTDExternalSubset

          public boolean scanDTDExternalSubset(boolean complete)
                                        throws java.io.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.
      Throws:
        `java.io.IOException`
        `org.apache.xerces.xni.XNIException`

    - #### scanDTDInternalSubset

          public boolean scanDTDInternalSubset(boolean complete,
                                      boolean standalone,
                                      boolean hasExternalSubset)
                                        throws java.io.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.
        `hasExternalSubset` - True if the document has an external DTD. This allows the scanner to properly notify the handler of the end of the DTD in the absence of an external subset.
      Returns:
        True if there is more to scan, false otherwise.
      Throws:
        `java.io.IOException`
        `org.apache.xerces.xni.XNIException`

    - #### 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 class `XMLScanner`
      Parameters:
        `componentManager` -
      Throws:
        `org.apache.xerces.xni.parser.XMLConfigurationException`

    - #### reset

          public void reset()

      Overrides:
        `reset` in class `XMLScanner`

    - #### getRecognizedFeatures

          public java.lang.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 java.lang.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`

    - #### getFeatureDefault

          public java.lang.Boolean getFeatureDefault(java.lang.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 java.lang.Object getPropertyDefault(java.lang.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

    - #### setDTDHandler

          public void setDTDHandler(org.apache.xerces.xni.XMLDTDHandler dtdHandler)

      setDTDHandler
      Specified by:
        `setDTDHandler` in interface `org.apache.xerces.xni.parser.XMLDTDSource`
      Parameters:
        `dtdHandler` -

    - #### getDTDHandler

          public org.apache.xerces.xni.XMLDTDHandler getDTDHandler()

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

    - #### setDTDContentModelHandler

          public void setDTDContentModelHandler(org.apache.xerces.xni.XMLDTDContentModelHandler dtdContentModelHandler)

      setDTDContentModelHandler
      Specified by:
        `setDTDContentModelHandler` in interface `org.apache.xerces.xni.parser.XMLDTDContentModelSource`
      Parameters:
        `dtdContentModelHandler` -

    - #### getDTDContentModelHandler

          public org.apache.xerces.xni.XMLDTDContentModelHandler getDTDContentModelHandler()

      getDTDContentModelHandler
      Specified by:
        `getDTDContentModelHandler` in interface `org.apache.xerces.xni.parser.XMLDTDContentModelSource`
      Returns:
        XMLDTDContentModelHandler

    - #### startEntity

          public void startEntity(java.lang.String name,
                         org.apache.xerces.xni.XMLResourceIdentifier identifier,
                         java.lang.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 class `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.

    - #### endEntity

          public void endEntity(java.lang.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 class `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.

    - #### setScannerState

          protected final void setScannerState(int state)

      Sets the scanner state.
      Parameters:
        `state` - The new scanner state.

    - #### scanningInternalSubset

          protected final boolean scanningInternalSubset()

    - #### startPE

          protected java.lang.String startPE(java.lang.String name,
                                 boolean literal)
                                      throws java.io.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
      Returns:
        The name of the parameter entity (with the '%')
      Throws:
        `java.io.IOException`
        `org.apache.xerces.xni.XNIException`

    - #### scanTextDecl

          protected final boolean scanTextDecl()
                                        throws java.io.IOException,
                                               org.apache.xerces.xni.XNIException

      Dispatch an XML "event".
      Returns:
        true if a TextDecl was scanned.
      Throws:
        `java.io.IOException` - Thrown on i/o error.
        `org.apache.xerces.xni.XNIException` - Thrown on parse error.

    - #### scanPIData

          protected final void scanPIData(java.lang.String target,
                        org.apache.xerces.xni.XMLString data)
                                   throws java.io.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 class `XMLScanner`
      Parameters:
        `target` - The PI target
        `data` - The string to fill in with the data
      Throws:
        `java.io.IOException`
        `org.apache.xerces.xni.XNIException`

    - #### scanComment

          protected final void scanComment()
                                    throws java.io.IOException,
                                           org.apache.xerces.xni.XNIException

      Scans a comment.

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

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

      Throws:
        `java.io.IOException`
        `org.apache.xerces.xni.XNIException`

    - #### scanElementDecl

          protected final void scanElementDecl()
                                        throws java.io.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'

      Throws:
        `java.io.IOException`
        `org.apache.xerces.xni.XNIException`

    - #### scanAttlistDecl

          protected final void scanAttlistDecl()
                                        throws java.io.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'

      Throws:
        `java.io.IOException`
        `org.apache.xerces.xni.XNIException`

    - #### scanAttDefaultDecl

          protected final java.lang.String scanAttDefaultDecl(java.lang.String elName,
                                            java.lang.String atName,
                                            java.lang.String type,
                                            org.apache.xerces.xni.XMLString defaultVal,
                                            org.apache.xerces.xni.XMLString nonNormalizedDefaultVal)
                                                       throws java.io.IOException,
                                                              org.apache.xerces.xni.XNIException

      Scans an attribute default declaration

           [60] DefaultDecl ::= '#REQUIRED' | '#IMPLIED' | (('#FIXED' S)? AttValue)

      Parameters:
        `elName` -
        `atName` - The name of the attribute being scanned.
        `type` -
        `defaultVal` - The string to fill in with the default value.
        `nonNormalizedDefaultVal` -
      Throws:
        `java.io.IOException`
        `org.apache.xerces.xni.XNIException`

    - #### scanEntityValue

          protected final int scanEntityValue(org.apache.xerces.xni.XMLString value,
                            org.apache.xerces.xni.XMLString nonNormalizedValue)
                                       throws java.io.IOException,
                                              org.apache.xerces.xni.XNIException

      Scans an entity value.

      Note: This method uses fString, fStringBuffer (through the use of scanCharReferenceValue), and fStringBuffer2, anything in them at the time of calling is lost.

      Parameters:
        `value` - The string to fill in with the value.
        `nonNormalizedValue` - The string to fill in with the non-normalized value.
      Returns:
        Count of direct and indirect references to parameter entities in the value of the entity.
      Throws:
        `java.io.IOException`
        `org.apache.xerces.xni.XNIException`

    - #### scanDecls

          protected final boolean scanDecls(boolean complete)
                                     throws java.io.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:
        `java.io.IOException` - Thrown on i/o error.
        `org.apache.xerces.xni.XNIException` - Thrown on parse error.

Copyright © 1999-2022 The Apache Software Foundation. All Rights Reserved.