| <?xml version="1.0"?> |
| <!-- |
| |
| Copyright (c) 1997, 2021 Oracle and/or its affiliates. All rights reserved. |
| |
| This program and the accompanying materials are made available under the |
| terms of the Eclipse Distribution License v. 1.0, which is available at |
| http://www.eclipse.org/org/documents/edl-v10.php. |
| |
| SPDX-License-Identifier: BSD-3-Clause |
| |
| --> |
| |
| <grammar xmlns="http://relaxng.org/ns/structure/1.0" |
| datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes" |
| ns="http://www.w3.org/2001/XMLSchema" |
| xmlns:xs="http://www.w3.org/2001/XMLSchema" |
| xmlns:doc="http://www.jenitennison.com/doc" |
| xmlns:txw="http://java.sun.com/txw"> |
| |
| <doc:p> |
| RELAX NG schema for XML Schema by <doc:link |
| href="mailto:mail@jenitennison.com">Jeni Tennison</doc:link>. Based on |
| <doc:link href="http://www.w3.org/TR/2001/REC-xmlschema-1-20010502/">XML |
| Schema Part I: Structures Recommendation</doc:link> and <doc:link |
| href="http://www.w3.org/TR/2001/REC-xmlschema-2-20010502/">XML Schema Part |
| II: Datatypes</doc:link>. |
| </doc:p> |
| <doc:changes date="2001-11-24"> |
| <doc:p> |
| Amended to comply with 10 August 2001 Tutorial. |
| </doc:p> |
| <doc:change>Removed key attributes.</doc:change> |
| <doc:change>Replaced not element with except elements.</doc:change> |
| <doc:change> |
| Replaced multiple consecutive optional attributes to use the |
| zeroOrMore/choice pattern. |
| </doc:change> |
| <doc:change> |
| Removed interleave elements inside list elements (which are no longer |
| permitted). |
| </doc:change> |
| </doc:changes> |
| |
| <define name="openAttrs" txw:mode="inherit"> |
| <doc:p> |
| This allows any number of attributes that are not in the XML Schema |
| namespace or are in no namespace. This is somewhat more complicated than |
| the XML Schema anyAttribute equivalent. |
| </doc:p> |
| <!-- KK don't care --> |
| <empty/> |
| <!--zeroOrMore> |
| <attribute> |
| <anyName> |
| <except> |
| <nsName /> |
| <nsName ns="" /> |
| <name>xml:lang</name> |
| </except> |
| </anyName> |
| <text /> |
| </attribute> |
| </zeroOrMore--> |
| </define> |
| |
| <define name="annotated" txw:mode="inherit"> |
| <doc:p> |
| This allows any number of attributes that are not in the XML Schema |
| namespace or are in no namespace, an optional id attribute of type ID, |
| and an optional annotation element. This is used as the basis for many |
| element content models. |
| </doc:p> |
| <ref name="openAttrs" /> |
| <optional> |
| <attribute name="id"> |
| <data type="ID" /> |
| </attribute> |
| </optional> |
| <optional> |
| <ref name="annotation" /> |
| </optional> |
| </define> |
| |
| <define name="schemaTop" txw:mode="inline"> |
| <doc:p> |
| This gives the content model of the top level of the schema. |
| </doc:p> |
| <choice> |
| <ref name="redefinable" /> |
| <ref name="topLevelElement" /> |
| <ref name="topLevelAttribute" /> |
| <!--ref name="notation" /--> |
| </choice> |
| </define> |
| |
| <define name="redefinable" txw:mode="inline"> |
| <doc:p> |
| This gives the components that can be redefined within the redefine |
| element. They also occur at the top level of the schema. |
| </doc:p> |
| <choice> |
| <ref name="simpleTypeHost" /> |
| <ref name="complexTypeHost" /> |
| <!--ref name="namedGroup" /> |
| <ref name="namedAttributeGroup" /--> |
| </choice> |
| </define> |
| |
| <define name="formChoice"> |
| <doc:p> |
| This gives the values for the various form attributes: |
| elementFormDefault and attributeFormDefault on the schema element, and |
| the form attributes on the element and attribute elements. |
| </doc:p> |
| <choice> |
| <value>qualified</value> |
| <value>unqualified</value> |
| </choice> |
| </define> |
| |
| <!-- KK: merge the two --> |
| <define name="reducedDerivationControl"> |
| <doc:p> |
| This gives the values that can be taken in the lists used to control |
| derivation by extension or restriction (this is 'reduced' derivation |
| because some derivation can involve substitution). This RELAX NG schema, |
| like the XML Schema Recommendation here, allows the keywords 'extension' and |
| 'restriction' to be repeated any number of times. |
| </doc:p> |
| <list> |
| <oneOrMore> |
| <choice> |
| <value>extension</value> |
| <value>restriction</value> |
| </choice> |
| </oneOrMore> |
| </list> |
| </define> |
| |
| <define name="derivationSet"> |
| <doc:p> |
| This specifies the possible values for attributes that control derivation. |
| </doc:p> |
| <choice> |
| <value>#all</value> |
| <ref name="reducedDerivationControl" /> |
| </choice> |
| </define> |
| |
| <start> |
| <doc:p> |
| This is the beginning point for the schema, and defines the schema |
| element. |
| </doc:p> |
| <element name="schema" |
| doc:href="http://www.w3.org/TR/xmlschema-1/#element-schema"> |
| <ref name="openAttrs" /> |
| <zeroOrMore> |
| <choice> |
| <attribute name="version"> |
| <data type="token" /> |
| </attribute> |
| <attribute name="finalDefault"> |
| <ref name="derivationSet" /> |
| </attribute> |
| <attribute name="blockDefault"> |
| <ref name="blockSet" /> |
| </attribute> |
| <attribute name="attributeFormDefault"> |
| <ref name="formChoice" /> |
| </attribute> |
| <attribute name="elementFormDefault"> |
| <ref name="formChoice" /> |
| </attribute> |
| <attribute name="id"> |
| <data type="ID" /> |
| </attribute> |
| <attribute name="xml:lang"> |
| <data type="language" /> |
| </attribute> |
| <attribute name="targetNamespace"> |
| <data type="anyURI" /> |
| </attribute> |
| </choice> |
| </zeroOrMore> |
| <zeroOrMore> |
| <choice> |
| <!--ref name="include" /--> |
| <ref name="import" /> |
| <!--ref name="redefine" /--> |
| <ref name="annotation" /> |
| </choice> |
| </zeroOrMore> |
| <zeroOrMore> |
| <choice> |
| <ref name="schemaTop" /> |
| <ref name="annotation" /> |
| </choice> |
| </zeroOrMore> |
| </element> |
| </start> |
| |
| <define name="allNNI"> |
| <doc:p> |
| This gives the value type for the maxOccurs attribute, which may be a |
| non-negative number or the keyword 'unbounded'. |
| </doc:p> |
| <choice> |
| <data type="nonNegativeInteger" /> |
| <value type="token">unbounded</value> |
| </choice> |
| </define> |
| |
| <define name="occurs" txw:mode="inherit"> |
| <doc:p> |
| This specifies the occurs attributes, minOccurs and maxOccurs, as they |
| are normally used. |
| </doc:p> |
| <zeroOrMore> |
| <choice> |
| <attribute name="minOccurs"> |
| <data type="nonNegativeInteger" /> |
| </attribute> |
| <attribute name="maxOccurs"> |
| <ref name="allNNI" /> |
| </attribute> |
| </choice> |
| </zeroOrMore> |
| </define> |
| |
| <define name="typeDefParticle" txw:mode="inline"> |
| <doc:p> |
| This gives the possible content of complex types. |
| </doc:p> |
| <choice> |
| <!--ref name="groupRef" /--> |
| <ref name="all" /> |
| <ref name="choice" /> |
| <ref name="sequence" /> |
| </choice> |
| </define> |
| |
| <define name="nestedParticle" txw:mode="inline"> |
| <doc:p> |
| This gives the particles that can make up a model group. |
| </doc:p> |
| <choice> |
| <ref name="localElement" /> |
| <!--ref name="groupRef" /--> |
| <ref name="choice" /> |
| <ref name="sequence" /> |
| <ref name="any" /> |
| </choice> |
| </define> |
| |
| <define name="fixedOrDefault" txw:mode="inline"> |
| <doc:p> |
| This specifies the relationship between fixed and default attributes on |
| element and attribute elements - if one is present, then the other cannot |
| be. This is a constraint that cannot be specified using XML Schema. |
| </doc:p> |
| <choice> |
| <empty /> |
| <attribute name="fixed" /> |
| <attribute name="default" /> |
| </choice> |
| </define> |
| |
| <define name="attributeType" txw:mode="inherit"> |
| <doc:p> |
| This specifies the relationship between the type attribute and the |
| simpleType element child of attribute elements - if one is present, then |
| the other cannot be, although it is possible for neither to be allowed. |
| </doc:p> |
| <choice> |
| <empty /> |
| <attribute name="type"> |
| <data type="QName" /> |
| </attribute> |
| <ref name="simpleTypeHost" /> |
| </choice> |
| </define> |
| |
| <define name="localAttribute"> |
| <doc:p> |
| This describes attribute elements when used in a local context. They |
| have an optional use attribute, possibly a fixed or default attribute, |
| and then can either have a ref attribute (referring to a top-level |
| attribute) or a name attribute with an optional form attribute and |
| specifying an attribute type. |
| </doc:p> |
| <element name="attribute" |
| doc:href="http://www.w3.org/TR/xmlschema-1/#element-attribute"> |
| <ref name="annotated" /> |
| <optional> |
| <attribute name="use"> |
| <choice> |
| <value type="token">optional</value> |
| <value type="token">prohibited</value> |
| <value type="token">required</value> |
| </choice> |
| </attribute> |
| </optional> |
| <ref name="fixedOrDefault" /> |
| <choice> |
| <attribute name="ref"> |
| <data type="QName" /> |
| </attribute> |
| <group> |
| <attribute name="name"> |
| <data type="NCName" /> |
| </attribute> |
| <optional> |
| <attribute name="form"> |
| <ref name="formChoice" /> |
| </attribute> |
| </optional> |
| <ref name="attributeType" /> |
| </group> |
| </choice> |
| </element> |
| </define> |
| |
| <define name="topLevelAttribute"> |
| <doc:p> |
| This describes attribute elements when used at the top level of the |
| schema. They must have a name, may have a fixed or default attribute, |
| and specify their type through a type attribute or child simpleType |
| element. The name attribute of each attribute element that appears at |
| the top level of the schema is unique. |
| </doc:p> |
| <element name="attribute" |
| doc:href="http://www.w3.org/TR/xmlschema-1/#element-attribute"> |
| <ref name="annotated" /> |
| <attribute name="name"> |
| <data type="NCName" /> |
| </attribute> |
| <ref name="fixedOrDefault" /> |
| <ref name="attributeType" /> |
| </element> |
| </define> |
| |
| <define name="attrDecls" txw:mode="inherit"> |
| <doc:p> |
| This gives the model group for specifying the attributes in a complex |
| type, an extension or restriction. |
| </doc:p> |
| <zeroOrMore> |
| <choice> |
| <ref name="localAttribute" /> |
| <!--ref name="attributeGroupRef" /--> |
| </choice> |
| </zeroOrMore> |
| <optional> |
| <ref name="anyAttribute" /> |
| </optional> |
| </define> |
| |
| <define name="anyAttribute"> |
| <doc:p> |
| This specifies the anyAttribute wildcard. |
| </doc:p> |
| <element name="anyAttribute" |
| doc:href="http://www.w3.org/TR/xmlschema-1/#element-anyAttribute"> |
| <ref name="wildcard" /> |
| </element> |
| </define> |
| |
| <define name="complexTypeModel" txw:mode="inherit"> |
| <doc:p> |
| This specifies the content of a complexType element. As children, it can |
| have a simpleContent, a complexContent or a model group. Only if it has |
| one of the latter two, may it have a mixed attribute. This latter |
| constraint is something that cannot be specified in XML Schema. |
| </doc:p> |
| <choice> |
| <ref name="simpleContent" /> |
| <group> |
| <optional> |
| <attribute name="mixed"> |
| <data type="boolean" /> |
| </attribute> |
| </optional> |
| <choice> |
| <ref name="complexContent" /> |
| <group> |
| <optional> |
| <ref name="typeDefParticle" /> |
| </optional> |
| <ref name="attrDecls" /> |
| </group> |
| </choice> |
| </group> |
| </choice> |
| </define> |
| |
| <define name="complexTypeHost" txw:mode="inherit"> |
| <ref name="typeHost" /> |
| <ref name="complexType" /> |
| </define> |
| |
| <define name="typeHost" txw:mode="inherit"><empty/><empty/></define> |
| |
| <define name="complexType" txw:mode="inherit"> |
| <element name="complexType" |
| doc:href="http://www.w3.org/TR/xmlschema-1/#element-complexType"> |
| <doc:p> |
| This specifies the basic content of a complexType element. |
| </doc:p> |
| <ref name="annotated" /> |
| <ref name="complexTypeModel" /> |
| <optional> |
| <attribute name="name"> |
| <data type="NCName" /> |
| </attribute> |
| </optional> |
| <zeroOrMore> |
| <choice> |
| <attribute name="abstract"> |
| <data type="boolean" /> |
| </attribute> |
| <attribute name="block"> |
| <ref name="derivationSet" /> |
| </attribute> |
| <attribute name="final"> |
| <ref name="derivationSet" /> |
| </attribute> |
| </choice> |
| </zeroOrMore> |
| </element> |
| </define> |
| |
| <define name="complexRestriction"> |
| <doc:p> |
| This describes a restriction element within a complexContent element |
| (i.e. one that restricts a complex type). It has a base attribute, may |
| contain a model group and may contain attribute declarations of various |
| sorts. |
| </doc:p> |
| <element name="restriction" |
| doc:href="http://www.w3.org/TR/xmlschema-1/#element-complexContent::restriction"> |
| <ref name="annotated" /> |
| <attribute name="base"> |
| <data type="QName" /> |
| </attribute> |
| <optional> |
| <ref name="typeDefParticle" /> |
| </optional> |
| <ref name="attrDecls" /> |
| </element> |
| </define> |
| |
| <define name="extensionType"> |
| <doc:p> |
| This specifies the basic model for an extension element: adding a |
| required base attribute to the model used for most components. |
| </doc:p> |
| <ref name="annotated" /> |
| <attribute name="base"> |
| <data type="QName" /> |
| </attribute> |
| </define> |
| |
| <define name="complexExtension"> |
| <doc:p> |
| This describes an extension element within a complexContent element |
| (i.e. one that restricts a complex type). It may contain a model group |
| and may contain attribute declarations of various sorts. |
| </doc:p> |
| <element name="extension" |
| doc:href="http://www.w3.org/TR/xmlschema-1/#element-complexContent::extension"> |
| <ref name="extensionType" /> |
| <optional> |
| <ref name="typeDefParticle" /> |
| </optional> |
| <ref name="attrDecls" /> |
| </element> |
| </define> |
| |
| <define name="complexContent"> |
| <doc:p> |
| This describes a complexContent element. It may have a mixed attribute, |
| and either a restriction or extension element as content. |
| </doc:p> |
| <element name="complexContent" |
| doc:href="http://www.w3.org/TR/xmlschema-1/#element-complexContent"> |
| <ref name="annotated" /> |
| <optional> |
| <attribute name="mixed"> |
| <data type="boolean" /> |
| </attribute> |
| </optional> |
| <choice> |
| <ref name="complexRestriction" /> |
| <ref name="complexExtension" /> |
| </choice> |
| </element> |
| </define> |
| |
| <define name="simpleRestriction"> |
| <doc:p> |
| This describes a restriction element that appears within a simpleContent |
| or simpleType element (i.e. one that restricts a simple type). Its |
| content follows the simple restriction model that is detailed below, and |
| may include attribute declarations. |
| </doc:p> |
| <element name="restriction" |
| doc:href="http://www.w3.org/TR/xmlschema-1/#element-simpleContent::restriction"> |
| <ref name="annotated" /> |
| <ref name="simpleRestrictionModel" /> |
| <ref name="attrDecls" /> |
| </element> |
| </define> |
| |
| <define name="simpleExtension"> |
| <doc:p> |
| This describes an extension element that appears within a simpleContent |
| element (i.e. one that extends a simple type). Like other extensions, it |
| has a base type, but it can only be used to add attributes. |
| </doc:p> |
| <element name="extension" |
| doc:href="http://www.w3.org/TR/xmlschema-1/#element-simpleContent::extension"> |
| <ref name="extensionType" /> |
| <ref name="attrDecls" /> |
| </element> |
| </define> |
| |
| <define name="simpleContent"> |
| <doc:p> |
| This describes a simpleContent element, whose content can either hold a |
| restriction or extension element. |
| </doc:p> |
| <element name="simpleContent" |
| doc:href="http://www.w3.org/TR/xmlschema-1/#element-simpleContent"> |
| <ref name="annotated" /> |
| <choice> |
| <ref name="simpleRestriction" /> |
| <ref name="simpleExtension" /> |
| </choice> |
| </element> |
| </define> |
| |
| <define name="blockSet"> |
| <doc:p> |
| This gives the possible values for block attributes on element elements, |
| which includes substitution amongst the list of possible values. This |
| RELAX NG schema, like the XML Schema Recommendation, allows each of the |
| keywords 'extension', 'restriction' and 'substitution' to occur more than |
| once within the list. |
| </doc:p> |
| <choice> |
| <value type="token">#all</value> |
| <list> |
| <oneOrMore> |
| <choice> |
| <value>extension</value> |
| <value>restriction</value> |
| <value>substitution</value> |
| </choice> |
| </oneOrMore> |
| </list> |
| </choice> |
| </define> |
| |
| <define name="element" txw:mode="inherit"> |
| <doc:p> |
| This describes the basic content model of an element element. It is |
| annotated, may have a fixed or default attribute, and may have nillable |
| and/or block attributes. Its type may be specified through a type |
| attribute, a local simple type or a local complex type - the choice |
| between these methods is something that cannot be indicated with XML |
| Schema. This content is optionally followed by some identify constraints. |
| </doc:p> |
| <ref name="annotated" /> |
| <ref name="fixedOrDefault" /> |
| <zeroOrMore> |
| <choice> |
| <attribute name="nillable"> |
| <data type="boolean" /> |
| </attribute> |
| <attribute name="block"> |
| <ref name="blockSet" /> |
| </attribute> |
| </choice> |
| </zeroOrMore> |
| <choice> |
| <empty /> |
| <attribute name="type"> |
| <data type="QName" /> |
| </attribute> |
| <ref name="simpleTypeHost" /> |
| <ref name="complexTypeHost" /> |
| </choice> |
| <!--zeroOrMore> |
| <ref name="identityConstraint" /> |
| </zeroOrMore--> |
| </define> |
| |
| <define name="topLevelElement"> |
| <doc:p> |
| This describes an element element that appears at the top level of the |
| schema. On top of the basic content for an element element, it has to |
| have a name, which is a unique identifier in the element symbol space. It |
| may have substitutionGroup, abstract and/or final attributes. |
| </doc:p> |
| <element name="element" |
| doc:href="http://www.w3.org/TR/xmlschema-1/#element-element"> |
| <ref name="element" /> |
| <attribute name="name"> |
| <data type="NCName" /> |
| </attribute> |
| <zeroOrMore> |
| <choice> |
| <attribute name="substitutionGroup"> |
| <data type="QName" /> |
| </attribute> |
| <attribute name="abstract"> |
| <data type="boolean" /> |
| </attribute> |
| <attribute name="final"> |
| <ref name="derivationSet" /> |
| </attribute> |
| </choice> |
| </zeroOrMore> |
| </element> |
| </define> |
| |
| <define name="localElement"> |
| <doc:p> |
| This describes an element element that appears locally, within a |
| complexType or group element. It may have minOccurs and/or maxOccurs |
| attributes. If it has a ref attribute, then that's all it can |
| have. Otherwise, it must have a name and specifies its type in the same |
| way as the basic element content model described above. It may in this |
| case also have a form element. These constraints on local elements |
| cannot be described within XML Schema. |
| </doc:p> |
| <element name="element" |
| doc:href="http://www.w3.org/TR/xmlschema-1/#element-element"> |
| <ref name="occurs" /> |
| <choice> |
| <attribute name="ref"> |
| <data type="QName" /> |
| </attribute> |
| <group> |
| <ref name="element" /> |
| <attribute name="name"> |
| <data type="NCName" /> |
| </attribute> |
| <optional> |
| <attribute name="form"> |
| <ref name="formChoice" /> |
| </attribute> |
| </optional> |
| </group> |
| </choice> |
| </element> |
| </define> |
| |
| <!--define name="namedGroup"> |
| <doc:p> |
| This describes an group element that appears at the top level of the |
| schema. It must have a name attribute, and must have one of an all, |
| choice or sequence element child. |
| </doc:p> |
| <element name="group" |
| doc:href="http://www.w3.org/TR/xmlschema-1/#element-group"> |
| <ref name="annotated" /> |
| <attribute name="name"> |
| <data type="NCName" /> |
| </attribute> |
| <choice> |
| <element name="all"> |
| <ref name="simpleExplicitGroup" /> <!- - RS - relaxed all content model - -> |
| </element> |
| <element name="choice"> |
| <ref name="simpleExplicitGroup" /> |
| </element> |
| <element name="sequence"> |
| <ref name="simpleExplicitGroup" /> |
| </element> |
| </choice> |
| </element> |
| </define--> |
| |
| <!--define name="groupRef"> |
| <doc:p> |
| This describes group element that occurs locally, referring to a |
| top-level named group. It may have occurrence attributes, and must have |
| a ref attribute. |
| </doc:p> |
| <element name="group" |
| doc:href="http://www.w3.org/TR/xmlschema-1/#element-group"> |
| <ref name="annotated" /> |
| <ref name="occurs" /> |
| <attribute name="ref"> |
| <data type="QName" /> |
| </attribute> |
| </element> |
| </define--> |
| |
| <define name="explicitGroup" txw:mode="inherit"> |
| <doc:p> |
| This gives the content of a model group (not a group element) in the |
| normal run of things. It has occurrence attributes and any number of |
| particles within it. |
| </doc:p> |
| <ref name="annotated" /> |
| <ref name="occurs" /> |
| <zeroOrMore> |
| <ref name="nestedParticle" /> |
| </zeroOrMore> |
| </define> |
| |
| <define name="simpleExplicitGroup"> |
| <doc:p> |
| This gives the content of a model group (not a group element) within a |
| named group - it differs from the above in that it doesn't have any |
| occurrence attributes. |
| </doc:p> |
| <ref name="annotated" /> |
| <zeroOrMore> |
| <ref name="nestedParticle" /> |
| </zeroOrMore> |
| </define> |
| |
| <define name="all"> |
| <doc:p> |
| This describes an all element that appears outside a named group (i.e. as |
| the content of a complexType element). It has the standard model for an |
| all element, but adds minOccurs and maxOccurs attributes which can only |
| take certain values. |
| </doc:p> |
| <element name="all" |
| doc:href="http://www.w3.org/TR/xmlschema-1/#element-all"> |
| <ref name="explicitGroup" /> |
| </element> |
| </define> |
| |
| <define name="choice"> |
| <doc:p> |
| This describes a choice element that appears outside a named group. |
| </doc:p> |
| <element name="choice" |
| doc:href="http://www.w3.org/TR/xmlschema-1/#element-choice"> |
| <ref name="explicitGroup" /> |
| </element> |
| </define> |
| |
| <define name="sequence"> |
| <doc:p> |
| This describes a sequence element that appears outside a named group. |
| </doc:p> |
| <element name="sequence" |
| doc:href="http://www.w3.org/TR/xmlschema-1/#element-sequence"> |
| <ref name="explicitGroup" /> |
| </element> |
| </define> |
| |
| <define name="wildcard" txw:mode="inherit"> |
| <doc:p> |
| This describes a wildcard element (i.e. any or anyAttribute). The |
| namespace attribute can take a list URIs interspersed with the keywords |
| '##targetNamespace' and/or '##local'. This RELAX NG schema, like the XML |
| Schema Recommendation, allows the keywords to be specified more than once |
| each within the list, if they're given. This model also specifies the |
| processContents attribute. |
| </doc:p> |
| <ref name="annotated" /> |
| <zeroOrMore> |
| <choice> |
| <attribute name="namespace"> |
| <choice> |
| <value type="token">##any</value> |
| <value type="token">##other</value> |
| <list> |
| <zeroOrMore> |
| <choice> |
| <data type="anyURI" /> |
| <value>##targetNamespace</value> |
| <value>##local</value> |
| </choice> |
| </zeroOrMore> |
| </list> |
| </choice> |
| </attribute> |
| <attribute name="processContents"> |
| <choice> |
| <value type="token">lax</value> |
| <value type="token">skip</value> |
| <value type="token">strict</value> |
| </choice> |
| </attribute> |
| </choice> |
| </zeroOrMore> |
| </define> |
| |
| <define name="any"> |
| <doc:p> |
| This describes an any element as a wildcard. |
| </doc:p> |
| <element name="any" |
| doc:href="http://www.w3.org/TR/xmlschema-1/#element-any"> |
| <ref name="wildcard" /> |
| <ref name="occurs" /> |
| </element> |
| </define> |
| |
| <!--define name="namedAttributeGroup"> |
| <doc:p> |
| This describes an attributeGroup element as it appears at the top level |
| of the schema. It must have a name attribute, and then contains |
| attribute declarations. |
| </doc:p> |
| <element name="attributeGroup" |
| doc:href="http://www.w3.org/TR/xmlschema-1/#element-attributeGroup"> |
| <ref name="annotated" /> |
| <attribute name="name"> |
| <data type="NCName" /> |
| </attribute> |
| <ref name="attrDecls" /> |
| </element> |
| </define--> |
| |
| <!--define name="attributeGroupRef"> |
| <doc:p> |
| This describes an attributeGroup element as it appears within a complex |
| type. It must have a ref attribute. |
| </doc:p> |
| <element name="attributeGroup" |
| doc:href="http://www.w3.org/TR/xmlschema-1/#element-attributeGroup"> |
| <ref name="annotated" /> |
| <attribute name="ref"> |
| <data type="QName" /> |
| </attribute> |
| </element> |
| </define--> |
| |
| <!--define name="include"> |
| <doc:p> |
| This describes an include element, which must have a schemaLocation |
| attribute. |
| </doc:p> |
| <element name="include" |
| doc:href="http://www.w3.org/TR/xmlschema-1/#element-include"> |
| <ref name="annotated" /> |
| <attribute name="schemaLocation"> |
| <data type="anyURI" /> |
| </attribute> |
| </element> |
| </define--> |
| |
| <!--define name="redefine"> |
| <doc:p> |
| This describes a redefine element, which must have a schemaLocation |
| attribute and can then contain any mix of annotations and redefinable |
| components. |
| </doc:p> |
| <element name="redefine" |
| doc:href="http://www.w3.org/TR/xmlschema-1/#element-redefine"> |
| <ref name="openAttrs" /> |
| <optional> |
| <attribute name="id"> |
| <data type="ID" /> |
| </attribute> |
| </optional> |
| <attribute name="schemaLocation"> |
| <data type="anyURI" /> |
| </attribute> |
| <zeroOrMore> |
| <choice> |
| <ref name="annotation" /> |
| <ref name="redefinable" /> |
| </choice> |
| </zeroOrMore> |
| </element> |
| </define--> |
| |
| <define name="import"> |
| <doc:p> |
| This describes an import element that's used when its parent schema |
| element specifies a targetNamespace. In these cases, the namespace |
| attribute on the import element is optional. |
| </doc:p> |
| <element name="import" |
| doc:href="http://www.w3.org/TR/xmlschema-1/#element-import"> |
| <ref name="annotated" /> |
| <optional> |
| <attribute name="schemaLocation"> |
| <data type="anyURI" /> |
| </attribute> |
| </optional> |
| <optional> |
| <attribute name="namespace"> |
| <data type="anyURI" /> |
| </attribute> |
| </optional> |
| </element> |
| </define> |
| |
| <!--define name="selector"> |
| <doc:p> |
| This describes a selector element. The xpath attribute is a simplified |
| XPath - the regular expression given here is the one from the XML Schema |
| for XML Schema. |
| </doc:p> |
| <element name="selector" |
| doc:href="http://www.w3.org/TR/xmlschema-1/#element-selector"> |
| <ref name="annotated" /> |
| <attribute name="xpath"> |
| <data type="token"> |
| <param name="pattern">(\.//)?(((child::)?((\i\c*:)?(\i\c*|\*)))|\.)(/(((child::)?((\i\c*:)?(\i\c*|\*)))|\.))*(\|(\.//)?(((child::)?((\i\c*:)?(\i\c*|\*)))|\.)(/(((child::)?((\i\c*:)?(\i\c*|\*)))|\.))*)*</param> |
| </data> |
| </attribute> |
| </element> |
| </define> |
| |
| <define name="field"> |
| <doc:p> |
| This describes a field element. The xpath attribute is a simplified |
| XPath - the regular expression given here is the one from the XML Schema |
| for XML Schema. |
| </doc:p> |
| <element name="field" |
| doc:href="http://www.w3.org/TR/xmlschema-1/#element-field"> |
| <ref name="annotated" /> |
| <attribute name="xpath"> |
| <data type="token"> |
| <param name="pattern">(\.//)?((((child::)?((\i\c*:)?(\i\c*|\*)))|\.)/)*((((child::)?((\i\c*:)?(\i\c*|\*)))|\.)|((attribute::|@)((\i\c*:)?(\i\c*|\*))))(\|(\.//)?((((child::)?((\i\c*:)?(\i\c*|\*)))|\.)/)*((((child::)?((\i\c*:)?(\i\c*|\*)))|\.)|((attribute::|@)((\i\c*:)?(\i\c*|\*)))))*</param> |
| </data> |
| </attribute> |
| </element> |
| </define> |
| |
| <define name="keybase" txw:mode="inherit"> |
| <doc:p> |
| This gives the basic content for identity constraints - a name attribute |
| that uniquely identifies the identity constraint, a selector element and |
| one or more field elements. |
| </doc:p> |
| <ref name="annotated" /> |
| <attribute name="name"> |
| <data type="NCName" /> |
| </attribute> |
| <ref name="selector" /> |
| <oneOrMore> |
| <ref name="field" /> |
| </oneOrMore> |
| </define> |
| |
| <define name="identityConstraint" txw:mode="inline"> |
| <doc:p> |
| This gives a model group for the three identity constraint elements, used |
| within the content of element elements. |
| </doc:p> |
| <choice> |
| <ref name="unique" /> |
| <ref name="key" /> |
| <ref name="keyref" /> |
| </choice> |
| </define> |
| |
| <define name="unique"> |
| <doc:p> |
| This describes a unique element. |
| </doc:p> |
| <element name="unique" |
| doc:href="http://www.w3.org/TR/xmlschema-1/#element-unique"> |
| <ref name="keybase" /> |
| </element> |
| </define> |
| |
| <define name="key"> |
| <doc:p> |
| This describes a key element. |
| </doc:p> |
| <element name="key" |
| doc:href="http://www.w3.org/TR/xmlschema-1/#element-key"> |
| <ref name="keybase" /> |
| </element> |
| </define> |
| |
| <define name="keyref"> |
| <doc:p> |
| This describes a keyref element. |
| </doc:p> |
| <element name="keyref" |
| doc:href="http://www.w3.org/TR/xmlschema-1/#element-keyref"> |
| <ref name="keybase" /> |
| <attribute name="refer"> |
| <data type="QName" /> |
| </attribute> |
| </element> |
| </define--> |
| |
| <!--define name="notation"> |
| <doc:p> |
| This describes a notation element. The names of notation elements are |
| unique in the notation symbol space. The public attribute is required, |
| and the system attribute is optional. |
| </doc:p> |
| <element name="notation" |
| doc:href="http://www.w3.org/TR/xmlschema-1/#element-notation"> |
| <ref name="annotated" /> |
| <attribute name="name"> |
| <data type="NCName" /> |
| </attribute> |
| <attribute name="public"> |
| <data type="token" /> |
| </attribute> |
| <optional> |
| <attribute name="system"> |
| <data type="anyURI" /> |
| </attribute> |
| </optional> |
| </element> |
| </define--> |
| |
| <define name="appinfoContent"> |
| <doc:p> |
| This is designed to describe the content of the appinfo elements in the |
| schema. At the moment this allows any mixed content without validation. |
| Note that this is fairly complex compared to the XML Schema equivalent, |
| which would be a single any element. |
| </doc:p> |
| <ref name="anyContent" /> |
| </define> |
| |
| <define name="anyContent"> |
| <empty/> <!-- KK don't care --> |
| <!--mixed> |
| <zeroOrMore> |
| <element> |
| <anyName /> |
| <zeroOrMore> |
| <attribute> |
| <anyName /> |
| </attribute> |
| </zeroOrMore> |
| <ref name="anyContent" /> |
| <empty /> |
| </element> |
| </zeroOrMore> |
| </mixed--> |
| </define> |
| |
| <define name="appinfo"> |
| <doc:p> |
| This describes an appinfo element. It has an optional source attribute |
| and can currently contain anything at all. |
| </doc:p> |
| <element name="appinfo" |
| doc:href="http://www.w3.org/TR/xmlschema-1/#element-appinfo"> |
| <optional> |
| <attribute name="source"> |
| <data type="anyURI" /> |
| </attribute> |
| </optional> |
| <ref name="appinfoContent" /> |
| </element> |
| </define> |
| |
| <define name="documentationContent"> |
| <doc:p> |
| This is designed to describe the content of the documentation elements in |
| the schema. At the moment this allows any mixed content without |
| validation. Note that this is fairly complex compared to the XML Schema |
| equivalent, which would be a single any element. |
| </doc:p> |
| <ref name="anyContent" /> |
| </define> |
| |
| <define name="documentation"> |
| <doc:p> |
| This describes a documentation element. It has optional source |
| and xml:lang attributes and can currently contain anything at all. |
| </doc:p> |
| <element name="documentation" |
| doc:href="http://www.w3.org/TR/xmlschema-1/#element-documentation"> |
| <zeroOrMore> |
| <choice> |
| <attribute name="source"> |
| <data type="anyURI" /> |
| </attribute> |
| <attribute name="xml:lang"> |
| <data type="language" /> |
| </attribute> |
| </choice> |
| </zeroOrMore> |
| <ref name="documentationContent" /> |
| </element> |
| </define> |
| |
| <define name="annotation"> |
| <doc:p> |
| This describes an annotation element. It can have any attributes, may |
| have an id attribute, and contains any number of documentation or appinfo |
| elements. |
| </doc:p> |
| <element name="annotation" |
| doc:href="http://www.w3.org/TR/xmlschema-1/#element-annotation"> |
| <ref name="openAttrs" /> |
| <optional> |
| <attribute name="id"> |
| <data type="ID" /> |
| </attribute> |
| </optional> |
| <zeroOrMore> |
| <choice> |
| <ref name="documentation" /> |
| <ref name="appinfo" /> |
| </choice> |
| </zeroOrMore> |
| </element> |
| </define> |
| |
| <define name="simpleDerivation" txw:mode="inline"> |
| <doc:p> |
| This gives the various types of derivation of simple types. |
| </doc:p> |
| <choice> |
| <ref name="simpleRestriction" /> |
| <ref name="list" /> |
| <ref name="union" /> |
| </choice> |
| </define> |
| |
| <define name="simpleDerivationSet"> |
| <doc:p> |
| This specifies the values of the final attribute for simple types. This |
| RELAX NG schema for XML Schema, like the XML Schema Recommendation, allows |
| the keywords 'list', 'union' and 'restriction' to appear more than once |
| within the list. |
| </doc:p> |
| <choice> |
| <value type="token">#all</value> |
| <list> |
| <zeroOrMore> |
| <choice> |
| <value>list</value> |
| <value>union</value> |
| <value>restriction</value> |
| </choice> |
| </zeroOrMore> |
| </list> |
| </choice> |
| </define> |
| |
| <define name="simpleTypeHost" txw:mode="inherit"> |
| <ref name="typeHost" /> |
| <ref name="simpleType" /> |
| </define> |
| |
| <define name="simpleType" txw:mode="inherit"> |
| <doc:p> |
| This gives the basic content of a simple type. |
| </doc:p> |
| <element name="simpleType" |
| doc:href="http://www.w3.org/TR/xmlschema-1/#element-simpleType"> |
| <ref name="annotated" /> |
| <ref name="simpleDerivation" /> |
| <optional> |
| <attribute name="name"> |
| <data type="NCName" /> |
| </attribute> |
| </optional> |
| <optional> |
| <attribute name="final"> |
| <ref name="simpleDerivationSet" /> |
| </attribute> |
| </optional> |
| </element> |
| </define> |
| |
| <!--define name="rangeFacets" txw:mode="inherit"> |
| <doc:p> |
| This describes the relationship between the various range facets. Only |
| one of minExclusive and minInclusive can be present, and only one of |
| maxExclusive and maxInclusive can be present. This is a constraint that |
| can't easily be expressed using XML Schema. This RELAX NG schema |
| for XML Schema is a little more restrictive than the XML Schema |
| Recommendation in that it also forces there to be a maximum of one of |
| each of these types of facets. |
| </doc:p> |
| <interleave> |
| <optional> |
| <choice> |
| <ref name="minExclusive" /> |
| <ref name="minInclusive" /> |
| </choice> |
| </optional> |
| <optional> |
| <choice> |
| <ref name="maxExclusive" /> |
| <ref name="maxInclusive" /> |
| </choice> |
| </optional> |
| </interleave> |
| </define> |
| |
| <define name="digitFacets" txw:mode="inherit"> |
| <doc:p> |
| This specifies optional totalDigits and fractionDigits elements. This |
| RELAX NG schema for XML Schema is a little more restrictive than the XML |
| Schema Recommendation in that it also forces there to be a maximum of one |
| of each of these types of facets. |
| </doc:p> |
| <optional> |
| <ref name="totalDigits" /> |
| </optional> |
| <optional> |
| <ref name="fractionDigits" /> |
| </optional> |
| </define> |
| |
| <define name="lengthFacets" txw:mode="inherit"> |
| <doc:p> |
| This specifies optional length, minLength and maxLength elements. This |
| RELAX NG schema for XML Schema is a little more restrictive than the XML |
| Schema Recommendation in that it also forces there to be a maximum of one |
| of each of these types of facets, and says that if a length element is |
| given, then neither minLength nor maxLength should be present. |
| </doc:p> |
| <choice> |
| <ref name="length" /> |
| <interleave> |
| <optional> |
| <ref name="minLength" /> |
| </optional> |
| <optional> |
| <ref name="maxLength" /> |
| </optional> |
| </interleave> |
| </choice> |
| </define> |
| |
| <define name="commonFacets" txw:mode="inherit"> |
| <doc:p> |
| This specifies zero or more enumeration or pattern elements and an |
| optional whiteSpace element. This RELAX NG schema for XML Schema is a |
| little more restrictive than the XML Schema Recommendation in that it |
| also forces there to be a maximum of one whiteSpace element within the |
| facets. Note that the whiteSpace facet is constrained to have a value of |
| 'collapse'. |
| </doc:p> |
| <zeroOrMore> |
| <ref name="enumeration" /> |
| </zeroOrMore> |
| <optional> |
| <ref name="whiteSpaceCollapse" /> |
| </optional> |
| <zeroOrMore> |
| <ref name="pattern" /> |
| </zeroOrMore> |
| </define--> |
| |
| <define name="simpleRestrictionModel"> |
| <doc:p> |
| This specifies the types of facets that are valid in restrictions on the |
| built-in data types. This can only perform rudimentary checking, but |
| should be enough in most circumstances. Note that for xs:anySimpleType |
| and xs:string, the whiteSpace facet can take any value, for |
| xs:normalizedString it can be 'replace' or 'collapse', and for all other |
| built-in types it has to be 'collapse'. |
| </doc:p> |
| <choice> |
| <attribute name="base"> |
| <data type="QName" /> |
| </attribute> |
| <ref name="simpleTypeHost" /> |
| </choice> |
| <interleave> |
| <!--ref name="rangeFacets" /> |
| <ref name="digitFacets" /> |
| <ref name="lengthFacets" /> |
| <optional> |
| <ref name="whiteSpace" /> |
| </optional--> |
| <zeroOrMore> |
| <ref name="enumeration" /> |
| </zeroOrMore> |
| <!--zeroOrMore> |
| <ref name="pattern" /> |
| </zeroOrMore--> |
| </interleave> |
| </define> |
| |
| <define name="list"> |
| <doc:p> |
| This describes a list element. It can either specify a local simple type |
| or have a itemType attribute. This constraint cannot be expressed in XML |
| Schema. |
| </doc:p> |
| <element name="list" |
| doc:href="http://www.w3.org/TR/xmlschema-1/#element-list"> |
| <ref name="annotated" /> |
| <choice> |
| <ref name="simpleTypeHost" /> |
| <attribute name="itemType"> |
| <data type="QName" /> |
| </attribute> |
| </choice> |
| </element> |
| </define> |
| |
| <define name="union"> |
| <doc:p> |
| This describes a union element. If the memberTypes attribute is missing |
| or empty, then it must contain one or more simpleType elements; if |
| it's present, then it can contain simpleType elements or list simple |
| types in the memberTypes attribute. This constraint cannot be expressed |
| in XML Schema. |
| </doc:p> |
| <element name="union" |
| doc:href="http://www.w3.org/TR/xmlschema-1/#element-union"> |
| <ref name="annotated" /> |
| <choice> |
| <group> |
| <attribute name="memberTypes"> |
| <list> |
| <oneOrMore> |
| <data type="QName" /> |
| </oneOrMore> |
| </list> |
| </attribute> |
| <zeroOrMore> |
| <ref name="simpleTypeHost" /> |
| </zeroOrMore> |
| </group> |
| <group> |
| <optional> |
| <attribute name="memberTypes"> |
| <empty /> |
| </attribute> |
| </optional> |
| <oneOrMore> |
| <ref name="simpleTypeHost" /> |
| </oneOrMore> |
| </group> |
| </choice> |
| </element> |
| </define> |
| |
| <define name="facet" txw:mode="inherit"> |
| <doc:p> |
| This is the basic content of a facet. It has an optional fixed attribute. |
| </doc:p> |
| <ref name="annotated" /> |
| <optional> |
| <attribute name="fixed"> |
| <data type="boolean" /> |
| </attribute> |
| </optional> |
| </define> |
| |
| <define name="noFixedFacet" txw:mode="inherit"> |
| <doc:p> |
| This is the content of a facet that cannot be fixed (enumeration or |
| pattern). It has a value attribute that can take any kind of value. |
| </doc:p> |
| <ref name="annotated" /> |
| <attribute name="value" /> |
| </define> |
| |
| <!--define name="rangeFacet"> |
| <doc:p> |
| This is the content of a range facet. The value must be one of the data |
| types shown (as these are the only types of data that accept ranges). I |
| haven't gone so far as to indicate the data type of the value |
| attribute of a range facet according to the base type as this would be |
| very complicated (although it would be possible in RELAX NG). |
| </doc:p> |
| <ref name="facet" /> |
| <attribute name="value"> |
| <choice> |
| <data type="decimal" /> |
| <data type="float" /> |
| <data type="double" /> |
| <data type="duration" /> |
| <data type="dateTime" /> |
| <data type="time" /> |
| <data type="date" /> |
| <data type="gYearMonth" /> |
| <data type="gYear" /> |
| <data type="gMonthDay" /> |
| <data type="gMonth" /> |
| <data type="gDay" /> |
| </choice> |
| </attribute> |
| </define> |
| |
| <define name="minExclusive"> |
| <doc:p> |
| This describes a minExclusive element. |
| </doc:p> |
| <element name="minExclusive" |
| doc:href="http://www.w3.org/TR/2001/REC-xmlschema-2-20010502/datatypes.html#element-minExclusive"> |
| <ref name="rangeFacet" /> |
| </element> |
| </define> |
| |
| <define name="minInclusive"> |
| <doc:p> |
| This describes a minInclusive element. |
| </doc:p> |
| <element name="minInclusive" |
| doc:href="http://www.w3.org/TR/2001/REC-xmlschema-2-20010502/datatypes.html#element-minInclusive"> |
| <ref name="rangeFacet" /> |
| </element> |
| </define> |
| |
| <define name="maxExclusive"> |
| <doc:p> |
| This describes a maxExclusive element. |
| </doc:p> |
| <element name="maxExclusive" |
| doc:href="http://www.w3.org/TR/2001/REC-xmlschema-2-20010502/datatypes.html#element-maxExclusive"> |
| <ref name="rangeFacet" /> |
| </element> |
| </define> |
| |
| <define name="maxInclusive"> |
| <doc:p> |
| This describes a maxInclusive element. |
| </doc:p> |
| <element name="maxInclusive" |
| doc:href="http://www.w3.org/TR/2001/REC-xmlschema-2-20010502/datatypes.html#element-maxInclusive"> |
| <ref name="rangeFacet" /> |
| </element> |
| </define> |
| |
| <define name="numFacet"> |
| <doc:p> |
| This is the content of a numerical facet. |
| </doc:p> |
| <ref name="facet" /> |
| <attribute name="value"> |
| <data type="nonNegativeInteger" /> |
| </attribute> |
| </define> |
| |
| <define name="totalDigits"> |
| <doc:p> |
| This describes a totalDigits element. The value attribute must take a |
| positive integer. |
| </doc:p> |
| <element name="totalDigits" |
| doc:href="http://www.w3.org/TR/2001/REC-xmlschema-2-20010502/datatypes.html#element-totalDigits"> |
| <ref name="facet" /> |
| <attribute name="value"> |
| <data type="positiveInteger" /> |
| </attribute> |
| </element> |
| </define> |
| |
| <define name="fractionDigits"> |
| <doc:p> |
| This describes a fractionDigits element. |
| </doc:p> |
| <element name="fractionDigits" |
| doc:href="http://www.w3.org/TR/2001/REC-xmlschema-2-20010502/datatypes.html#element-fractionDigits"> |
| <ref name="numFacet" /> |
| </element> |
| </define> |
| |
| <define name="length"> |
| <doc:p> |
| This describes a length element. |
| </doc:p> |
| <element name="length" |
| doc:href="http://www.w3.org/TR/2001/REC-xmlschema-2-20010502/datatypes.html#element-length"> |
| <ref name="numFacet" /> |
| </element> |
| </define> |
| |
| <define name="minLength"> |
| <doc:p> |
| This describes a minLength element. |
| </doc:p> |
| <element name="minLength" |
| doc:href="http://www.w3.org/TR/2001/REC-xmlschema-2-20010502/datatypes.html#element-minLength"> |
| <ref name="numFacet" /> |
| </element> |
| </define> |
| |
| <define name="maxLength"> |
| <doc:p> |
| This describes a maxLength element. |
| </doc:p> |
| <element name="maxLength" |
| doc:href="http://www.w3.org/TR/2001/REC-xmlschema-2-20010502/datatypes.html#element-maxLength"> |
| <ref name="numFacet" /> |
| </element> |
| </define--> |
| |
| <define name="enumeration"> |
| <doc:p> |
| This describes an enumeration element. |
| </doc:p> |
| <element name="enumeration" |
| doc:href="http://www.w3.org/TR/2001/REC-xmlschema-2-20010502/datatypes.html#element-enumeration"> |
| <ref name="noFixedFacet" /> |
| </element> |
| </define> |
| |
| <!--define name="whiteSpace"> |
| <doc:p> |
| This describes a whiteSpace element that can take any of the permitted |
| values. |
| </doc:p> |
| <element name="whiteSpace" |
| doc:href="http://www.w3.org/TR/2001/REC-xmlschema-2-20010502/datatypes.html#element-whiteSpace"> |
| <ref name="facet" /> |
| <attribute name="value"> |
| <choice> |
| <value type="token">preserve</value> |
| <value type="token">replace</value> |
| <value type="token">collapse</value> |
| </choice> |
| </attribute> |
| </element> |
| </define> |
| |
| <define name="whiteSpaceReplaceOrCollapse"> |
| <doc:p> |
| This describes a whiteSpace element that can only take the values |
| 'replace' or 'collapse'. |
| </doc:p> |
| <element name="whiteSpace" |
| doc:href="http://www.w3.org/TR/2001/REC-xmlschema-2-20010502/datatypes.html#element-whiteSpace"> |
| <ref name="facet" /> |
| <attribute name="value"> |
| <choice> |
| <value type="token">replace</value> |
| <value type="token">collapse</value> |
| </choice> |
| </attribute> |
| </element> |
| </define> |
| |
| <define name="whiteSpaceCollapse"> |
| <doc:p> |
| This describes a whiteSpace element that can only take the value |
| 'collapse'. |
| </doc:p> |
| <element name="whiteSpace" |
| doc:href="http://www.w3.org/TR/2001/REC-xmlschema-2-20010502/datatypes.html#element-whiteSpace"> |
| <ref name="facet" /> |
| <attribute name="value"> |
| <value type="token">collapse</value> |
| </attribute> |
| </element> |
| </define> |
| |
| <define name="pattern"> |
| <doc:p> |
| This describes a pattern element. |
| </doc:p> |
| <element name="pattern" |
| doc:href="http://www.w3.org/TR/2001/REC-xmlschema-2-20010502/datatypes.html#element-pattern"> |
| <ref name="noFixedFacet" /> |
| </element> |
| </define--> |
| |
| </grammar> |