|  | <!-- 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' > |