Class DTDReader
- All Implemented Interfaces:
DTDEventListener
,EventListener
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.
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionprivate static class
protected class
-
Field Summary
FieldsModifier and TypeFieldDescriptionprotected static final String
when this value is in the above set, that indicates we couldn't detect what URIs are going to be used with that prefix.protected final Map
map from element name to (map from attribute name to AttModel).protected final short
protected short
protected Expression
protected DTDReader.Context
protected final Controller
private org.relaxng.datatype.DatatypeLibrary
Used to create Datatype objects.private final Map
this map remembers where ReferenceExps are defined, and where user defined types are defined.protected final Map
map from element name to its content model.static final String
static final String
protected final TREXGrammar
protected Locator
protected final Map
map from prefix to set of possible namespace URI.private boolean
this flag is set to true after reporting WRN_ATTEMPT_TO_USE_NAMESPACE.static final String
Fields inherited from interface com.sun.msv.scanner.dtd.DTDEventListener
CHOICE, CONTENT_MODEL_ANY, CONTENT_MODEL_CHILDREN, CONTENT_MODEL_EMPTY, CONTENT_MODEL_MIXED, OCCURENCE_ONCE, OCCURENCE_ONE_OR_MORE, OCCURENCE_ZERO_OR_MORE, OCCURENCE_ZERO_OR_ONE, SEQUENCE, USE_FIXED, USE_IMPLIED, USE_NORMAL, USE_REQUIRED
-
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionvoid
attributeDecl
(String elementName, String attributeName, String attributeType, String[] enums, short attributeUse, String defaultValue) For each entry in an ATTLIST declaration, this event will be fired.void
characters
(char[] ch, int start, int length) Receive notification of character data.void
childElement
(String elementName, short occurence) protected void
void
Receive notification that a comment has been read.void
connector
(short type) Connectors in one model group is guaranteed to be the same.protected Expression
createAttributeBody
(String elementName, String attributeName, String attributeType, String[] enums, short attributeUse, String defaultValue) Creates an attribute body from the declaration found in the DTD.org.relaxng.datatype.Datatype
createDatatype
(String name) Obtains a Datatype object from its name.protected ReferenceExp
createElementDeclaration
(String elementName) Creates an element declaration in the grammar object by using the parsed result.protected Expression
Creates element declarations from the parsed result.protected static final Map
void
endCDATA()
Receive notification that the CDATA section finished.void
endContentModel
(String elementName, short type) receives notification that parsing of content model is finished.void
endDTD()
Receive notification of the end of a DTD.void
endModelGroup
(short occurence) void
void
externalGeneralEntityDecl
(String n, String p, String s) Receive notification of an external parsed general entity declaration event.void
externalParameterEntityDecl
(String n, String p, String s) Receive notification of an external parameter entity declaration event.void
protected final ReferenceExp
Gets the expression that corresponds to the "ANY".protected NameClass
getNameClass
(String maybeQName, boolean handleAsAttribute) private Set
getPossibleNamespaces
(String prefix) Obtains the parsed grammar object.void
ignorableWhitespace
(char[] ch, int start, int length) Receive notification of ignorable whitespace in element content.void
Receive notification of a internal general entity declaration event.void
Receive notification of a internal parameter entity declaration event.boolean
isUnparsedEntity
(String entityName) void
mixedElement
(String elementName) receives notification of child element of mixed content model.void
notationDecl
(String name, String publicId, String systemId) Receive notification of a Notation Declaration.static TREXGrammar
parse
(InputSource source, GrammarReaderController controller) static TREXGrammar
parse
(InputSource source, GrammarReaderController controller, ExpressionPool pool) void
processingInstruction
(String target, String data) Receive notification of a Processing Instruction.protected Expression
processOccurs
(Expression item, short occurence) processes occurence (?,+,*) of the given expressionresolveNamespacePrefix
(String prefix) void
setDatatypeLibrary
(org.relaxng.datatype.DatatypeLibrary datatypeLibrary) void
void
protected String[]
splitQName
(String maybeQName) returns an array of (URI,localName).void
Receive notification that a CDATA section is beginning.void
startContentModel
(String elementName, short type) receives notification that parsing of content model is beginning.void
startDTD
(InputEntity in) Receive notification of the beginning of the DTD.void
void
unparsedEntityDecl
(String name, String publicId, String systemId, String notationName) Receive notification of an unparsed entity declaration.void
-
Field Details
-
controller
-
datatypeLibrary
private org.relaxng.datatype.DatatypeLibrary datatypeLibraryUsed to create Datatype objects. This datatype library should be able to handle XML Schema datatypes because those are the names we ask to this library. -
namespaces
map from prefix to set of possible namespace URI. default namespace (without prefix) is stored by using "" as a key. -
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:
-
grammar
-
locator
-
elementDecls
map from element name to its content model. -
attributeDecls
map from element name to (map from attribute name to AttModel). -
contextStack
-
contentModel
-
connectorType
protected short connectorType -
CONNECTOR_UNKNOWN
protected final short CONNECTOR_UNKNOWN- See Also:
-
reportedXmlnsWarning
private boolean reportedXmlnsWarningthis flag is set to true after reporting WRN_ATTEMPT_TO_USE_NAMESPACE. this is used to prevent issuing the same warning more than once. -
declaredLocations
this map remembers where ReferenceExps are defined, and where user defined types are defined. some ReferenceExp can be defined in more than one location. In those cases, the last one is always memorized. This behavior is essential to correctly implement TREX constraint that no two <define> is allowed in the same file. -
ERR_UNDEFINED_ELEMENT
- See Also:
-
WRN_ATTEMPT_TO_USE_NAMESPACE
- See Also:
-
ERR_UNDECLARED_PREFIX
- See Also:
-
-
Constructor Details
-
DTDReader
-
-
Method Details
-
parse
-
parse
public static TREXGrammar parse(InputSource source, GrammarReaderController controller, ExpressionPool pool) -
setDatatypeLibrary
public void setDatatypeLibrary(org.relaxng.datatype.DatatypeLibrary datatypeLibrary) -
createDatatype
Obtains a Datatype object from its name. -
createInitialNamespaceMap
-
getNameClass
-
splitQName
returns an array of (URI,localName). -
getResult
Obtains the parsed grammar object.- Returns:
- null if there was an error. Otherwise a parsed grammar object will be returned.
-
setDocumentLocator
- Specified by:
setDocumentLocator
in interfaceDTDEventListener
-
startContentModel
Description copied from interface:DTDEventListener
receives notification that parsing of content model is beginning.- Specified by:
startContentModel
in interfaceDTDEventListener
- 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
Gets the expression that corresponds to the "ANY".Its defeinition will be later filled by the choice of all elements.
-
endContentModel
Description copied from interface:DTDEventListener
receives notification that parsing of content model is finished.- Specified by:
endContentModel
in interfaceDTDEventListener
-
processOccurs
processes occurence (?,+,*) of the given expression -
childElement
- Specified by:
childElement
in interfaceDTDEventListener
-
combineToContentModel
-
mixedElement
Description copied from interface:DTDEventListener
receives notification of child element of mixed content model. this method is called for each child element.- Specified by:
mixedElement
in interfaceDTDEventListener
- See Also:
-
startModelGroup
public void startModelGroup()- Specified by:
startModelGroup
in interfaceDTDEventListener
-
endModelGroup
public void endModelGroup(short occurence) - Specified by:
endModelGroup
in interfaceDTDEventListener
-
connector
Description copied from interface:DTDEventListener
Connectors in one model group is guaranteed to be the same.IOW, you'll never see an event sequence like (a|b,c)
- Specified by:
connector
in interfaceDTDEventListener
- Throws:
SAXException
-
getPossibleNamespaces
-
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 interfaceDTDEventListener
- Throws:
SAXException
-
createAttributeBody
protected Expression createAttributeBody(String elementName, String attributeName, String attributeType, String[] enums, short attributeUse, String defaultValue) throws SAXException Creates an attribute body from the declaration found in the DTD.- Throws:
SAXException
-
createElementDeclaration
Creates an element declaration in the grammar object by using the parsed result.- Returns:
- ReferenceExp that corresponds to the created element declaration.
-
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".
-
endDTD
Description copied from interface:DTDEventListener
Receive notification of the end of a DTD. The parser will invoke this method only once.- Specified by:
endDTD
in interfaceDTDEventListener
- Throws:
SAXException
- See Also:
-
fatalError
- Specified by:
fatalError
in interfaceDTDEventListener
- Throws:
SAXException
-
error
- Specified by:
error
in interfaceDTDEventListener
- Throws:
SAXException
-
warning
- Specified by:
warning
in interfaceDTDEventListener
- Throws:
SAXException
-
setDeclaredLocationOf
-
getDeclaredLocationOf
-
isUnparsedEntity
-
resolveNamespacePrefix
-
processingInstruction
Description copied from interface:DTDEventListener
Receive notification of a Processing Instruction. Processing instructions contain information meaningful to the application.- Specified by:
processingInstruction
in interfaceDTDEventListener
- 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
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 interfaceDTDEventListener
- Parameters:
name
- The notation name, referred to by entities and elements.publicId
- The public identifiersystemId
- 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 interfaceDTDEventListener
- Parameters:
name
- The name of the unparsed entity.publicId
- The public identifiersystemId
- The system identifiernotationName
- The associated notation- Throws:
SAXException
-
externalGeneralEntityDecl
Description copied from interface:DTDEventListener
Receive notification of an external parsed general entity declaration event.If a system identifier is present, and it is a relative URL, the parser will have resolved it fully before passing it through this method to a listener.
- Specified by:
externalGeneralEntityDecl
in interfaceDTDEventListener
- Parameters:
n
- The entity name.p
- The entity's public identifier, or null if none was given.s
- The entity's system identifier.- Throws:
SAXException
- See Also:
-
internalGeneralEntityDecl
Description copied from interface:DTDEventListener
Receive notification of a internal general entity declaration event.- Specified by:
internalGeneralEntityDecl
in interfaceDTDEventListener
- Parameters:
n
- The internal general entity name.v
- The value of the entity, which may include unexpanded entity references. Character references will have been expanded.- Throws:
SAXException
- See Also:
-
externalParameterEntityDecl
Description copied from interface:DTDEventListener
Receive notification of an external parameter entity declaration event.If a system identifier is present, and it is a relative URL, the parser will have resolved it fully before passing it through this method to a listener.
- Specified by:
externalParameterEntityDecl
in interfaceDTDEventListener
- Parameters:
n
- The parameter entity name.p
- The entity's public identifier, or null if none was given.s
- The entity's system identifier.- Throws:
SAXException
- See Also:
-
internalParameterEntityDecl
Description copied from interface:DTDEventListener
Receive notification of a internal parameter entity declaration event.- Specified by:
internalParameterEntityDecl
in interfaceDTDEventListener
- Parameters:
n
- The internal parameter entity name.v
- The value of the entity, which may include unexpanded entity references. Character references will have been expanded.- Throws:
SAXException
- See Also:
-
startDTD
Description copied from interface:DTDEventListener
Receive notification of the beginning of the DTD.- Specified by:
startDTD
in interfaceDTDEventListener
- Parameters:
in
- Current input entity.- Throws:
SAXException
- See Also:
-
comment
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 interfaceDTDEventListener
- Parameters:
n
- the text within the comment delimiters.- Throws:
SAXException
-
characters
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 interfaceDTDEventListener
- 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:
-
ignorableWhitespace
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 interfaceDTDEventListener
- 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:
-
startCDATA
Description copied from interface:DTDEventListener
Receive notification that a CDATA section is beginning. Data in a CDATA section is is reported through the appropriate event, either characters() or ignorableWhitespace.- Specified by:
startCDATA
in interfaceDTDEventListener
- Throws:
SAXException
- See Also:
-
endCDATA
Description copied from interface:DTDEventListener
Receive notification that the CDATA section finished.- Specified by:
endCDATA
in interfaceDTDEventListener
- Throws:
SAXException
- See Also:
-