com.sun.msv.reader.xmlschema
Class XMLSchemaReader

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

public class XMLSchemaReader
extends GrammarReader
implements XSDatatypeResolver

parses XML representation of XML Schema and constructs AGM.

Author:
Kohsuke KAWAGUCHI

Nested Class Summary
static interface XMLSchemaReader.RefResolver
           
static class XMLSchemaReader.StateFactory
          creates various State object, which in turn parses grammar.
 
Nested classes/interfaces inherited from class com.sun.msv.reader.GrammarReader
GrammarReader.BackPatch, GrammarReader.BackwardReferenceMap, GrammarReader.ChainPrefixResolver, GrammarReader.PrefixResolver
 
Field Summary
protected  String attributeFormDefault
          value of the "attributeFormDefault" attribute.
protected  String blockDefault
          value of the "blockDefault" attribute.
protected  String chameleonTargetNamespace
          The intended target namespace of the chameleon schema.
 ComplexTypeExp complexUrType
          expression that matches to "ur-type" when used as a complex type.
protected  XMLSchemaSchema currentSchema
           
 boolean doDuplicateDefinitionCheck
          a flag that indicates State objects should check duplicate definitions.
protected  String elementFormDefault
          value of the "elementFormDefault" attribute.
static String ERR_BAD_XPATH
           
static String ERR_DUPLICATE_ATTRIBUTE_DEFINITION
           
static String ERR_DUPLICATE_ATTRIBUTE_GROUP_DEFINITION
           
static String ERR_DUPLICATE_COMPLEXTYPE_DEFINITION
           
static String ERR_DUPLICATE_ELEMENT_DEFINITION
           
static String ERR_DUPLICATE_GROUP_DEFINITION
           
static String ERR_DUPLICATE_IDENTITY_CONSTRAINT_DEFINITION
           
static String ERR_DUPLICATE_SCHEMA_DEFINITION
           
static String ERR_IMPORTING_SAME_NAMESPACE
           
static String ERR_INCONSISTENT_TARGETNAMESPACE
           
static String ERR_INVALID_BASETYPE_FOR_SIMPLECONTENT
           
static String ERR_KEY_FIELD_NUMBER_MISMATCH
           
static String ERR_KEYREF_REFERRING_NON_KEY
           
static String ERR_MAXOCCURS_IS_NECESSARY
           
static String ERR_RECURSIVE_SUBSTITUTION_GROUP
           
static String ERR_REDEFINE_UNDEFINED
           
static String ERR_UNDECLARED_PREFIX
           
static String ERR_UNDEFINED_ATTRIBUTE_DECL
           
static String ERR_UNDEFINED_ATTRIBUTE_GROUP
           
static String ERR_UNDEFINED_COMPLEX_OR_SIMPLE_TYPE
           
static String ERR_UNDEFINED_COMPLEX_TYPE
           
static String ERR_UNDEFINED_ELEMENT_DECL
           
static String ERR_UNDEFINED_ELEMENTTYPE
           
static String ERR_UNDEFINED_GROUP
           
static String ERR_UNDEFINED_KEY
           
static String ERR_UNDEFINED_OR_FORWARD_REFERENCED_TYPE
           
static String ERR_UNDEFINED_SCHEMA
           
static String ERR_UNDEFINED_SIMPLE_TYPE
           
static String ERR_UNIMPLEMENTED_FEATURE
           
static String ERR_UNRELATED_TYPES_IN_SUBSTITUTIONGROUP
           
protected  String finalDefault
          value of the "finalDefault" attribute.
protected  XMLSchemaGrammar grammar
          grammar object which is being under construction.
 Map<String,Set<String>> parsedFiles
          tables that store all SystemIds that we've read.
 XMLSchemaReader.StateFactory sfactory
           
static String WRN_IMPLICIT_URTYPE_FOR_ELEMENT
           
static String WRN_OBSOLETED_NAMESPACE
           
static String WRN_UNSUPPORTED_ANYELEMENT
           
protected static Schema xmlSchema4XmlSchema
          Schema for schema of W3C XML Schema.
static String XMLSchemaNamespace
          namespace URI of XML Schema declarations.
static String XMLSchemaNamespace_old
           
static String XMLSchemaSchemaLocationAttributes
           
protected  XMLSchemaSchema xsdSchema
          XMLSchemaSchema object that has XMLSchemaNamespace as its target namespace.
 ReferenceExp xsiSchemaLocationExp
          content model that matches to optional xsi:schemaLocation or xsi:noNamespaceSchemaLocation.
 
Fields inherited from class com.sun.msv.reader.GrammarReader
backwardReference, basePrefixResolver, controller, ERR_BAD_ATTRIBUTE_VALUE, ERR_BAD_TYPE, ERR_CHARACTERS, ERR_CONFLICTING_ATTRIBUTES, ERR_DATATYPE_ALREADY_DEFINED, ERR_DISALLOWED_ATTRIBUTE, ERR_FRAGMENT_IDENTIFIER, ERR_ILLEGAL_FINAL_VALUE, ERR_MALPLACED_ELEMENT, ERR_MISSING_ATTRIBUTE, ERR_MISSING_ATTRIBUTE_2, ERR_MISSING_CHILD_EXPRESSION, ERR_MISSING_CHILD_TYPE, ERR_MISSING_TOPLEVEL, ERR_MORE_THAN_ONE_CHILD_EXPRESSION, ERR_MORE_THAN_ONE_CHILD_TYPE, ERR_RECURSIVE_DATATYPE, ERR_RECURSIVE_INCLUDE, ERR_RUNAWAY_EXPRESSION, ERR_UNDEFINED_DATATYPE, parserFactory, pool, prefixResolver, WRN_DEPRECATED_TYPENAME, WRN_MAYBE_WRONG_NAMESPACE
 
Constructor Summary
XMLSchemaReader(GrammarReaderController controller)
          easy-to-use constructor.
XMLSchemaReader(GrammarReaderController controller, SAXParserFactory parserFactory)
           
XMLSchemaReader(GrammarReaderController controller, SAXParserFactory parserFactory, ExpressionPool pool)
           
XMLSchemaReader(GrammarReaderController controller, SAXParserFactory parserFactory, XMLSchemaReader.StateFactory stateFactory, ExpressionPool pool)
           
 
Method Summary
 State createAttributeState(State parent, StartTagInfo tag)
          creates a state object that parses "attribute","attributeGroup ref", and "anyAttribute".
 State createExpressionChildState(State parent, StartTagInfo tag)
          this method must be implemented by the derived class to create language-default expresion state.
 State createFacetState(State parent, StartTagInfo tag)
           
 State createModelGroupState(State parent, StartTagInfo tag)
          creates a state object that parses "all"/"group ref"/"choice" and "sequence".
 Map<String,String> getAdditionalNamespaceMap()
           
 XMLSchemaSchema getOrCreateSchema(String namespaceURI)
          gets a reference to XMLSchemaGrammar object whose target namespace is the specified one.
 XMLSchemaGrammar getResult()
           
 Grammar getResultAsGrammar()
          gets the parsed AGM.
static Schema getXmlSchemaForXmlSchema()
           
protected  Expression interceptExpression(State state, Expression exp)
          intercepts an expression made by ExpressionState before it is passed to the parent state.
protected  boolean isGrammarElement(StartTagInfo tag)
          checks if given element is that of the grammar elements.
 boolean isSchemaDefined(XMLSchemaSchema schema)
           
 boolean isSchemaNamespace(String ns)
           
protected  String localizeMessage(String propertyName, Object[] args)
          formats localized message with arguments
 void markSchemaAsDefined(XMLSchemaSchema schema)
           
static XMLSchemaGrammar parse(InputSource grammar, SAXParserFactory factory, GrammarReaderController controller)
          loads XML Schema
static XMLSchemaGrammar parse(Source schema, GrammarReaderController controller)
          Convenience method to create a reader and read a single scheme.
static XMLSchemaGrammar parse(String grammarURL, SAXParserFactory factory, GrammarReaderController controller)
          loads XML Schema
 Expression processOccurs(Expression item, int minOccurs, int maxOccurs)
          Adds maxOccurs/minOccurs semantics to a given expression.
 Expression processOccurs(StartTagInfo startTag, Expression item)
          Adds maxOccurs/minOccurs semantics to a given expression.
 XSDatatype resolveBuiltinDataType(String typeLocalName)
          resolves built-in datatypes (URI: http://www.w3.org/2001/XMLSchema)
 SimpleTypeExp resolveBuiltinSimpleType(String typeLocalName)
          Gets a built-in datatype as SimpleTypeExp.
protected  String resolveNamespaceOfAttributeDecl(String formValue)
           
protected  String resolveNamespaceOfElementDecl(String formValue)
           
 Expression resolveQNameRef(StartTagInfo tag, String attName, XMLSchemaReader.RefResolver resolver)
           
 XSDatatypeExp resolveXSDatatype(String typeQName)
          Resolves a simple type name into the corresponding XSDatatypeExp object.
 void setAdditionalNamespaceMap(Map<String,String> additionalNamespaceMap)
           
 String[] splitQName(String qName)
          Resolves a QName into a pair of (namespace URI,local name).
protected  void switchSource(State sourceState, State newRootState)
           
protected  void wrapUp()
          performs final wrap-up of parsing.
 
Methods inherited from class com.sun.msv.reader.GrammarReader
_parse, addBackPatchJob, addBackPatchJob, combineURI, combineURL, createParserFactory, detectUndefinedOnes, endPrefixMapping, getBackwardCompatibleType, getBaseUri, getCurrentState, getDeclaredLocationOf, getLocator, inputSourceFromLSInput, isNotation, isUnparsedEntity, iterateInscopeNamespaces, onID, parse, parse, parse, popState, pushState, reportError, reportError, reportError, reportError, reportError, reportError, reportError, reportError, reportWarning, reportWarning, reportWarning, reportWarning, resolveLocation, resolveNamespacePrefix, runBackPatchJob, setDeclaredLocationOf, setDocumentLocator, setLocator, startPrefixMapping, switchSource, switchSource, switchSource
 
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
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

xmlSchema4XmlSchema

protected static Schema xmlSchema4XmlSchema
Schema for schema of W3C XML Schema.


xsiSchemaLocationExp

public final ReferenceExp xsiSchemaLocationExp
content model that matches to optional xsi:schemaLocation or xsi:noNamespaceSchemaLocation.


XMLSchemaSchemaLocationAttributes

public static final String XMLSchemaSchemaLocationAttributes
See Also:
Constant Field Values

complexUrType

public final ComplexTypeExp complexUrType
expression that matches to "ur-type" when used as a complex type.


attributeFormDefault

protected String attributeFormDefault
value of the "attributeFormDefault" attribute.


elementFormDefault

protected String elementFormDefault
value of the "elementFormDefault" attribute.


finalDefault

protected String finalDefault
value of the "finalDefault" attribute. Set to null if the attribute was not specified.


blockDefault

protected String blockDefault
value of the "blockDefault" attribute. Set to null if the attribute was not specified.


grammar

protected final XMLSchemaGrammar grammar
grammar object which is being under construction.


currentSchema

protected XMLSchemaSchema currentSchema

xsdSchema

protected final XMLSchemaSchema xsdSchema
XMLSchemaSchema object that has XMLSchemaNamespace as its target namespace.


parsedFiles

public final Map<String,Set<String>> parsedFiles
tables that store all SystemIds that we've read. map from target namespace URI to set of system ids. This field is used to prevent double inclusion. Strictly speaking, comparision based on system id is not enough. The spec calls for "the necessity of establishing identity component by component" (section 4.2.1, last note).


sfactory

public final XMLSchemaReader.StateFactory sfactory

XMLSchemaNamespace

public static final String XMLSchemaNamespace
namespace URI of XML Schema declarations.

See Also:
Constant Field Values

XMLSchemaNamespace_old

public static final String XMLSchemaNamespace_old
See Also:
Constant Field Values

chameleonTargetNamespace

protected String chameleonTargetNamespace
The intended target namespace of the chameleon schema.

When parsing a chameleon schema (inclusion of a schema without the targetNamespace attribute), this field is set to the target namespace of the callee, so that any reference occured in the chameleon schema is treated correctly.

This field must be set to null in other cases. In that case, QName resolution is handled just normally.

This field is maintained by SchemaIncludedState.


doDuplicateDefinitionCheck

public boolean doDuplicateDefinitionCheck
a flag that indicates State objects should check duplicate definitions. This flag is set to false when in <redefine>. Otherwise this flag is true.


ERR_MAXOCCURS_IS_NECESSARY

public static final String ERR_MAXOCCURS_IS_NECESSARY
See Also:
Constant Field Values

ERR_UNIMPLEMENTED_FEATURE

public static final String ERR_UNIMPLEMENTED_FEATURE
See Also:
Constant Field Values

ERR_UNDECLARED_PREFIX

public static final String ERR_UNDECLARED_PREFIX
See Also:
Constant Field Values

ERR_INCONSISTENT_TARGETNAMESPACE

public static final String ERR_INCONSISTENT_TARGETNAMESPACE
See Also:
Constant Field Values

ERR_IMPORTING_SAME_NAMESPACE

public static final String ERR_IMPORTING_SAME_NAMESPACE
See Also:
Constant Field Values

ERR_DUPLICATE_SCHEMA_DEFINITION

public static final String ERR_DUPLICATE_SCHEMA_DEFINITION
See Also:
Constant Field Values

ERR_UNDEFINED_ELEMENTTYPE

public static final String ERR_UNDEFINED_ELEMENTTYPE
See Also:
Constant Field Values

ERR_UNDEFINED_ATTRIBUTE_DECL

public static final String ERR_UNDEFINED_ATTRIBUTE_DECL
See Also:
Constant Field Values

ERR_UNDEFINED_ATTRIBUTE_GROUP

public static final String ERR_UNDEFINED_ATTRIBUTE_GROUP
See Also:
Constant Field Values

ERR_UNDEFINED_COMPLEX_TYPE

public static final String ERR_UNDEFINED_COMPLEX_TYPE
See Also:
Constant Field Values

ERR_UNDEFINED_SIMPLE_TYPE

public static final String ERR_UNDEFINED_SIMPLE_TYPE
See Also:
Constant Field Values

ERR_UNDEFINED_COMPLEX_OR_SIMPLE_TYPE

public static final String ERR_UNDEFINED_COMPLEX_OR_SIMPLE_TYPE
See Also:
Constant Field Values

ERR_UNDEFINED_ELEMENT_DECL

public static final String ERR_UNDEFINED_ELEMENT_DECL
See Also:
Constant Field Values

ERR_UNDEFINED_GROUP

public static final String ERR_UNDEFINED_GROUP
See Also:
Constant Field Values

ERR_UNDEFINED_SCHEMA

public static final String ERR_UNDEFINED_SCHEMA
See Also:
Constant Field Values

WRN_UNSUPPORTED_ANYELEMENT

public static final String WRN_UNSUPPORTED_ANYELEMENT
See Also:
Constant Field Values

WRN_OBSOLETED_NAMESPACE

public static final String WRN_OBSOLETED_NAMESPACE
See Also:
Constant Field Values

ERR_UNDEFINED_OR_FORWARD_REFERENCED_TYPE

public static final String ERR_UNDEFINED_OR_FORWARD_REFERENCED_TYPE
See Also:
Constant Field Values

ERR_REDEFINE_UNDEFINED

public static final String ERR_REDEFINE_UNDEFINED
See Also:
Constant Field Values

ERR_DUPLICATE_ATTRIBUTE_DEFINITION

public static final String ERR_DUPLICATE_ATTRIBUTE_DEFINITION
See Also:
Constant Field Values

ERR_DUPLICATE_COMPLEXTYPE_DEFINITION

public static final String ERR_DUPLICATE_COMPLEXTYPE_DEFINITION
See Also:
Constant Field Values

ERR_DUPLICATE_ATTRIBUTE_GROUP_DEFINITION

public static final String ERR_DUPLICATE_ATTRIBUTE_GROUP_DEFINITION
See Also:
Constant Field Values

ERR_DUPLICATE_GROUP_DEFINITION

public static final String ERR_DUPLICATE_GROUP_DEFINITION
See Also:
Constant Field Values

ERR_DUPLICATE_ELEMENT_DEFINITION

public static final String ERR_DUPLICATE_ELEMENT_DEFINITION
See Also:
Constant Field Values

ERR_DUPLICATE_IDENTITY_CONSTRAINT_DEFINITION

public static final String ERR_DUPLICATE_IDENTITY_CONSTRAINT_DEFINITION
See Also:
Constant Field Values

ERR_BAD_XPATH

public static final String ERR_BAD_XPATH
See Also:
Constant Field Values

ERR_UNDEFINED_KEY

public static final String ERR_UNDEFINED_KEY
See Also:
Constant Field Values

ERR_INVALID_BASETYPE_FOR_SIMPLECONTENT

public static final String ERR_INVALID_BASETYPE_FOR_SIMPLECONTENT
See Also:
Constant Field Values

ERR_KEY_FIELD_NUMBER_MISMATCH

public static final String ERR_KEY_FIELD_NUMBER_MISMATCH
See Also:
Constant Field Values

ERR_KEYREF_REFERRING_NON_KEY

public static final String ERR_KEYREF_REFERRING_NON_KEY
See Also:
Constant Field Values

ERR_UNRELATED_TYPES_IN_SUBSTITUTIONGROUP

public static final String ERR_UNRELATED_TYPES_IN_SUBSTITUTIONGROUP
See Also:
Constant Field Values

ERR_RECURSIVE_SUBSTITUTION_GROUP

public static final String ERR_RECURSIVE_SUBSTITUTION_GROUP
See Also:
Constant Field Values

WRN_IMPLICIT_URTYPE_FOR_ELEMENT

public static final String WRN_IMPLICIT_URTYPE_FOR_ELEMENT
See Also:
Constant Field Values
Constructor Detail

XMLSchemaReader

public XMLSchemaReader(GrammarReaderController controller)
easy-to-use constructor.


XMLSchemaReader

public XMLSchemaReader(GrammarReaderController controller,
                       SAXParserFactory parserFactory)

XMLSchemaReader

public XMLSchemaReader(GrammarReaderController controller,
                       SAXParserFactory parserFactory,
                       ExpressionPool pool)

XMLSchemaReader

public XMLSchemaReader(GrammarReaderController controller,
                       SAXParserFactory parserFactory,
                       XMLSchemaReader.StateFactory stateFactory,
                       ExpressionPool pool)
Method Detail

parse

public static XMLSchemaGrammar parse(String grammarURL,
                                     SAXParserFactory factory,
                                     GrammarReaderController controller)
loads XML Schema


parse

public static XMLSchemaGrammar parse(InputSource grammar,
                                     SAXParserFactory factory,
                                     GrammarReaderController controller)
loads XML Schema


parse

public static XMLSchemaGrammar parse(Source schema,
                                     GrammarReaderController controller)
                              throws TransformerConfigurationException,
                                     TransformerException
Convenience method to create a reader and read a single scheme.

Parameters:
schema -
controller -
Returns:
Throws:
TransformerConfigurationException
TransformerException

getXmlSchemaForXmlSchema

public static Schema getXmlSchemaForXmlSchema()

getResult

public final XMLSchemaGrammar getResult()

getResultAsGrammar

public Grammar getResultAsGrammar()
Description copied from class: GrammarReader
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.

Specified by:
getResultAsGrammar in class GrammarReader

getOrCreateSchema

public XMLSchemaSchema getOrCreateSchema(String namespaceURI)
gets a reference to XMLSchemaGrammar object whose target namespace is the specified one. If there is no such object, this method creates a new instance and returns it.


createExpressionChildState

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

Specified by:
createExpressionChildState in class GrammarReader
Returns:
null if the start tag is an error.

createModelGroupState

public State createModelGroupState(State parent,
                                   StartTagInfo tag)
creates a state object that parses "all"/"group ref"/"choice" and "sequence".


createAttributeState

public State createAttributeState(State parent,
                                  StartTagInfo tag)
creates a state object that parses "attribute","attributeGroup ref", and "anyAttribute".


createFacetState

public State createFacetState(State parent,
                              StartTagInfo tag)

isGrammarElement

protected boolean isGrammarElement(StartTagInfo tag)
Description copied from class: GrammarReader
checks if given element is that of the grammar elements.

Specified by:
isGrammarElement in class GrammarReader

markSchemaAsDefined

public final void markSchemaAsDefined(XMLSchemaSchema schema)

isSchemaDefined

public final boolean isSchemaDefined(XMLSchemaSchema schema)

resolveNamespaceOfAttributeDecl

protected String resolveNamespaceOfAttributeDecl(String formValue)

resolveNamespaceOfElementDecl

protected String resolveNamespaceOfElementDecl(String formValue)

resolveBuiltinDataType

public XSDatatype resolveBuiltinDataType(String typeLocalName)
resolves built-in datatypes (URI: http://www.w3.org/2001/XMLSchema)

Returns:
null if the type is not defined.

resolveBuiltinSimpleType

public SimpleTypeExp resolveBuiltinSimpleType(String typeLocalName)
Gets a built-in datatype as SimpleTypeExp.

Returns:
null if the type is not defined.

isSchemaNamespace

public boolean isSchemaNamespace(String ns)

resolveXSDatatype

public XSDatatypeExp resolveXSDatatype(String typeQName)
Resolves a simple type name into the corresponding XSDatatypeExp object.

Specified by:
resolveXSDatatype in interface XSDatatypeResolver
Parameters:
typeQName - The type of this value varies in the schema language. In XML Schema, for example, in which QNames are used to designate datatypes, this parameter will be QName. In RELAX Core, in which the same syntax is used but NCName is used to designate datatypes. So this parameter will be NCName.
Returns:
A non-null valid object. An error should be reported and recovered by the callee.

resolveQNameRef

public Expression resolveQNameRef(StartTagInfo tag,
                                  String attName,
                                  XMLSchemaReader.RefResolver resolver)

splitQName

public String[] splitQName(String qName)
Resolves a QName into a pair of (namespace URI,local name).

When we are parsing a "chameleon schema", any reference to the default empty namespace("") has to be treated as a reference to the intended target namespace.

Overrides:
splitQName in class GrammarReader

interceptExpression

protected Expression interceptExpression(State state,
                                         Expression exp)
Description copied from class: GrammarReader
intercepts an expression made by ExpressionState before it is passed to the parent state. derived class can perform further wrap-up before it is received by the parent. This mechanism is used by RELAXReader to handle occurs attribute.

Overrides:
interceptExpression in class GrammarReader

processOccurs

public Expression processOccurs(StartTagInfo startTag,
                                Expression item)
Adds maxOccurs/minOccurs semantics to a given expression. For example, if this method receives A, minOccurs=0, and maxOccurs=3, then this method should return something like (A,(A,A?)?)?


processOccurs

public Expression processOccurs(Expression item,
                                int minOccurs,
                                int maxOccurs)
Adds maxOccurs/minOccurs semantics to a given expression.

Parameters:
maxOccurs - -1 to represent "unbounded".

switchSource

protected void switchSource(State sourceState,
                            State newRootState)
                     throws AbortException
Throws:
AbortException

wrapUp

protected void wrapUp()
performs final wrap-up of parsing. this method is called by RootState after the parsing of the entire documents has completed.


localizeMessage

protected String localizeMessage(String propertyName,
                                 Object[] args)
Description copied from class: GrammarReader
formats localized message with arguments

Specified by:
localizeMessage in class GrammarReader

getAdditionalNamespaceMap

public Map<String,String> getAdditionalNamespaceMap()

setAdditionalNamespaceMap

public void setAdditionalNamespaceMap(Map<String,String> additionalNamespaceMap)


MSV