1 <!--
   2         DTD for XML Schemas: Part 2: Datatypes
   3         $Id: datatypes.dtd,v 1.23 2001/03/16 17:36:30 ht Exp $
   4         Note this DTD is NOT normative, or even definitive. - - the
   5         prose copy in the datatypes REC is the definitive version
   6         (which shouldn't differ from this one except for this comment
   7         and entity expansions, but just in case)
   8   -->
   9 
  10 <!--
  11         This DTD cannot be used on its own, it is intended
  12         only for incorporation in XMLSchema.dtd, q.v.
  13   -->
  14 
  15 <!-- Define all the element names, with optional prefix -->
  16 <!ENTITY % simpleType "%p;simpleType">
  17 <!ENTITY % restriction "%p;restriction">
  18 <!ENTITY % list "%p;list">
  19 <!ENTITY % union "%p;union">
  20 <!ENTITY % maxExclusive "%p;maxExclusive">
  21 <!ENTITY % minExclusive "%p;minExclusive">
  22 <!ENTITY % maxInclusive "%p;maxInclusive">
  23 <!ENTITY % minInclusive "%p;minInclusive">
  24 <!ENTITY % totalDigits "%p;totalDigits">
  25 <!ENTITY % fractionDigits "%p;fractionDigits">
  26 <!ENTITY % length "%p;length">
  27 <!ENTITY % minLength "%p;minLength">
  28 <!ENTITY % maxLength "%p;maxLength">
  29 <!ENTITY % enumeration "%p;enumeration">
  30 <!ENTITY % whiteSpace "%p;whiteSpace">
  31 <!ENTITY % pattern "%p;pattern">
  32 
  33 <!--
  34         Customisation entities for the ATTLIST of each element
  35         type. Define one of these if your schema takes advantage
  36         of the anyAttribute='##other' in the schema for schemas
  37   -->
  38 
  39 <!ENTITY % simpleTypeAttrs "">
  40 <!ENTITY % restrictionAttrs "">
  41 <!ENTITY % listAttrs "">
  42 <!ENTITY % unionAttrs "">
  43 <!ENTITY % maxExclusiveAttrs "">
  44 <!ENTITY % minExclusiveAttrs "">
  45 <!ENTITY % maxInclusiveAttrs "">
  46 <!ENTITY % minInclusiveAttrs "">
  47 <!ENTITY % totalDigitsAttrs "">
  48 <!ENTITY % fractionDigitsAttrs "">
  49 <!ENTITY % lengthAttrs "">
  50 <!ENTITY % minLengthAttrs "">
  51 <!ENTITY % maxLengthAttrs "">
  52 <!ENTITY % enumerationAttrs "">
  53 <!ENTITY % whiteSpaceAttrs "">
  54 <!ENTITY % patternAttrs "">
  55 
  56 <!-- Define some entities for informative use as attribute
  57         types -->
  58 <!ENTITY % URIref "CDATA">
  59 <!ENTITY % XPathExpr "CDATA">
  60 <!ENTITY % QName "NMTOKEN">
  61 <!ENTITY % QNames "NMTOKENS">
  62 <!ENTITY % NCName "NMTOKEN">
  63 <!ENTITY % nonNegativeInteger "NMTOKEN">
  64 <!ENTITY % boolean "(true|false)">
  65 <!ENTITY % simpleDerivationSet "CDATA">
  66 <!--
  67         #all or space-separated list drawn from derivationChoice
  68   -->
  69 
  70 <!--
  71         Note that the use of 'facet' below is less restrictive
  72         than is really intended:  There should in fact be no
  73         more than one of each of minInclusive, minExclusive,
  74         maxInclusive, maxExclusive, totalDigits, fractionDigits,
  75         length, maxLength, minLength within datatype,
  76         and the min- and max- variants of Inclusive and Exclusive
  77         are mutually exclusive. On the other hand,  pattern and
  78         enumeration may repeat.
  79   -->
  80 <!ENTITY % minBound "(%minInclusive; | %minExclusive;)">
  81 <!ENTITY % maxBound "(%maxInclusive; | %maxExclusive;)">
  82 <!ENTITY % bounds "%minBound; | %maxBound;">
  83 <!ENTITY % numeric "%totalDigits; | %fractionDigits;">
  84 <!ENTITY % ordered "%bounds; | %numeric;">
  85 <!ENTITY % unordered
  86    "%pattern; | %enumeration; | %whiteSpace; | %length; |
  87    %maxLength; | %minLength;">
  88 <!ENTITY % facet "%ordered; | %unordered;">
  89 <!ENTITY % facetAttr 
  90         "value CDATA #REQUIRED
  91         id ID #IMPLIED">
  92 <!ENTITY % fixedAttr "fixed %boolean; #IMPLIED">
  93 <!ENTITY % facetModel "(%annotation;)?">
  94 <!ELEMENT %simpleType;
  95         ((%annotation;)?, (%restriction; | %list; | %union;))>
  96 <!ATTLIST %simpleType;
  97     name      %NCName; #IMPLIED
  98     final     %simpleDerivationSet; #IMPLIED
  99     id        ID       #IMPLIED
 100     %simpleTypeAttrs;>
 101 <!-- name is required at top level -->
 102 <!ELEMENT %restriction; ((%annotation;)?,
 103                          (%restriction1; |
 104                           ((%simpleType;)?,(%facet;)*)),
 105                          (%attrDecls;))>
 106 <!ATTLIST %restriction;
 107     base      %QName;                  #IMPLIED
 108     id        ID       #IMPLIED
 109     %restrictionAttrs;>
 110 <!--
 111         base and simpleType child are mutually exclusive,
 112         one is required.
 113 
 114         restriction is shared between simpleType and
 115         simpleContent and complexContent (in XMLSchema.xsd).
 116         restriction1 is for the latter cases, when this
 117         is restricting a complex type, as is attrDecls.
 118   -->
 119 <!ELEMENT %list; ((%annotation;)?,(%simpleType;)?)>
 120 <!ATTLIST %list;
 121     itemType      %QName;             #IMPLIED
 122     id        ID       #IMPLIED
 123     %listAttrs;>
 124 <!--
 125         itemType and simpleType child are mutually exclusive,
 126         one is required
 127   -->
 128 <!ELEMENT %union; ((%annotation;)?,(%simpleType;)*)>
 129 <!ATTLIST %union;
 130     id            ID       #IMPLIED
 131     memberTypes   %QNames;            #IMPLIED
 132     %unionAttrs;>
 133 <!--
 134         At least one item in memberTypes or one simpleType
 135         child is required
 136   -->
 137 
 138 <!ELEMENT %maxExclusive; %facetModel;>
 139 <!ATTLIST %maxExclusive;
 140         %facetAttr;
 141         %fixedAttr;
 142         %maxExclusiveAttrs;>
 143 <!ELEMENT %minExclusive; %facetModel;>
 144 <!ATTLIST %minExclusive;
 145         %facetAttr;
 146         %fixedAttr;
 147         %minExclusiveAttrs;>
 148 
 149 <!ELEMENT %maxInclusive; %facetModel;>
 150 <!ATTLIST %maxInclusive;
 151         %facetAttr;
 152         %fixedAttr;
 153         %maxInclusiveAttrs;>
 154 <!ELEMENT %minInclusive; %facetModel;>
 155 <!ATTLIST %minInclusive;
 156         %facetAttr;
 157         %fixedAttr;
 158         %minInclusiveAttrs;>
 159 
 160 <!ELEMENT %totalDigits; %facetModel;>
 161 <!ATTLIST %totalDigits;
 162         %facetAttr;
 163         %fixedAttr;
 164         %totalDigitsAttrs;>
 165 <!ELEMENT %fractionDigits; %facetModel;>
 166 <!ATTLIST %fractionDigits;
 167         %facetAttr;
 168         %fixedAttr;
 169         %fractionDigitsAttrs;>
 170 
 171 <!ELEMENT %length; %facetModel;>
 172 <!ATTLIST %length;
 173         %facetAttr;
 174         %fixedAttr;
 175         %lengthAttrs;>
 176 <!ELEMENT %minLength; %facetModel;>
 177 <!ATTLIST %minLength;
 178         %facetAttr;
 179         %fixedAttr;
 180         %minLengthAttrs;>
 181 <!ELEMENT %maxLength; %facetModel;>
 182 <!ATTLIST %maxLength;
 183         %facetAttr;
 184         %fixedAttr;
 185         %maxLengthAttrs;>
 186 
 187 <!-- This one can be repeated -->
 188 <!ELEMENT %enumeration; %facetModel;>
 189 <!ATTLIST %enumeration;
 190         %facetAttr;
 191         %enumerationAttrs;>
 192 
 193 <!ELEMENT %whiteSpace; %facetModel;>
 194 <!ATTLIST %whiteSpace;
 195         %facetAttr;
 196         %fixedAttr;
 197         %whiteSpaceAttrs;>
 198 
 199 <!-- This one can be repeated -->
 200 <!ELEMENT %pattern; %facetModel;>
 201 <!ATTLIST %pattern;
 202         %facetAttr;
 203         %patternAttrs;>