Class DTDReader

  • All Implemented Interfaces:
    DTDEventListener, EventListener

    public class DTDReader
    extends Object
    implements DTDEventListener
    constructs TREXGrammar object that exactly matches to the parsed DTD.

    Each element declaration will have its own ReferenceExp by the name of the element.

    Note that this class does NOT extend GrammarReader, because DTD is not written in XML format.

    Author:
    Kohsuke KAWAGUCHI
    • Field Detail

      • controller

        protected final Controller controller
      • namespaces

        protected final Map namespaces
        map from prefix to set of possible namespace URI. default namespace (without prefix) is stored by using "" as a key.
      • ABANDON_URI_SNIFFING

        protected static final String ABANDON_URI_SNIFFING
        when this value is in the above set, that indicates we couldn't detect what URIs are going to be used with that prefix.
        See Also:
        Constant Field Values
      • locator

        protected Locator locator
      • elementDecls

        protected final Map elementDecls
        map from element name to its content model.
      • attributeDecls

        protected final Map attributeDecls
        map from element name to (map from attribute name to AttModel).
      • connectorType

        protected short connectorType
    • Method Detail

      • setDatatypeLibrary

        public void setDatatypeLibrary​(org.relaxng.datatype.DatatypeLibrary datatypeLibrary)
      • createDatatype

        public org.relaxng.datatype.Datatype createDatatype​(String name)
        Obtains a Datatype object from its name.
      • createInitialNamespaceMap

        protected static final Map createInitialNamespaceMap()
      • getNameClass

        protected NameClass getNameClass​(String maybeQName,
                                         boolean handleAsAttribute)
      • splitQName

        protected String[] splitQName​(String maybeQName)
        returns an array of (URI,localName).
      • getResult

        public TREXGrammar getResult()
        Obtains the parsed grammar object.
        Returns:
        null if there was an error. Otherwise a parsed grammar object will be returned.
      • startContentModel

        public void startContentModel​(String elementName,
                                      short type)
        Description copied from interface: DTDEventListener
        receives notification that parsing of content model is beginning.
        Specified by:
        startContentModel in interface DTDEventListener
        Parameters:
        elementName - name of the element whose content model is going to be defined.
        type - DTDEventListener.CONTENT_MODEL_EMPTY this element has EMPTY content model. This notification will be immediately followed by the corresponding endContentModel. DTDEventListener.CONTENT_MODEL_ANY this element has ANY content model. This notification will be immediately followed by the corresponding endContentModel. DTDEventListener.CONTENT_MODEL_MIXED this element has mixed content model. #PCDATA will not be reported. each child element will be reported by mixedElement method. DTDEventListener.CONTENT_MODEL_CHILDREN this elemen has child content model. The actual content model will be reported by childElement, startModelGroup, endModelGroup, and connector methods. Possible call sequences are: START := MODEL_GROUP MODEL_GROUP := startModelGroup TOKEN (connector TOKEN)* endModelGroup TOKEN := childElement | MODEL_GROUP
      • getAnyExp

        protected final ReferenceExp getAnyExp()
        Gets the expression that corresponds to the "ANY".

        Its defeinition will be later filled by the choice of all elements.

      • processOccurs

        protected Expression processOccurs​(Expression item,
                                           short occurence)
        processes occurence (?,+,*) of the given expression
      • combineToContentModel

        protected void combineToContentModel​(Expression exp)
      • attributeDecl

        public void attributeDecl​(String elementName,
                                  String attributeName,
                                  String attributeType,
                                  String[] enums,
                                  short attributeUse,
                                  String defaultValue)
                           throws SAXException
        Description copied from interface: DTDEventListener
        For each entry in an ATTLIST declaration, this event will be fired.

        DTD allows the same attributes to be declared more than once, and in that case the first one wins. I think this method will be only fired for the first one, but I need to check.

        Specified by:
        attributeDecl in interface DTDEventListener
        Throws:
        SAXException
      • createElementDeclaration

        protected ReferenceExp createElementDeclaration​(String elementName)
        Creates an element declaration in the grammar object by using the parsed result.
        Returns:
        ReferenceExp that corresponds to the created element declaration.
      • createElementDeclarations

        protected Expression createElementDeclarations()
        Creates element declarations from the parsed result.
        Returns:
        An expression that corresponds to the choice of all element declarations. This will be used to implement "ANY".
      • setDeclaredLocationOf

        public void setDeclaredLocationOf​(Object o)
      • getDeclaredLocationOf

        public Locator getDeclaredLocationOf​(Object o)
      • isUnparsedEntity

        public boolean isUnparsedEntity​(String entityName)
      • resolveNamespacePrefix

        public String resolveNamespacePrefix​(String prefix)
      • processingInstruction

        public void processingInstruction​(String target,
                                          String data)
                                   throws SAXException
        Description copied from interface: DTDEventListener
        Receive notification of a Processing Instruction. Processing instructions contain information meaningful to the application.
        Specified by:
        processingInstruction in interface DTDEventListener
        Parameters:
        target - The target of the proceessing instruction which should have meaning to the application.
        data - The instruction itself which should contain valid XML characters.
        Throws:
        SAXException
      • notationDecl

        public void notationDecl​(String name,
                                 String publicId,
                                 String systemId)
                          throws SAXException
        Description copied from interface: DTDEventListener
        Receive notification of a Notation Declaration. Notation declarations are used by elements and entities for identifying embedded non-XML data.
        Specified by:
        notationDecl in interface DTDEventListener
        Parameters:
        name - The notation name, referred to by entities and elements.
        publicId - The public identifier
        systemId - The system identifier
        Throws:
        SAXException
      • unparsedEntityDecl

        public void unparsedEntityDecl​(String name,
                                       String publicId,
                                       String systemId,
                                       String notationName)
                                throws SAXException
        Description copied from interface: DTDEventListener
        Receive notification of an unparsed entity declaration. Unparsed entities are non-XML data.
        Specified by:
        unparsedEntityDecl in interface DTDEventListener
        Parameters:
        name - The name of the unparsed entity.
        publicId - The public identifier
        systemId - The system identifier
        notationName - The associated notation
        Throws:
        SAXException
      • comment

        public void comment​(String n)
                     throws SAXException
        Description copied from interface: DTDEventListener
        Receive notification that a comment has been read.

        Note that processing instructions are the mechanism designed to hold information for consumption by applications, not comments. XML systems may rely on applications being able to access information found in processing instructions; this is not true of comments, which are typically discarded.

        Specified by:
        comment in interface DTDEventListener
        Parameters:
        n - the text within the comment delimiters.
        Throws:
        SAXException
      • characters

        public void characters​(char[] ch,
                               int start,
                               int length)
                        throws SAXException
        Description copied from interface: DTDEventListener
        Receive notification of character data.

        The Parser will call this method to report each chunk of character data. SAX parsers may return all contiguous character data in a single chunk, or they may split it into several chunks; however, all of the characters in any single event must come from the same external entity, so that the Locator provides useful information.

        The application must not attempt to read from the array outside of the specified range.

        Note that some parsers will report whitespace using the ignorableWhitespace() method rather than this one (validating parsers must do so).

        Specified by:
        characters in interface DTDEventListener
        Parameters:
        ch - The characters from the DTD.
        start - The start position in the array.
        length - The number of characters to read from the array.
        Throws:
        SAXException
        See Also:
        DTDEventListener.ignorableWhitespace(char[], int, int)
      • ignorableWhitespace

        public void ignorableWhitespace​(char[] ch,
                                        int start,
                                        int length)
                                 throws SAXException
        Description copied from interface: DTDEventListener
        Receive notification of ignorable whitespace in element content.

        Validating Parsers must use this method to report each chunk of ignorable whitespace (see the W3C XML 1.0 recommendation, section 2.10): non-validating parsers may also use this method if they are capable of parsing and using content models.

        SAX parsers may return all contiguous whitespace in a single chunk, or they may split it into several chunks; however, all of the characters in any single event must come from the same external entity, so that the Locator provides useful information.

        The application must not attempt to read from the array outside of the specified range.

        Specified by:
        ignorableWhitespace in interface DTDEventListener
        Parameters:
        ch - The characters from the DTD.
        start - The start position in the array.
        length - The number of characters to read from the array.
        Throws:
        SAXException
        See Also:
        DTDEventListener.characters(char[], int, int)