Class RELAXCoreReader

All Implemented Interfaces:
IDContextProvider2, XSDatatypeResolver, org.relaxng.datatype.ValidationContext, ContentHandler, DTDHandler, EntityResolver, ErrorHandler, XMLFilter, XMLReader
Direct Known Subclasses:
RELAXCoreIslandSchemaReader

public class RELAXCoreReader extends RELAXReader implements XSDatatypeResolver
reads RELAX module (classic RELAX module; no namespace extension) by SAX2 and constructs abstract grammar model. This class does not recognize extensions introduced by RELAX Namespace (like anyOtherElement, or <ref label="..." namespace="..." />.
  • Field Details

    • relaxCoreSchema4Schema

      protected static org.iso_relax.verifier.Schema relaxCoreSchema4Schema
      Schema for schema of RELAX Core. Unless overrided, this schema for schema will be used to parse a RELAX Core schema. To override, call the full constructor of this class and change the parameter.
    • module

      protected RELAXModule module
      RELAX module object being under construction. object is created when target namespace is identified.
    • combinedAttPools

      protected final ReferenceContainer combinedAttPools
      contains all expressions that are going to be combined. ReferenceExp is used to wrap an expression to provide location information. (attPool element with combine attribute).
    • userDefinedTypes

      private final Map userDefinedTypes
      User-defined datatypes (from type name to XSDatatypeExp object.
    • ERR_NAMESPACE_NOT_SUPPROTED

      public static final String ERR_NAMESPACE_NOT_SUPPROTED
      See Also:
    • ERR_INCONSISTENT_TARGET_NAMESPACE

      public static final String ERR_INCONSISTENT_TARGET_NAMESPACE
      See Also:
    • ERR_MISSING_TARGET_NAMESPACE

      public static final String ERR_MISSING_TARGET_NAMESPACE
      See Also:
    • ERR_MULTIPLE_TAG_DECLARATIONS

      public static final String ERR_MULTIPLE_TAG_DECLARATIONS
      See Also:
    • ERR_MORE_THAN_ONE_INLINE_TAG

      public static final String ERR_MORE_THAN_ONE_INLINE_TAG
      See Also:
    • ERR_MULTIPLE_ATTPOOL_DECLARATIONS

      public static final String ERR_MULTIPLE_ATTPOOL_DECLARATIONS
      See Also:
    • ERR_UNDEFINED_ELEMENTRULE

      public static final String ERR_UNDEFINED_ELEMENTRULE
      See Also:
    • ERR_UNDEFINED_HEDGERULE

      public static final String ERR_UNDEFINED_HEDGERULE
      See Also:
    • ERR_UNDEFINED_TAG

      public static final String ERR_UNDEFINED_TAG
      See Also:
    • ERR_UNDEFINED_ATTPOOL

      public static final String ERR_UNDEFINED_ATTPOOL
      See Also:
    • ERR_LABEL_COLLISION

      public static final String ERR_LABEL_COLLISION
      See Also:
    • ERR_ROLE_COLLISION

      public static final String ERR_ROLE_COLLISION
      See Also:
    • WRN_NO_EXPROTED_LABEL

      public static final String WRN_NO_EXPROTED_LABEL
      See Also:
    • ERR_EXPROTED_HEDGERULE_CONSTRAINT

      public static final String ERR_EXPROTED_HEDGERULE_CONSTRAINT
      See Also:
    • ERR_MULTIPLE_ATTRIBUTE_CONSTRAINT

      public static final String ERR_MULTIPLE_ATTRIBUTE_CONSTRAINT
      See Also:
    • ERR_ID_ABUSE

      public static final String ERR_ID_ABUSE
      See Also:
    • ERR_ID_ABUSE_1

      public static final String ERR_ID_ABUSE_1
      See Also:
    • WRN_ILLEGAL_RELAXCORE_VERSION

      public static final String WRN_ILLEGAL_RELAXCORE_VERSION
      See Also:
  • Constructor Details

    • RELAXCoreReader

      public RELAXCoreReader(GrammarReaderController controller, SAXParserFactory parserFactory, ExpressionPool pool)
    • RELAXCoreReader

      public RELAXCoreReader(GrammarReaderController controller, SAXParserFactory parserFactory, RELAXCoreReader.StateFactory stateFactory, ExpressionPool pool, String expectedTargetNamespace)
      full constructor.
      Parameters:
      stateFactory - this object creates all parsing state object. Parsing behavior can be modified by changing this object.
      expectedTargetNamespace - expected value of 'targetNamespace' attribute. If this value is null, then the module must have 'targetNamepsace' attribute. If this value is non-null and module doesn't have targetNamespace attribute, then expectedTargetNamespace is used as the module's target namespace (chameleon effect). If expectedNamespace differs from the module's targetNamespace attribute, then an error will be issued.
  • Method Details

    • parse

      public static RELAXModule parse(String moduleURL, SAXParserFactory factory, GrammarReaderController controller, ExpressionPool pool)
      loads RELAX module
    • parse

      public static RELAXModule parse(InputSource module, SAXParserFactory factory, GrammarReaderController controller, ExpressionPool pool)
      loads RELAX module
    • getRELAXCoreSchema4Schema

      public static org.iso_relax.verifier.Schema getRELAXCoreSchema4Schema()
    • getResult

      public final RELAXModule getResult()
      obtains parsed grammar object only if parsing was successful.
    • getResultAsGrammar

      public final 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
    • 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
    • addUserDefinedType

      public final void addUserDefinedType(XSDatatypeExp exp)
    • resolveXSDatatype

      public XSDatatypeExp resolveXSDatatype(String typeName)
      gets DataType object from type name. If undefined type name is specified, this method is responsible to report an error, and recovers.
      Specified by:
      resolveXSDatatype in interface XSDatatypeResolver
      Parameters:
      typeName - 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.
    • getStateFactory

      protected final RELAXCoreReader.StateFactory getStateFactory()
    • 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.
      Overrides:
      createExpressionChildState in class RELAXReader
      Returns:
      null if the start tag is an error.
    • canHaveOccurs

      protected boolean canHaveOccurs(ExpressionState state)
      returns true if the given state can have "occurs" attribute.
    • resolveElementRef

      protected Expression resolveElementRef(String namespace, String label)
      Description copied from class: RELAXReader
      obtains an Expression specified by given (namespace,label) pair. this method is called to parse <ref label="..." /> element.
      Specified by:
      resolveElementRef in class RELAXReader
    • resolveHedgeRef

      protected Expression resolveHedgeRef(String namespace, String label)
      Description copied from class: RELAXReader
      obtains an Expression specified by given (namespace,label) pair. this method is called to parse <hedgeRef label="..." /> element.
      Specified by:
      resolveHedgeRef in class RELAXReader
    • resolveAttPoolRef

      protected Expression resolveAttPoolRef(String namespace, String role)
    • wrapUp

      protected void wrapUp()
    • choiceOfExported

      private Expression choiceOfExported(ReferenceContainer con)
    • detectDoubleAttributeConstraints

      private void detectDoubleAttributeConstraints(RELAXModule module)
      detect two AttributeExps that share the same target name. See DblAttrConstraintChecker for details.
    • detectCollision

      private void detectCollision(ReferenceContainer col1, ReferenceContainer col2, String errMsg)
    • localizeMessage

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