Class XMLSchemaReader

All Implemented Interfaces:
IDContextProvider2, XSDatatypeResolver, org.relaxng.datatype.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
  • Field Details

    • xmlSchema4XmlSchema

      protected static org.iso_relax.verifier.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:
    • 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:
    • XMLSchemaNamespace_old

      public static final String XMLSchemaNamespace_old
      See Also:
    • 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:
    • ERR_UNIMPLEMENTED_FEATURE

      public static final String ERR_UNIMPLEMENTED_FEATURE
      See Also:
    • ERR_UNDECLARED_PREFIX

      public static final String ERR_UNDECLARED_PREFIX
      See Also:
    • ERR_INCONSISTENT_TARGETNAMESPACE

      public static final String ERR_INCONSISTENT_TARGETNAMESPACE
      See Also:
    • ERR_IMPORTING_SAME_NAMESPACE

      public static final String ERR_IMPORTING_SAME_NAMESPACE
      See Also:
    • ERR_DUPLICATE_SCHEMA_DEFINITION

      public static final String ERR_DUPLICATE_SCHEMA_DEFINITION
      See Also:
    • ERR_UNDEFINED_ELEMENTTYPE

      public static final String ERR_UNDEFINED_ELEMENTTYPE
      See Also:
    • ERR_UNDEFINED_ATTRIBUTE_DECL

      public static final String ERR_UNDEFINED_ATTRIBUTE_DECL
      See Also:
    • ERR_UNDEFINED_ATTRIBUTE_GROUP

      public static final String ERR_UNDEFINED_ATTRIBUTE_GROUP
      See Also:
    • ERR_UNDEFINED_COMPLEX_TYPE

      public static final String ERR_UNDEFINED_COMPLEX_TYPE
      See Also:
    • ERR_UNDEFINED_SIMPLE_TYPE

      public static final String ERR_UNDEFINED_SIMPLE_TYPE
      See Also:
    • ERR_UNDEFINED_COMPLEX_OR_SIMPLE_TYPE

      public static final String ERR_UNDEFINED_COMPLEX_OR_SIMPLE_TYPE
      See Also:
    • ERR_UNDEFINED_ELEMENT_DECL

      public static final String ERR_UNDEFINED_ELEMENT_DECL
      See Also:
    • ERR_UNDEFINED_GROUP

      public static final String ERR_UNDEFINED_GROUP
      See Also:
    • ERR_UNDEFINED_SCHEMA

      public static final String ERR_UNDEFINED_SCHEMA
      See Also:
    • WRN_UNSUPPORTED_ANYELEMENT

      public static final String WRN_UNSUPPORTED_ANYELEMENT
      See Also:
    • WRN_OBSOLETED_NAMESPACE

      public static final String WRN_OBSOLETED_NAMESPACE
      See Also:
    • ERR_UNDEFINED_OR_FORWARD_REFERENCED_TYPE

      public static final String ERR_UNDEFINED_OR_FORWARD_REFERENCED_TYPE
      See Also:
    • ERR_REDEFINE_UNDEFINED

      public static final String ERR_REDEFINE_UNDEFINED
      See Also:
    • ERR_DUPLICATE_ATTRIBUTE_DEFINITION

      public static final String ERR_DUPLICATE_ATTRIBUTE_DEFINITION
      See Also:
    • ERR_DUPLICATE_COMPLEXTYPE_DEFINITION

      public static final String ERR_DUPLICATE_COMPLEXTYPE_DEFINITION
      See Also:
    • ERR_DUPLICATE_ATTRIBUTE_GROUP_DEFINITION

      public static final String ERR_DUPLICATE_ATTRIBUTE_GROUP_DEFINITION
      See Also:
    • ERR_DUPLICATE_GROUP_DEFINITION

      public static final String ERR_DUPLICATE_GROUP_DEFINITION
      See Also:
    • ERR_DUPLICATE_ELEMENT_DEFINITION

      public static final String ERR_DUPLICATE_ELEMENT_DEFINITION
      See Also:
    • ERR_DUPLICATE_IDENTITY_CONSTRAINT_DEFINITION

      public static final String ERR_DUPLICATE_IDENTITY_CONSTRAINT_DEFINITION
      See Also:
    • ERR_BAD_XPATH

      public static final String ERR_BAD_XPATH
      See Also:
    • ERR_UNDEFINED_KEY

      public static final String ERR_UNDEFINED_KEY
      See Also:
    • ERR_INVALID_BASETYPE_FOR_SIMPLECONTENT

      public static final String ERR_INVALID_BASETYPE_FOR_SIMPLECONTENT
      See Also:
    • ERR_KEY_FIELD_NUMBER_MISMATCH

      public static final String ERR_KEY_FIELD_NUMBER_MISMATCH
      See Also:
    • ERR_KEYREF_REFERRING_NON_KEY

      public static final String ERR_KEYREF_REFERRING_NON_KEY
      See Also:
    • ERR_UNRELATED_TYPES_IN_SUBSTITUTIONGROUP

      public static final String ERR_UNRELATED_TYPES_IN_SUBSTITUTIONGROUP
      See Also:
    • ERR_RECURSIVE_SUBSTITUTION_GROUP

      public static final String ERR_RECURSIVE_SUBSTITUTION_GROUP
      See Also:
    • ERR_FIXED_AND_DEFAULT

      public static final String ERR_FIXED_AND_DEFAULT
      See Also:
    • WRN_IMPLICIT_URTYPE_FOR_ELEMENT

      public static final String WRN_IMPLICIT_URTYPE_FOR_ELEMENT
      See Also:
  • Constructor Details

  • Method Details

    • 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

      Convenience method to create a reader and read a single scheme.
      Parameters:
      schema -
      controller -
      Returns:
      Throws:
      TransformerConfigurationException
      TransformerException
    • getXmlSchemaForXmlSchema

      public static org.iso_relax.verifier.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)