com.sun.msv.reader
Class GrammarReader

java.lang.Object
  extended by org.xml.sax.helpers.XMLFilterImpl
      extended by com.sun.msv.reader.GrammarReader
All Implemented Interfaces:
IDContextProvider2, ValidationContext, ContentHandler, DTDHandler, EntityResolver, ErrorHandler, XMLFilter, XMLReader
Direct Known Subclasses:
RELAXReader, TREXBaseReader, XMLSchemaReader

public abstract class GrammarReader
extends XMLFilterImpl
implements IDContextProvider2

base implementation of grammar readers that read grammar from SAX2 stream. GrammarReader class can be used as a ContentHandler that parses a grammar. So the typical usage is


 
 GrammarReader reader = new RELAXGrammarReader(...);
 XMLReader parser = .... // create a new XMLReader here
 
 parser.setContentHandler(reader);
 parser.parse(whateverYouLike);
 return reader.grammar;  // obtain parsed grammar.
 
Or you may want to use several pre-defined static "parse" methods for ease of use.

Author:
Kohsuke KAWAGUCHI

Nested Class Summary
static interface GrammarReader.BackPatch
           
 class GrammarReader.BackwardReferenceMap
          memorizes what declarations are referenced from where.
 class GrammarReader.ChainPrefixResolver
           
static interface GrammarReader.PrefixResolver
          namespace prefix to URI conversion map.
 
Field Summary
 GrammarReader.BackwardReferenceMap backwardReference
          keeps track of all backward references to every ReferenceExp.
static GrammarReader.PrefixResolver basePrefixResolver
          The namespace prefix resolver that only resolves "xml" prefix.
 Controller controller
          this object receives errors and warnings
static String ERR_BAD_ATTRIBUTE_VALUE
           
static String ERR_BAD_TYPE
           
static String ERR_CHARACTERS
           
static String ERR_CONFLICTING_ATTRIBUTES
           
static String ERR_DATATYPE_ALREADY_DEFINED
           
static String ERR_DISALLOWED_ATTRIBUTE
           
static String ERR_FRAGMENT_IDENTIFIER
           
static String ERR_ILLEGAL_FINAL_VALUE
           
static String ERR_MALPLACED_ELEMENT
           
static String ERR_MISSING_ATTRIBUTE
           
static String ERR_MISSING_ATTRIBUTE_2
           
static String ERR_MISSING_CHILD_EXPRESSION
           
static String ERR_MISSING_CHILD_TYPE
           
static String ERR_MISSING_TOPLEVEL
           
static String ERR_MORE_THAN_ONE_CHILD_EXPRESSION
           
static String ERR_MORE_THAN_ONE_CHILD_TYPE
           
static String ERR_RECURSIVE_DATATYPE
           
static String ERR_RECURSIVE_INCLUDE
           
static String ERR_RUNAWAY_EXPRESSION
           
static String ERR_UNDEFINED_DATATYPE
           
 Locator locator
          document Locator that is given by XML reader
 SAXParserFactory parserFactory
          Reader may create another SAXParser from this factory
 ExpressionPool pool
          this object must be used to create a new expression
 GrammarReader.PrefixResolver prefixResolver
           
static String WRN_DEPRECATED_TYPENAME
           
static String WRN_MAYBE_WRONG_NAMESPACE
           
 
Method Summary
 void _parse(Object source, Locator errorSource)
          parses a grammar from the specified source
 void addBackPatchJob(GrammarReader.BackPatch job)
           
 void addBackPatchJob(XSDatatypeExp job)
           
 String combineURI(String baseURI, String relativeURI)
          converts the relative URL to the absolute one by using the specified base URL.
 String combineURL(String baseURI, String relativeURI)
          Deprecated. use the combineURI method.
abstract  State createExpressionChildState(State parent, StartTagInfo tag)
          this method must be implemented by the derived class to create language-default expresion state.
 void detectUndefinedOnes(ReferenceContainer container, String errMsg)
          detects undefined ReferenceExp and reports it as an error.
 void endPrefixMapping(String prefix)
           
 com.sun.msv.datatype.xsd.XSDatatype getBackwardCompatibleType(String typeName)
          tries to obtain a DataType object by resolving obsolete names.
 String getBaseUri()
           
 State getCurrentState()
          gets current State object.
 Locator getDeclaredLocationOf(Object o)
           
abstract  Grammar getResultAsGrammar()
          gets the parsed AGM.
 boolean isNotation(String notationName)
           
 boolean isUnparsedEntity(String entityName)
           
 Iterator iterateInscopeNamespaces()
          Iterates Map.Entry objects which has the prefix as key and the namespace URI as value.
 void onID(Datatype dt, StringToken token)
          this method is called when a type with ID semantics is matched.
 void parse(InputSource source)
          parses a grammar from the specified source
 void parse(String source)
          parses a grammar from the specified source
 void popState()
          pops the previous state from the stack
 void pushState(State newState, State parentState, StartTagInfo startTag)
          pushs the current state into the stack and sets new one
 void reportError(Exception nestedException, String propertyName)
           
 void reportError(Exception nestedException, String propertyName, Object arg1)
           
 void reportError(Locator[] locs, String propertyName, Object[] args)
           
 void reportError(String propertyName)
           
 void reportError(String propertyName, Object arg1)
           
 void reportError(String propertyName, Object[] args, Exception nestedException, Locator[] errorLocations)
          reports an error to the controller
 void reportError(String propertyName, Object arg1, Object arg2)
           
 void reportError(String propertyName, Object arg1, Object arg2, Object arg3)
           
 void reportWarning(String propertyName)
           
 void reportWarning(String propertyName, Object arg1)
           
 void reportWarning(String propertyName, Object[] args, Locator[] locations)
          reports a warning to the controller
 void reportWarning(String propertyName, Object arg1, Object arg2)
           
 InputSource resolveLocation(State sourceState, String uri)
          obtains InputSource for the specified url.
 String resolveNamespacePrefix(String prefix)
           
 void runBackPatchJob()
          Performs all back-patchings.
 void setDeclaredLocationOf(Object o)
           
 void setDocumentLocator(Locator loc)
           
 String[] splitQName(String qName)
          Resolves a QName into a pair of (namespace URI,local name).
 void startPrefixMapping(String prefix, String uri)
           
 void switchSource(InputSource source, State newState)
           
 void switchSource(State sourceState, String url, State newState)
          Switchs InputSource to the specified URL and parses it by the specified state.
 
Methods inherited from class org.xml.sax.helpers.XMLFilterImpl
characters, endDocument, endElement, error, fatalError, getContentHandler, getDTDHandler, getEntityResolver, getErrorHandler, getFeature, getParent, getProperty, ignorableWhitespace, notationDecl, processingInstruction, resolveEntity, setContentHandler, setDTDHandler, setEntityResolver, setErrorHandler, setFeature, setParent, setProperty, skippedEntity, startDocument, startElement, unparsedEntityDecl, warning
 
Methods inherited from class java.lang.Object
equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

locator

public Locator locator
document Locator that is given by XML reader


controller

public final Controller controller
this object receives errors and warnings


parserFactory

public final SAXParserFactory parserFactory
Reader may create another SAXParser from this factory


pool

public final ExpressionPool pool
this object must be used to create a new expression


basePrefixResolver

public static final GrammarReader.PrefixResolver basePrefixResolver
The namespace prefix resolver that only resolves "xml" prefix. This class should be used as the base resolver.


prefixResolver

public GrammarReader.PrefixResolver prefixResolver

backwardReference

public final GrammarReader.BackwardReferenceMap backwardReference
keeps track of all backward references to every ReferenceExp. this map should be used to report the source of error of undefined-something.


ERR_MALPLACED_ELEMENT

public static final String ERR_MALPLACED_ELEMENT
See Also:
Constant Field Values

ERR_CHARACTERS

public static final String ERR_CHARACTERS
See Also:
Constant Field Values

ERR_DISALLOWED_ATTRIBUTE

public static final String ERR_DISALLOWED_ATTRIBUTE
See Also:
Constant Field Values

ERR_MISSING_ATTRIBUTE

public static final String ERR_MISSING_ATTRIBUTE
See Also:
Constant Field Values

ERR_BAD_ATTRIBUTE_VALUE

public static final String ERR_BAD_ATTRIBUTE_VALUE
See Also:
Constant Field Values

ERR_MISSING_ATTRIBUTE_2

public static final String ERR_MISSING_ATTRIBUTE_2
See Also:
Constant Field Values

ERR_CONFLICTING_ATTRIBUTES

public static final String ERR_CONFLICTING_ATTRIBUTES
See Also:
Constant Field Values

ERR_RECURSIVE_INCLUDE

public static final String ERR_RECURSIVE_INCLUDE
See Also:
Constant Field Values

ERR_FRAGMENT_IDENTIFIER

public static final String ERR_FRAGMENT_IDENTIFIER
See Also:
Constant Field Values

ERR_UNDEFINED_DATATYPE

public static final String ERR_UNDEFINED_DATATYPE
See Also:
Constant Field Values

ERR_DATATYPE_ALREADY_DEFINED

public static final String ERR_DATATYPE_ALREADY_DEFINED
See Also:
Constant Field Values

ERR_MISSING_CHILD_EXPRESSION

public static final String ERR_MISSING_CHILD_EXPRESSION
See Also:
Constant Field Values

ERR_MORE_THAN_ONE_CHILD_EXPRESSION

public static final String ERR_MORE_THAN_ONE_CHILD_EXPRESSION
See Also:
Constant Field Values

ERR_MORE_THAN_ONE_CHILD_TYPE

public static final String ERR_MORE_THAN_ONE_CHILD_TYPE
See Also:
Constant Field Values

ERR_MISSING_CHILD_TYPE

public static final String ERR_MISSING_CHILD_TYPE
See Also:
Constant Field Values

ERR_ILLEGAL_FINAL_VALUE

public static final String ERR_ILLEGAL_FINAL_VALUE
See Also:
Constant Field Values

ERR_RUNAWAY_EXPRESSION

public static final String ERR_RUNAWAY_EXPRESSION
See Also:
Constant Field Values

ERR_MISSING_TOPLEVEL

public static final String ERR_MISSING_TOPLEVEL
See Also:
Constant Field Values

WRN_MAYBE_WRONG_NAMESPACE

public static final String WRN_MAYBE_WRONG_NAMESPACE
See Also:
Constant Field Values

WRN_DEPRECATED_TYPENAME

public static final String WRN_DEPRECATED_TYPENAME
See Also:
Constant Field Values

ERR_BAD_TYPE

public static final String ERR_BAD_TYPE
See Also:
Constant Field Values

ERR_RECURSIVE_DATATYPE

public static final String ERR_RECURSIVE_DATATYPE
See Also:
Constant Field Values
Method Detail

getResultAsGrammar

public abstract Grammar getResultAsGrammar()
gets the parsed AGM. Should any error happens, this method should returns null. derived classes should implement type-safe getGrammar method, along with this method.


startPrefixMapping

public void startPrefixMapping(String prefix,
                               String uri)
                        throws SAXException
Specified by:
startPrefixMapping in interface ContentHandler
Overrides:
startPrefixMapping in class XMLFilterImpl
Throws:
SAXException

endPrefixMapping

public void endPrefixMapping(String prefix)
                      throws SAXException
Specified by:
endPrefixMapping in interface ContentHandler
Overrides:
endPrefixMapping in class XMLFilterImpl
Throws:
SAXException

iterateInscopeNamespaces

public Iterator iterateInscopeNamespaces()
Iterates Map.Entry objects which has the prefix as key and the namespace URI as value.


splitQName

public String[] splitQName(String qName)
Resolves a QName into a pair of (namespace URI,local name). Therefore this method returns null if it fails to process QName.


getBackwardCompatibleType

public com.sun.msv.datatype.xsd.XSDatatype getBackwardCompatibleType(String typeName)
tries to obtain a DataType object by resolving obsolete names. this method is useful for backward compatibility purpose.


resolveLocation

public final InputSource resolveLocation(State sourceState,
                                         String uri)
                                  throws AbortException
obtains InputSource for the specified url. Also this method allows GrammarReaderController to redirect or prohibit inclusion.

Parameters:
sourceState - The base URI of this state is used to resolve the resource.
Returns:
always return non-null valid object
Throws:
AbortException

combineURI

public final String combineURI(String baseURI,
                               String relativeURI)
converts the relative URL to the absolute one by using the specified base URL.


combineURL

public final String combineURL(String baseURI,
                               String relativeURI)
Deprecated. use the combineURI method.


switchSource

public void switchSource(State sourceState,
                         String url,
                         State newState)
                  throws AbortException
Switchs InputSource to the specified URL and parses it by the specified state. The method will return after the parsing of the new source is completed. derived classes can use this method to realize semantics of 'include'.

Parameters:
sourceState - this state is used to resolve the URL.
newState - this state will parse top-level of new XML source. this state receives document element by its createChildState method.
Throws:
AbortException

switchSource

public void switchSource(InputSource source,
                         State newState)

parse

public final void parse(String source)
parses a grammar from the specified source

Specified by:
parse in interface XMLReader
Overrides:
parse in class XMLFilterImpl

parse

public final void parse(InputSource source)
parses a grammar from the specified source

Specified by:
parse in interface XMLReader
Overrides:
parse in class XMLFilterImpl

_parse

public final void _parse(Object source,
                         Locator errorSource)
parses a grammar from the specified source


setDeclaredLocationOf

public void setDeclaredLocationOf(Object o)

getDeclaredLocationOf

public Locator getDeclaredLocationOf(Object o)

detectUndefinedOnes

public void detectUndefinedOnes(ReferenceContainer container,
                                String errMsg)
detects undefined ReferenceExp and reports it as an error. this method is used in the final wrap-up process of parsing.


pushState

public void pushState(State newState,
                      State parentState,
                      StartTagInfo startTag)
pushs the current state into the stack and sets new one


popState

public void popState()
pops the previous state from the stack


getCurrentState

public final State getCurrentState()
gets current State object.


createExpressionChildState

public abstract State createExpressionChildState(State parent,
                                                 StartTagInfo tag)
this method must be implemented by the derived class to create language-default expresion state.

Returns:
null if the start tag is an error.

setDocumentLocator

public void setDocumentLocator(Locator loc)
Specified by:
setDocumentLocator in interface ContentHandler
Overrides:
setDocumentLocator in class XMLFilterImpl

resolveNamespacePrefix

public String resolveNamespacePrefix(String prefix)
Specified by:
resolveNamespacePrefix in interface ValidationContext

isUnparsedEntity

public boolean isUnparsedEntity(String entityName)
Specified by:
isUnparsedEntity in interface ValidationContext

isNotation

public boolean isNotation(String notationName)
Specified by:
isNotation in interface ValidationContext

getBaseUri

public String getBaseUri()
Specified by:
getBaseUri in interface ValidationContext

onID

public final void onID(Datatype dt,
                       StringToken token)
Description copied from interface: IDContextProvider2
this method is called when a type with ID semantics is matched. It is the callee's responsibility that stores ID and checks doubly defined ID, if it is necessary.

Specified by:
onID in interface IDContextProvider2

addBackPatchJob

public final void addBackPatchJob(GrammarReader.BackPatch job)

addBackPatchJob

public final void addBackPatchJob(XSDatatypeExp job)

runBackPatchJob

public final void runBackPatchJob()
Performs all back-patchings.


reportError

public final void reportError(String propertyName)

reportError

public final void reportError(String propertyName,
                              Object arg1)

reportError

public final void reportError(String propertyName,
                              Object arg1,
                              Object arg2)

reportError

public final void reportError(String propertyName,
                              Object arg1,
                              Object arg2,
                              Object arg3)

reportError

public final void reportError(Exception nestedException,
                              String propertyName)

reportError

public final void reportError(Exception nestedException,
                              String propertyName,
                              Object arg1)

reportError

public final void reportError(Locator[] locs,
                              String propertyName,
                              Object[] args)

reportWarning

public final void reportWarning(String propertyName)

reportWarning

public final void reportWarning(String propertyName,
                                Object arg1)

reportWarning

public final void reportWarning(String propertyName,
                                Object arg1,
                                Object arg2)

reportError

public final void reportError(String propertyName,
                              Object[] args,
                              Exception nestedException,
                              Locator[] errorLocations)
reports an error to the controller


reportWarning

public final void reportWarning(String propertyName,
                                Object[] args,
                                Locator[] locations)
reports a warning to the controller