| <!-- DTD for XML Schemas: Part 1: Structures |
| Public Identifier: "-//W3C//DTD XMLSCHEMA 200102//EN" |
| Official Location: http://www.w3.org/2001/XMLSchema.dtd --> |
| <!-- Note this DTD is NOT normative, or even definitive. --> <!--d--> |
| <!-- prose copy in the structures REC is the definitive version --> <!--d--> |
| <!-- (which shouldn't differ from this one except for this --> <!--d--> |
| <!-- comment and entity expansions, but just in case) --> <!--d--> |
| <!-- With the exception of cases with multiple namespace |
| prefixes for the XML Schema namespace, any XML document which is |
| not valid per this DTD given redefinitions in its internal subset of the |
| 'p' and 's' parameter entities below appropriate to its namespace |
| declaration of the XML Schema namespace is almost certainly not |
| a valid schema. --> |
| |
| <!-- The simpleType element and its constituent parts |
| are defined in XML Schema: Part 2: Datatypes --> |
| <!ENTITY % xs-datatypes PUBLIC 'datatypes' 'datatypes.dtd' > |
| |
| <!ENTITY % p 'xs:'> <!-- can be overriden in the internal subset of a |
| schema document to establish a different |
| namespace prefix --> |
| <!ENTITY % s ':xs'> <!-- if %p is defined (e.g. as foo:) then you must |
| also define %s as the suffix for the appropriate |
| namespace declaration (e.g. :foo) --> |
| <!ENTITY % nds 'xmlns%s;'> |
| |
| <!-- Define all the element names, with optional prefix --> |
| <!ENTITY % schema "%p;schema"> |
| <!ENTITY % complexType "%p;complexType"> |
| <!ENTITY % complexContent "%p;complexContent"> |
| <!ENTITY % simpleContent "%p;simpleContent"> |
| <!ENTITY % extension "%p;extension"> |
| <!ENTITY % element "%p;element"> |
| <!ENTITY % unique "%p;unique"> |
| <!ENTITY % key "%p;key"> |
| <!ENTITY % keyref "%p;keyref"> |
| <!ENTITY % selector "%p;selector"> |
| <!ENTITY % field "%p;field"> |
| <!ENTITY % group "%p;group"> |
| <!ENTITY % all "%p;all"> |
| <!ENTITY % choice "%p;choice"> |
| <!ENTITY % sequence "%p;sequence"> |
| <!ENTITY % any "%p;any"> |
| <!ENTITY % anyAttribute "%p;anyAttribute"> |
| <!ENTITY % attribute "%p;attribute"> |
| <!ENTITY % attributeGroup "%p;attributeGroup"> |
| <!ENTITY % include "%p;include"> |
| <!ENTITY % import "%p;import"> |
| <!ENTITY % redefine "%p;redefine"> |
| <!ENTITY % notation "%p;notation"> |
| |
| <!-- annotation elements --> |
| <!ENTITY % annotation "%p;annotation"> |
| <!ENTITY % appinfo "%p;appinfo"> |
| <!ENTITY % documentation "%p;documentation"> |
| |
| <!-- Customisation entities for the ATTLIST of each element type. |
| Define one of these if your schema takes advantage of the |
| anyAttribute='##other' in the schema for schemas --> |
| |
| <!ENTITY % schemaAttrs ''> |
| <!ENTITY % complexTypeAttrs ''> |
| <!ENTITY % complexContentAttrs ''> |
| <!ENTITY % simpleContentAttrs ''> |
| <!ENTITY % extensionAttrs ''> |
| <!ENTITY % elementAttrs ''> |
| <!ENTITY % groupAttrs ''> |
| <!ENTITY % allAttrs ''> |
| <!ENTITY % choiceAttrs ''> |
| <!ENTITY % sequenceAttrs ''> |
| <!ENTITY % anyAttrs ''> |
| <!ENTITY % anyAttributeAttrs ''> |
| <!ENTITY % attributeAttrs ''> |
| <!ENTITY % attributeGroupAttrs ''> |
| <!ENTITY % uniqueAttrs ''> |
| <!ENTITY % keyAttrs ''> |
| <!ENTITY % keyrefAttrs ''> |
| <!ENTITY % selectorAttrs ''> |
| <!ENTITY % fieldAttrs ''> |
| <!ENTITY % includeAttrs ''> |
| <!ENTITY % importAttrs ''> |
| <!ENTITY % redefineAttrs ''> |
| <!ENTITY % notationAttrs ''> |
| <!ENTITY % annotationAttrs ''> |
| <!ENTITY % appinfoAttrs ''> |
| <!ENTITY % documentationAttrs ''> |
| |
| <!ENTITY % complexDerivationSet "CDATA"> |
| <!-- #all or space-separated list drawn from derivationChoice --> |
| <!ENTITY % blockSet "CDATA"> |
| <!-- #all or space-separated list drawn from |
| derivationChoice + 'substitution' --> |
| |
| <!ENTITY % mgs '%all; | %choice; | %sequence;'> |
| <!ENTITY % cs '%choice; | %sequence;'> |
| <!ENTITY % formValues '(qualified|unqualified)'> |
| |
| |
| <!ENTITY % attrDecls '((%attribute;| %attributeGroup;)*,(%anyAttribute;)?)'> |
| |
| <!ENTITY % particleAndAttrs '((%mgs; | %group;)?, %attrDecls;)'> |
| |
| <!-- This is used in part2 --> |
| <!ENTITY % restriction1 '((%mgs; | %group;)?)'> |
| |
| %xs-datatypes; |
| |
| <!-- the duplication below is to produce an unambiguous content model |
| which allows annotation everywhere --> |
| <!ELEMENT %schema; ((%include; | %import; | %redefine; | %annotation;)*, |
| ((%simpleType; | %complexType; |
| | %element; | %attribute; |
| | %attributeGroup; | %group; |
| | %notation; ), |
| (%annotation;)*)* )> |
| <!ATTLIST %schema; |
| targetNamespace %URIref; #IMPLIED |
| version CDATA #IMPLIED |
| %nds; %URIref; #FIXED 'http://www.w3.org/2001/XMLSchema' |
| xmlns CDATA #IMPLIED |
| finalDefault %complexDerivationSet; '' |
| blockDefault %blockSet; '' |
| id ID #IMPLIED |
| elementFormDefault %formValues; 'unqualified' |
| attributeFormDefault %formValues; 'unqualified' |
| xml:lang CDATA #IMPLIED |
| %schemaAttrs;> |
| <!-- Note the xmlns declaration is NOT in the Schema for Schemas, |
| because at the Infoset level where schemas operate, |
| xmlns(:prefix) is NOT an attribute! --> |
| <!-- The declaration of xmlns is a convenience for schema authors --> |
| |
| <!-- The id attribute here and below is for use in external references |
| from non-schemas using simple fragment identifiers. |
| It is NOT used for schema-to-schema reference, internal or |
| external. --> |
| |
| <!-- a type is a named content type specification which allows attribute |
| declarations--> |
| <!-- --> |
| |
| <!ELEMENT %complexType; ((%annotation;)?, |
| (%simpleContent;|%complexContent;| |
| %particleAndAttrs;))> |
| |
| <!ATTLIST %complexType; |
| name %NCName; #IMPLIED |
| id ID #IMPLIED |
| abstract %boolean; #IMPLIED |
| final %complexDerivationSet; #IMPLIED |
| block %complexDerivationSet; #IMPLIED |
| mixed (true|false) 'false' |
| %complexTypeAttrs;> |
| |
| <!-- particleAndAttrs is shorthand for a root type --> |
| <!-- mixed is disallowed if simpleContent, overriden if complexContent |
| has one too. --> |
| |
| <!-- If anyAttribute appears in one or more referenced attributeGroups |
| and/or explicitly, the intersection of the permissions is used --> |
| |
| <!ELEMENT %complexContent; (%restriction;|%extension;)> |
| <!ATTLIST %complexContent; |
| mixed (true|false) #IMPLIED |
| id ID #IMPLIED |
| %complexContentAttrs;> |
| |
| <!-- restriction should use the branch defined above, not the simple |
| one from part2; extension should use the full model --> |
| |
| <!ELEMENT %simpleContent; (%restriction;|%extension;)> |
| <!ATTLIST %simpleContent; |
| id ID #IMPLIED |
| %simpleContentAttrs;> |
| |
| <!-- restriction should use the simple branch from part2, not the |
| one defined above; extension should have no particle --> |
| |
| <!ELEMENT %extension; (%particleAndAttrs;)> |
| <!ATTLIST %extension; |
| base %QName; #REQUIRED |
| id ID #IMPLIED |
| %extensionAttrs;> |
| |
| <!-- an element is declared by either: |
| a name and a type (either nested or referenced via the type attribute) |
| or a ref to an existing element declaration --> |
| |
| <!ELEMENT %element; ((%annotation;)?, (%complexType;| %simpleType;)?, |
| (%unique; | %key; | %keyref;)*)> |
| <!-- simpleType or complexType only if no type|ref attribute --> |
| <!-- ref not allowed at top level --> |
| <!ATTLIST %element; |
| name %NCName; #IMPLIED |
| id ID #IMPLIED |
| ref %QName; #IMPLIED |
| type %QName; #IMPLIED |
| minOccurs %nonNegativeInteger; #IMPLIED |
| maxOccurs CDATA #IMPLIED |
| nillable %boolean; #IMPLIED |
| substitutionGroup %QName; #IMPLIED |
| abstract %boolean; #IMPLIED |
| final %complexDerivationSet; #IMPLIED |
| block %blockSet; #IMPLIED |
| default CDATA #IMPLIED |
| fixed CDATA #IMPLIED |
| form %formValues; #IMPLIED |
| %elementAttrs;> |
| <!-- type and ref are mutually exclusive. |
| name and ref are mutually exclusive, one is required --> |
| <!-- In the absence of type AND ref, type defaults to type of |
| substitutionGroup, if any, else the ur-type, i.e. unconstrained --> |
| <!-- default and fixed are mutually exclusive --> |
| |
| <!ELEMENT %group; ((%annotation;)?,(%mgs;)?)> |
| <!ATTLIST %group; |
| name %NCName; #IMPLIED |
| ref %QName; #IMPLIED |
| minOccurs %nonNegativeInteger; #IMPLIED |
| maxOccurs CDATA #IMPLIED |
| id ID #IMPLIED |
| %groupAttrs;> |
| |
| <!ELEMENT %all; ((%annotation;)?, (%element;)*)> |
| <!ATTLIST %all; |
| minOccurs (1) #IMPLIED |
| maxOccurs (1) #IMPLIED |
| id ID #IMPLIED |
| %allAttrs;> |
| |
| <!ELEMENT %choice; ((%annotation;)?, (%element;| %group;| %cs; | %any;)*)> |
| <!ATTLIST %choice; |
| minOccurs %nonNegativeInteger; #IMPLIED |
| maxOccurs CDATA #IMPLIED |
| id ID #IMPLIED |
| %choiceAttrs;> |
| |
| <!ELEMENT %sequence; ((%annotation;)?, (%element;| %group;| %cs; | %any;)*)> |
| <!ATTLIST %sequence; |
| minOccurs %nonNegativeInteger; #IMPLIED |
| maxOccurs CDATA #IMPLIED |
| id ID #IMPLIED |
| %sequenceAttrs;> |
| |
| <!-- an anonymous grouping in a model, or |
| a top-level named group definition, or a reference to same --> |
| |
| <!-- Note that if order is 'all', group is not allowed inside. |
| If order is 'all' THIS group must be alone (or referenced alone) at |
| the top level of a content model --> |
| <!-- If order is 'all', minOccurs==maxOccurs==1 on element/any inside --> |
| <!-- Should allow minOccurs=0 inside order='all' . . . --> |
| |
| <!ELEMENT %any; (%annotation;)?> |
| <!ATTLIST %any; |
| namespace CDATA '##any' |
| processContents (skip|lax|strict) 'strict' |
| minOccurs %nonNegativeInteger; '1' |
| maxOccurs CDATA '1' |
| id ID #IMPLIED |
| %anyAttrs;> |
| |
| <!-- namespace is interpreted as follows: |
| ##any - - any non-conflicting WFXML at all |
| |
| ##other - - any non-conflicting WFXML from namespace other |
| than targetNamespace |
| |
| ##local - - any unqualified non-conflicting WFXML/attribute |
| one or - - any non-conflicting WFXML from |
| more URI the listed namespaces |
| references |
| |
| ##targetNamespace ##local may appear in the above list, |
| with the obvious meaning --> |
| |
| <!ELEMENT %anyAttribute; (%annotation;)?> |
| <!ATTLIST %anyAttribute; |
| namespace CDATA '##any' |
| processContents (skip|lax|strict) 'strict' |
| id ID #IMPLIED |
| %anyAttributeAttrs;> |
| <!-- namespace is interpreted as for 'any' above --> |
| |
| <!-- simpleType only if no type|ref attribute --> |
| <!-- ref not allowed at top level, name iff at top level --> |
| <!ELEMENT %attribute; ((%annotation;)?, (%simpleType;)?)> |
| <!ATTLIST %attribute; |
| name %NCName; #IMPLIED |
| id ID #IMPLIED |
| ref %QName; #IMPLIED |
| type %QName; #IMPLIED |
| use (prohibited|optional|required) #IMPLIED |
| default CDATA #IMPLIED |
| fixed CDATA #IMPLIED |
| form %formValues; #IMPLIED |
| %attributeAttrs;> |
| <!-- type and ref are mutually exclusive. |
| name and ref are mutually exclusive, one is required --> |
| <!-- default for use is optional when nested, none otherwise --> |
| <!-- default and fixed are mutually exclusive --> |
| <!-- type attr and simpleType content are mutually exclusive --> |
| |
| <!-- an attributeGroup is a named collection of attribute decls, or a |
| reference thereto --> |
| <!ELEMENT %attributeGroup; ((%annotation;)?, |
| (%attribute; | %attributeGroup;)*, |
| (%anyAttribute;)?) > |
| <!ATTLIST %attributeGroup; |
| name %NCName; #IMPLIED |
| id ID #IMPLIED |
| ref %QName; #IMPLIED |
| %attributeGroupAttrs;> |
| |
| <!-- ref iff no content, no name. ref iff not top level --> |
| |
| <!-- better reference mechanisms --> |
| <!ELEMENT %unique; ((%annotation;)?, %selector;, (%field;)+)> |
| <!ATTLIST %unique; |
| name %NCName; #REQUIRED |
| id ID #IMPLIED |
| %uniqueAttrs;> |
| |
| <!ELEMENT %key; ((%annotation;)?, %selector;, (%field;)+)> |
| <!ATTLIST %key; |
| name %NCName; #REQUIRED |
| id ID #IMPLIED |
| %keyAttrs;> |
| |
| <!ELEMENT %keyref; ((%annotation;)?, %selector;, (%field;)+)> |
| <!ATTLIST %keyref; |
| name %NCName; #REQUIRED |
| refer %QName; #REQUIRED |
| id ID #IMPLIED |
| %keyrefAttrs;> |
| |
| <!ELEMENT %selector; ((%annotation;)?)> |
| <!ATTLIST %selector; |
| xpath %XPathExpr; #REQUIRED |
| id ID #IMPLIED |
| %selectorAttrs;> |
| <!ELEMENT %field; ((%annotation;)?)> |
| <!ATTLIST %field; |
| xpath %XPathExpr; #REQUIRED |
| id ID #IMPLIED |
| %fieldAttrs;> |
| |
| <!-- Schema combination mechanisms --> |
| <!ELEMENT %include; (%annotation;)?> |
| <!ATTLIST %include; |
| schemaLocation %URIref; #REQUIRED |
| id ID #IMPLIED |
| %includeAttrs;> |
| |
| <!ELEMENT %import; (%annotation;)?> |
| <!ATTLIST %import; |
| namespace %URIref; #IMPLIED |
| schemaLocation %URIref; #IMPLIED |
| id ID #IMPLIED |
| %importAttrs;> |
| |
| <!ELEMENT %redefine; (%annotation; | %simpleType; | %complexType; | |
| %attributeGroup; | %group;)*> |
| <!ATTLIST %redefine; |
| schemaLocation %URIref; #REQUIRED |
| id ID #IMPLIED |
| %redefineAttrs;> |
| |
| <!ELEMENT %notation; (%annotation;)?> |
| <!ATTLIST %notation; |
| name %NCName; #REQUIRED |
| id ID #IMPLIED |
| public CDATA #REQUIRED |
| system %URIref; #IMPLIED |
| %notationAttrs;> |
| |
| <!-- Annotation is either application information or documentation --> |
| <!-- By having these here they are available for datatypes as well |
| as all the structures elements --> |
| |
| <!ELEMENT %annotation; (%appinfo; | %documentation;)*> |
| <!ATTLIST %annotation; %annotationAttrs;> |
| |
| <!-- User must define annotation elements in internal subset for this |
| to work --> |
| <!ELEMENT %appinfo; ANY> <!-- too restrictive --> |
| <!ATTLIST %appinfo; |
| source %URIref; #IMPLIED |
| id ID #IMPLIED |
| %appinfoAttrs;> |
| <!ELEMENT %documentation; ANY> <!-- too restrictive --> |
| <!ATTLIST %documentation; |
| source %URIref; #IMPLIED |
| id ID #IMPLIED |
| xml:lang CDATA #IMPLIED |
| %documentationAttrs;> |
| |
| <!NOTATION XMLSchemaStructures PUBLIC |
| 'structures' 'http://www.w3.org/2001/XMLSchema.xsd' > |
| <!NOTATION XML PUBLIC |
| 'REC-xml-1998-0210' 'http://www.w3.org/TR/1998/REC-xml-19980210' > |