Class XMLSchemaReader

  • All Implemented Interfaces:
    IDContextProvider2, XSDatatypeResolver, org.relaxng.datatype.ValidationContext, org.xml.sax.ContentHandler, org.xml.sax.DTDHandler, org.xml.sax.EntityResolver, org.xml.sax.ErrorHandler, org.xml.sax.XMLFilter, org.xml.sax.XMLReader

    public class XMLSchemaReader
    extends GrammarReader
    implements XSDatatypeResolver
    parses XML representation of XML Schema and constructs AGM.
    • Field Detail

      • additionalNamespaceMap

        private java.util.Map<java.lang.String,​java.lang.String> additionalNamespaceMap
      • 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 java.lang.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 java.lang.String attributeFormDefault
        value of the "attributeFormDefault" attribute.
      • elementFormDefault

        protected java.lang.String elementFormDefault
        value of the "elementFormDefault" attribute.
      • finalDefault

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

        protected java.lang.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.
      • xsdSchema

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

        public final java.util.Map<java.lang.String,​java.util.Set<java.lang.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).
      • XMLSchemaNamespace

        public static final java.lang.String XMLSchemaNamespace
        namespace URI of XML Schema declarations.
        See Also:
        Constant Field Values
      • XMLSchemaNamespace_old

        public static final java.lang.String XMLSchemaNamespace_old
        See Also:
        Constant Field Values
      • issuedOldNamespaceWarning

        private boolean issuedOldNamespaceWarning
      • definedSchemata

        private final java.util.Set<XMLSchemaSchema> definedSchemata
        set of XMLSchemaGrammar that is already defined. XMLSchemaGrammar object is created when it is first referenced or defined.
      • chameleonTargetNamespace

        protected java.lang.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 java.lang.String ERR_MAXOCCURS_IS_NECESSARY
        See Also:
        Constant Field Values
      • ERR_UNIMPLEMENTED_FEATURE

        public static final java.lang.String ERR_UNIMPLEMENTED_FEATURE
        See Also:
        Constant Field Values
      • ERR_UNDECLARED_PREFIX

        public static final java.lang.String ERR_UNDECLARED_PREFIX
        See Also:
        Constant Field Values
      • ERR_INCONSISTENT_TARGETNAMESPACE

        public static final java.lang.String ERR_INCONSISTENT_TARGETNAMESPACE
        See Also:
        Constant Field Values
      • ERR_IMPORTING_SAME_NAMESPACE

        public static final java.lang.String ERR_IMPORTING_SAME_NAMESPACE
        See Also:
        Constant Field Values
      • ERR_DUPLICATE_SCHEMA_DEFINITION

        public static final java.lang.String ERR_DUPLICATE_SCHEMA_DEFINITION
        See Also:
        Constant Field Values
      • ERR_UNDEFINED_ELEMENTTYPE

        public static final java.lang.String ERR_UNDEFINED_ELEMENTTYPE
        See Also:
        Constant Field Values
      • ERR_UNDEFINED_ATTRIBUTE_DECL

        public static final java.lang.String ERR_UNDEFINED_ATTRIBUTE_DECL
        See Also:
        Constant Field Values
      • ERR_UNDEFINED_ATTRIBUTE_GROUP

        public static final java.lang.String ERR_UNDEFINED_ATTRIBUTE_GROUP
        See Also:
        Constant Field Values
      • ERR_UNDEFINED_COMPLEX_TYPE

        public static final java.lang.String ERR_UNDEFINED_COMPLEX_TYPE
        See Also:
        Constant Field Values
      • ERR_UNDEFINED_SIMPLE_TYPE

        public static final java.lang.String ERR_UNDEFINED_SIMPLE_TYPE
        See Also:
        Constant Field Values
      • ERR_UNDEFINED_COMPLEX_OR_SIMPLE_TYPE

        public static final java.lang.String ERR_UNDEFINED_COMPLEX_OR_SIMPLE_TYPE
        See Also:
        Constant Field Values
      • ERR_UNDEFINED_ELEMENT_DECL

        public static final java.lang.String ERR_UNDEFINED_ELEMENT_DECL
        See Also:
        Constant Field Values
      • ERR_UNDEFINED_GROUP

        public static final java.lang.String ERR_UNDEFINED_GROUP
        See Also:
        Constant Field Values
      • ERR_UNDEFINED_SCHEMA

        public static final java.lang.String ERR_UNDEFINED_SCHEMA
        See Also:
        Constant Field Values
      • WRN_UNSUPPORTED_ANYELEMENT

        public static final java.lang.String WRN_UNSUPPORTED_ANYELEMENT
        See Also:
        Constant Field Values
      • WRN_OBSOLETED_NAMESPACE

        public static final java.lang.String WRN_OBSOLETED_NAMESPACE
        See Also:
        Constant Field Values
      • ERR_UNDEFINED_OR_FORWARD_REFERENCED_TYPE

        public static final java.lang.String ERR_UNDEFINED_OR_FORWARD_REFERENCED_TYPE
        See Also:
        Constant Field Values
      • ERR_REDEFINE_UNDEFINED

        public static final java.lang.String ERR_REDEFINE_UNDEFINED
        See Also:
        Constant Field Values
      • ERR_DUPLICATE_ATTRIBUTE_DEFINITION

        public static final java.lang.String ERR_DUPLICATE_ATTRIBUTE_DEFINITION
        See Also:
        Constant Field Values
      • ERR_DUPLICATE_COMPLEXTYPE_DEFINITION

        public static final java.lang.String ERR_DUPLICATE_COMPLEXTYPE_DEFINITION
        See Also:
        Constant Field Values
      • ERR_DUPLICATE_ATTRIBUTE_GROUP_DEFINITION

        public static final java.lang.String ERR_DUPLICATE_ATTRIBUTE_GROUP_DEFINITION
        See Also:
        Constant Field Values
      • ERR_DUPLICATE_GROUP_DEFINITION

        public static final java.lang.String ERR_DUPLICATE_GROUP_DEFINITION
        See Also:
        Constant Field Values
      • ERR_DUPLICATE_ELEMENT_DEFINITION

        public static final java.lang.String ERR_DUPLICATE_ELEMENT_DEFINITION
        See Also:
        Constant Field Values
      • ERR_DUPLICATE_IDENTITY_CONSTRAINT_DEFINITION

        public static final java.lang.String ERR_DUPLICATE_IDENTITY_CONSTRAINT_DEFINITION
        See Also:
        Constant Field Values
      • ERR_UNDEFINED_KEY

        public static final java.lang.String ERR_UNDEFINED_KEY
        See Also:
        Constant Field Values
      • ERR_INVALID_BASETYPE_FOR_SIMPLECONTENT

        public static final java.lang.String ERR_INVALID_BASETYPE_FOR_SIMPLECONTENT
        See Also:
        Constant Field Values
      • ERR_KEY_FIELD_NUMBER_MISMATCH

        public static final java.lang.String ERR_KEY_FIELD_NUMBER_MISMATCH
        See Also:
        Constant Field Values
      • ERR_KEYREF_REFERRING_NON_KEY

        public static final java.lang.String ERR_KEYREF_REFERRING_NON_KEY
        See Also:
        Constant Field Values
      • ERR_UNRELATED_TYPES_IN_SUBSTITUTIONGROUP

        public static final java.lang.String ERR_UNRELATED_TYPES_IN_SUBSTITUTIONGROUP
        See Also:
        Constant Field Values
      • ERR_RECURSIVE_SUBSTITUTION_GROUP

        public static final java.lang.String ERR_RECURSIVE_SUBSTITUTION_GROUP
        See Also:
        Constant Field Values
      • WRN_IMPLICIT_URTYPE_FOR_ELEMENT

        public static final java.lang.String WRN_IMPLICIT_URTYPE_FOR_ELEMENT
        See Also:
        Constant Field Values
    • Method Detail

      • parse

        public static XMLSchemaGrammar parse​(javax.xml.transform.Source schema,
                                             GrammarReaderController controller)
                                      throws javax.xml.transform.TransformerConfigurationException,
                                             javax.xml.transform.TransformerException
        Convenience method to create a reader and read a single scheme.
        Parameters:
        schema -
        controller -
        Returns:
        Throws:
        javax.xml.transform.TransformerConfigurationException
        javax.xml.transform.TransformerException
      • getXmlSchemaForXmlSchema

        public static org.iso_relax.verifier.Schema getXmlSchemaForXmlSchema()
      • 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​(java.lang.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.
      • 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".
      • markSchemaAsDefined

        public final void markSchemaAsDefined​(XMLSchemaSchema schema)
      • isSchemaDefined

        public final boolean isSchemaDefined​(XMLSchemaSchema schema)
      • resolveNamespaceOfAttributeDecl

        protected java.lang.String resolveNamespaceOfAttributeDecl​(java.lang.String formValue)
      • resolveNamespaceOfElementDecl

        protected java.lang.String resolveNamespaceOfElementDecl​(java.lang.String formValue)
      • resolveNamespaceOfDeclaration

        private java.lang.String resolveNamespaceOfDeclaration​(java.lang.String formValue,
                                                               java.lang.String defaultValue)
      • resolveBuiltinDataType

        public XSDatatype resolveBuiltinDataType​(java.lang.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​(java.lang.String typeLocalName)
        Gets a built-in datatype as SimpleTypeExp.
        Returns:
        null if the type is not defined.
      • isSchemaNamespace

        public boolean isSchemaNamespace​(java.lang.String ns)
      • resolveXSDatatype

        public XSDatatypeExp resolveXSDatatype​(java.lang.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.
      • splitQName

        public java.lang.String[] splitQName​(java.lang.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".
      • _processOccurs

        private Expression _processOccurs​(Expression item,
                                          int minOccurs,
                                          int maxOccurs)
      • 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.
      • isSubstitutable

        private boolean isSubstitutable​(ElementDeclExp c,
                                        ElementDeclExp d)
        implementation of "SCC: Substitution Group OK (Transitive)".
        Parameters:
        c - the substitution head
        d - a member of the substitution group of c.
        Returns:
        true if d can validly substitute c.
      • localizeMessage

        protected java.lang.String localizeMessage​(java.lang.String propertyName,
                                                   java.lang.Object[] args)
        Description copied from class: GrammarReader
        formats localized message with arguments
        Specified by:
        localizeMessage in class GrammarReader
      • getAdditionalNamespaceMap

        public java.util.Map<java.lang.String,​java.lang.String> getAdditionalNamespaceMap()
      • setAdditionalNamespaceMap

        public void setAdditionalNamespaceMap​(java.util.Map<java.lang.String,​java.lang.String> additionalNamespaceMap)