403 lines
16 KiB
DTD
403 lines
16 KiB
DTD
<!-- 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' >
|