| <!-- DTD for XML Schemas: Part 1: Structures | |
| Public Identifier: "-//W3C//DTD XMLSCHEMA 200102//EN" | |
| Official Location: http://www.w3.org/2001/XMLSchema.dtd --> | |
| <!-- $Id: XMLSchema.dtd,v 1.31 2001/10/24 15:50:16 ht Exp $ --> | |
| <!-- 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; ((%annotation;)?, (%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; ((%annotation;)?, (%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; ((%annotation;)?, (%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' > |