1 <?xml version="1.0"?>
   2 <!--
   3  Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved.
   4  DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   5 
   6  This code is free software; you can redistribute it and/or modify it
   7  under the terms of the GNU General Public License version 2 only, as
   8  published by the Free Software Foundation.  Oracle designates this
   9  particular file as subject to the "Classpath" exception as provided
  10  by Oracle in the LICENSE file that accompanied this code.
  11 
  12  This code is distributed in the hope that it will be useful, but WITHOUT
  13  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  14  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  15  version 2 for more details (a copy is included in the LICENSE file that
  16  accompanied this code).
  17 
  18  You should have received a copy of the GNU General Public License version
  19  2 along with this work; if not, write to the Free Software Foundation,
  20  Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  21 
  22  Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
  23  or visit www.oracle.com if you need additional information or have any
  24  questions.
  25 -->
  26 
  27 <grammar xmlns="http://relaxng.org/ns/structure/1.0"
  28       datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"
  29       ns="http://www.w3.org/2001/XMLSchema"
  30       xmlns:xs="http://www.w3.org/2001/XMLSchema"
  31       xmlns:doc="http://www.jenitennison.com/doc"
  32       xmlns:txw="http://java.sun.com/txw">
  33 
  34 <doc:p>
  35   RELAX NG schema for XML Schema by <doc:link 
  36   href="mailto:mail@jenitennison.com">Jeni Tennison</doc:link>. Based on 
  37   <doc:link href="http://www.w3.org/TR/2001/REC-xmlschema-1-20010502/">XML 
  38   Schema Part I: Structures Recommendation</doc:link> and <doc:link 
  39   href="http://www.w3.org/TR/2001/REC-xmlschema-2-20010502/">XML Schema Part 
  40   II: Datatypes</doc:link>.
  41 </doc:p>
  42 <doc:changes date="2001-11-24">
  43   <doc:p>
  44     Amended to comply with 10 August 2001 Tutorial.
  45   </doc:p>
  46   <doc:change>Removed key attributes.</doc:change>
  47   <doc:change>Replaced not element with except elements.</doc:change>
  48   <doc:change>
  49     Replaced multiple consecutive optional attributes to use the 
  50     zeroOrMore/choice pattern.
  51   </doc:change>
  52   <doc:change>
  53     Removed interleave elements inside list elements (which are no longer 
  54     permitted).
  55   </doc:change>
  56 </doc:changes>
  57 
  58 <define name="openAttrs" txw:mode="inherit">
  59   <doc:p>
  60     This allows any number of attributes that are not in the XML Schema 
  61     namespace or are in no namespace.  This is somewhat more complicated than 
  62     the XML Schema anyAttribute equivalent. 
  63   </doc:p>
  64   <!-- KK don't care -->
  65   <empty/>
  66   <!--zeroOrMore>
  67     <attribute>
  68       <anyName>
  69         <except>
  70           <nsName />
  71           <nsName ns="" />
  72           <name>xml:lang</name>
  73         </except>
  74       </anyName>
  75       <text />
  76     </attribute>
  77   </zeroOrMore-->
  78 </define>
  79 
  80 <define name="annotated" txw:mode="inherit">
  81   <doc:p>
  82     This allows any number of attributes that are not in the XML Schema 
  83     namespace or are in no namespace, an optional id attribute of type ID, 
  84     and an optional annotation element.  This is used as the basis for many 
  85     element content models.
  86   </doc:p>
  87   <ref name="openAttrs" />
  88   <optional>
  89     <attribute name="id">
  90       <data type="ID" />
  91     </attribute>
  92   </optional>
  93   <optional>
  94     <ref name="annotation" />
  95   </optional>
  96 </define>
  97 
  98 <define name="schemaTop" txw:mode="inline">
  99   <doc:p>
 100     This gives the content model of the top level of the schema.
 101   </doc:p>
 102   <choice>
 103     <ref name="redefinable" />
 104     <ref name="topLevelElement" />
 105     <ref name="topLevelAttribute" />
 106     <!--ref name="notation" /-->
 107   </choice>
 108 </define>
 109 
 110 <define name="redefinable" txw:mode="inline">
 111   <doc:p>
 112     This gives the components that can be redefined within the redefine 
 113     element.  They also occur at the top level of the schema.
 114   </doc:p>
 115   <choice>
 116     <ref name="simpleTypeHost" />
 117     <ref name="complexTypeHost" />
 118     <!--ref name="namedGroup" />
 119     <ref name="namedAttributeGroup" /-->
 120   </choice>
 121 </define>
 122 
 123 <define name="formChoice">
 124   <doc:p>
 125     This gives the values for the various form attributes: 
 126     elementFormDefault and attributeFormDefault on the schema element, and
 127     the form attributes on the element and attribute elements.
 128   </doc:p>
 129   <choice>
 130     <value>qualified</value>
 131     <value>unqualified</value>
 132   </choice>
 133 </define>
 134 
 135 <!-- KK: merge the two -->
 136 <define name="reducedDerivationControl">
 137   <doc:p>
 138     This gives the values that can be taken in the lists used to control
 139     derivation by extension or restriction (this is 'reduced' derivation
 140     because some derivation can involve substitution).  This RELAX NG schema, 
 141     like the XML Schema Recommendation here, allows the keywords 'extension' and 
 142     'restriction' to be repeated any number of times.
 143   </doc:p>
 144   <list>
 145     <oneOrMore>
 146       <choice>
 147         <value>extension</value>
 148         <value>restriction</value>
 149       </choice>
 150     </oneOrMore>
 151   </list>
 152 </define>
 153 
 154 <define name="derivationSet">
 155   <doc:p>
 156     This specifies the possible values for attributes that control derivation.
 157   </doc:p>
 158   <choice>
 159     <value>#all</value>
 160     <ref name="reducedDerivationControl" />
 161   </choice>
 162 </define>
 163 
 164 <start>
 165   <doc:p>
 166     This is the beginning point for the schema, and defines the schema 
 167     element.
 168   </doc:p>
 169   <element name="schema" 
 170         doc:href="http://www.w3.org/TR/xmlschema-1/#element-schema">
 171     <ref name="openAttrs" />
 172     <zeroOrMore>
 173       <choice>
 174         <attribute name="version">
 175           <data type="token" />
 176         </attribute>
 177         <attribute name="finalDefault">
 178           <ref name="derivationSet" />
 179         </attribute>
 180         <attribute name="blockDefault">
 181           <ref name="blockSet" />
 182         </attribute>
 183         <attribute name="attributeFormDefault">
 184           <ref name="formChoice" />
 185         </attribute>
 186         <attribute name="elementFormDefault">
 187           <ref name="formChoice" />
 188         </attribute>
 189         <attribute name="id">
 190           <data type="ID" />
 191         </attribute>
 192         <attribute name="xml:lang">
 193           <data type="language" />
 194         </attribute>
 195         <attribute name="targetNamespace">
 196           <data type="anyURI" />
 197         </attribute>
 198       </choice>
 199     </zeroOrMore>
 200     <zeroOrMore>
 201       <choice>
 202         <!--ref name="include" /-->
 203         <ref name="import" />
 204         <!--ref name="redefine" /-->
 205         <ref name="annotation" />
 206       </choice>
 207     </zeroOrMore>
 208     <zeroOrMore>
 209       <choice>
 210         <ref name="schemaTop" />
 211         <ref name="annotation" />
 212       </choice>
 213     </zeroOrMore>
 214   </element>
 215 </start>
 216 
 217 <define name="allNNI">
 218   <doc:p>
 219     This gives the value type for the maxOccurs attribute, which may be a 
 220     non-negative number or the keyword 'unbounded'.
 221   </doc:p>
 222   <choice>
 223     <data type="nonNegativeInteger" />
 224     <value type="token">unbounded</value>
 225   </choice>
 226 </define>
 227 
 228 <define name="occurs" txw:mode="inherit">
 229   <doc:p>
 230     This specifies the occurs attributes, minOccurs and maxOccurs, as they 
 231     are normally used.
 232   </doc:p>
 233   <zeroOrMore>
 234     <choice>
 235       <attribute name="minOccurs">
 236         <data type="nonNegativeInteger" />
 237       </attribute>
 238       <attribute name="maxOccurs">
 239         <ref name="allNNI" />
 240       </attribute>
 241     </choice>
 242   </zeroOrMore>
 243 </define>
 244 
 245 <define name="typeDefParticle" txw:mode="inline">
 246   <doc:p>
 247     This gives the possible content of complex types.
 248   </doc:p>
 249   <choice>
 250     <!--ref name="groupRef" /-->
 251     <ref name="all" />
 252     <ref name="choice" />
 253     <ref name="sequence" />
 254   </choice>
 255 </define>
 256 
 257 <define name="nestedParticle" txw:mode="inline">
 258   <doc:p>
 259     This gives the particles that can make up a model group.
 260   </doc:p>
 261   <choice>
 262     <ref name="localElement" />
 263     <!--ref name="groupRef" /-->
 264     <ref name="choice" />
 265     <ref name="sequence" />
 266     <ref name="any" />
 267   </choice>
 268 </define>
 269 
 270 <define name="fixedOrDefault" txw:mode="inline">
 271   <doc:p>
 272     This specifies the relationship between fixed and default attributes on 
 273     element and attribute elements - if one is present, then the other cannot 
 274     be.  This is a constraint that cannot be specified using XML Schema.
 275   </doc:p>
 276   <choice>
 277     <empty />
 278     <attribute name="fixed" />
 279     <attribute name="default" />
 280   </choice>
 281 </define>
 282 
 283 <define name="attributeType" txw:mode="inherit">
 284   <doc:p>
 285     This specifies the relationship between the type attribute and the 
 286     simpleType element child of attribute elements - if one is present, then 
 287     the other cannot be, although it is possible for neither to be allowed.
 288   </doc:p>
 289   <choice>
 290     <empty />
 291     <attribute name="type">
 292       <data type="QName" />
 293     </attribute>
 294     <ref name="simpleTypeHost" />
 295   </choice>
 296 </define>
 297 
 298 <define name="localAttribute">
 299   <doc:p>
 300     This describes attribute elements when used in a local context.  They 
 301     have an optional use attribute, possibly a fixed or default attribute, 
 302     and then can either have a ref attribute (referring to a top-level 
 303     attribute) or a name attribute with an optional form attribute and 
 304     specifying an attribute type.
 305   </doc:p>
 306   <element name="attribute" 
 307         doc:href="http://www.w3.org/TR/xmlschema-1/#element-attribute">
 308     <ref name="annotated" />
 309     <optional>
 310       <attribute name="use">
 311         <choice>
 312           <value type="token">optional</value>
 313           <value type="token">prohibited</value>
 314           <value type="token">required</value>
 315         </choice>
 316       </attribute>
 317     </optional>
 318     <ref name="fixedOrDefault" />
 319     <choice>
 320       <attribute name="ref">
 321         <data type="QName" />
 322       </attribute>
 323       <group>
 324         <attribute name="name">
 325           <data type="NCName" />
 326         </attribute>
 327         <optional>
 328           <attribute name="form">
 329             <ref name="formChoice" />
 330           </attribute>
 331         </optional>        
 332         <ref name="attributeType" />
 333       </group>
 334     </choice>
 335   </element>
 336 </define>
 337 
 338 <define name="topLevelAttribute">
 339   <doc:p>
 340     This describes attribute elements when used at the top level of the 
 341     schema.  They must have a name, may have a fixed or default attribute, 
 342     and specify their type through a type attribute or child simpleType 
 343     element.  The name attribute of each attribute element that appears at 
 344     the top level of the schema is unique.
 345   </doc:p>
 346   <element name="attribute"
 347         doc:href="http://www.w3.org/TR/xmlschema-1/#element-attribute">
 348     <ref name="annotated" />
 349     <attribute name="name">
 350       <data type="NCName" />
 351     </attribute>
 352     <ref name="fixedOrDefault" />
 353     <ref name="attributeType" />
 354   </element>
 355 </define>
 356 
 357 <define name="attrDecls" txw:mode="inherit">
 358   <doc:p>
 359     This gives the model group for specifying the attributes in a complex 
 360     type, an extension or restriction.
 361   </doc:p>
 362   <zeroOrMore>
 363     <choice>
 364       <ref name="localAttribute" />
 365       <!--ref name="attributeGroupRef" /-->
 366     </choice>
 367   </zeroOrMore>
 368   <optional>
 369     <ref name="anyAttribute" />
 370   </optional>
 371 </define>
 372 
 373 <define name="anyAttribute">
 374   <doc:p>
 375     This specifies the anyAttribute wildcard.
 376   </doc:p>
 377   <element name="anyAttribute"
 378         doc:href="http://www.w3.org/TR/xmlschema-1/#element-anyAttribute">
 379     <ref name="wildcard" />
 380   </element>
 381 </define>
 382 
 383 <define name="complexTypeModel" txw:mode="inherit">
 384   <doc:p>
 385     This specifies the content of a complexType element.  As children, it can 
 386     have a simpleContent, a complexContent or a model group.  Only if it has 
 387     one of the latter two, may it have a mixed attribute.  This latter 
 388     constraint is something that cannot be specified in XML Schema.
 389   </doc:p>
 390   <choice>
 391     <ref name="simpleContent" />
 392     <group>
 393       <optional>
 394         <attribute name="mixed">
 395           <data type="boolean" />
 396         </attribute>
 397       </optional>
 398       <choice>
 399         <ref name="complexContent" />
 400         <group>
 401           <optional>
 402             <ref name="typeDefParticle" />
 403           </optional>
 404           <ref name="attrDecls" />
 405         </group>
 406       </choice>
 407     </group>
 408   </choice>
 409 </define>
 410 
 411 <define name="complexTypeHost" txw:mode="inherit">
 412   <ref name="typeHost" />
 413   <ref name="complexType" />
 414 </define>
 415 
 416 <define name="typeHost" txw:mode="inherit"><empty/><empty/></define>
 417 
 418 <define name="complexType" txw:mode="inherit">
 419   <element name="complexType"
 420         doc:href="http://www.w3.org/TR/xmlschema-1/#element-complexType">
 421     <doc:p>
 422       This specifies the basic content of a complexType element.
 423     </doc:p>
 424     <ref name="annotated" />
 425     <ref name="complexTypeModel" />
 426     <optional>
 427       <attribute name="name">
 428         <data type="NCName" />
 429       </attribute>
 430     </optional>
 431     <zeroOrMore>
 432       <choice>
 433         <attribute name="abstract">
 434           <data type="boolean" />
 435         </attribute>
 436         <attribute name="block">
 437           <ref name="derivationSet" />
 438         </attribute>
 439         <attribute name="final">
 440           <ref name="derivationSet" />
 441         </attribute>
 442       </choice>
 443     </zeroOrMore>
 444   </element>
 445 </define>
 446 
 447 <define name="complexRestriction">
 448   <doc:p>
 449     This describes a restriction element within a complexContent element 
 450     (i.e. one that restricts a complex type).  It has a base attribute, may 
 451     contain a model group and may contain attribute declarations of various 
 452     sorts.
 453   </doc:p>
 454   <element name="restriction"
 455         doc:href="http://www.w3.org/TR/xmlschema-1/#element-complexContent::restriction">
 456     <ref name="annotated" />
 457     <attribute name="base">
 458       <data type="QName" />
 459     </attribute>
 460     <optional>
 461       <ref name="typeDefParticle" />
 462     </optional>
 463     <ref name="attrDecls" />
 464   </element>
 465 </define>
 466 
 467 <define name="extensionType">
 468   <doc:p>
 469     This specifies the basic model for an extension element: adding a 
 470     required base attribute to the model used for most components.
 471   </doc:p>
 472   <ref name="annotated" />
 473   <attribute name="base">
 474     <data type="QName" />
 475   </attribute>
 476 </define>
 477 
 478 <define name="complexExtension">
 479   <doc:p>
 480     This describes an extension element within a complexContent element 
 481     (i.e. one that restricts a complex type).  It may contain a model group 
 482     and may contain attribute declarations of various sorts.
 483   </doc:p>
 484   <element name="extension"
 485         doc:href="http://www.w3.org/TR/xmlschema-1/#element-complexContent::extension">
 486     <ref name="extensionType" />
 487     <optional>
 488       <ref name="typeDefParticle" />
 489     </optional>
 490     <ref name="attrDecls" />
 491   </element>
 492 </define>
 493 
 494 <define name="complexContent">
 495   <doc:p>
 496     This describes a complexContent element.  It may have a mixed attribute, 
 497     and either a restriction or extension element as content.
 498   </doc:p>
 499   <element name="complexContent"
 500         doc:href="http://www.w3.org/TR/xmlschema-1/#element-complexContent">
 501     <ref name="annotated" />
 502     <optional>
 503       <attribute name="mixed">
 504         <data type="boolean" />
 505       </attribute>
 506     </optional>
 507     <choice>
 508       <ref name="complexRestriction" />
 509       <ref name="complexExtension" />
 510     </choice>
 511   </element>
 512 </define>
 513 
 514 <define name="simpleRestriction">
 515   <doc:p>
 516     This describes a restriction element that appears within a simpleContent 
 517     or simpleType element (i.e. one that restricts a simple type).  Its 
 518     content follows the simple restriction model that is detailed below, and 
 519     may include attribute declarations.
 520   </doc:p>
 521   <element name="restriction"
 522         doc:href="http://www.w3.org/TR/xmlschema-1/#element-simpleContent::restriction">
 523     <ref name="annotated" />
 524     <ref name="simpleRestrictionModel" />
 525     <ref name="attrDecls" />
 526   </element>
 527 </define>
 528 
 529 <define name="simpleExtension">
 530   <doc:p>
 531     This describes an extension element that appears within a simpleContent 
 532     element (i.e. one that extends a simple type).  Like other extensions, it 
 533     has a base type, but it can only be used to add attributes.
 534   </doc:p>
 535   <element name="extension"
 536         doc:href="http://www.w3.org/TR/xmlschema-1/#element-simpleContent::extension">
 537     <ref name="extensionType" />
 538     <ref name="attrDecls" />
 539   </element>
 540 </define>
 541 
 542 <define name="simpleContent">
 543   <doc:p>
 544     This describes a simpleContent element, whose content can either hold a 
 545     restriction or extension element.
 546   </doc:p>
 547   <element name="simpleContent"
 548         doc:href="http://www.w3.org/TR/xmlschema-1/#element-simpleContent">
 549     <ref name="annotated" />
 550     <choice>
 551       <ref name="simpleRestriction" />
 552       <ref name="simpleExtension" />
 553     </choice>
 554   </element>
 555 </define>
 556 
 557 <define name="blockSet">
 558   <doc:p>
 559     This gives the possible values for block attributes on element elements, 
 560     which includes substitution amongst the list of possible values.  This 
 561     RELAX NG schema, like the XML Schema Recommendation, allows each of the 
 562     keywords 'extension', 'restriction' and 'substitution' to occur more than 
 563     once within the list.
 564   </doc:p>
 565   <choice>
 566     <value type="token">#all</value>
 567     <list>
 568       <oneOrMore>
 569         <choice>
 570           <value>extension</value>
 571           <value>restriction</value>
 572           <value>substitution</value>
 573         </choice>
 574       </oneOrMore>
 575     </list>
 576   </choice>
 577 </define>
 578 
 579 <define name="element" txw:mode="inherit">
 580   <doc:p>
 581     This describes the basic content model of an element element.  It is 
 582     annotated, may have a fixed or default attribute, and may have nillable 
 583     and/or block attributes.  Its type may be specified through a type 
 584     attribute, a local simple type or a local complex type - the choice 
 585     between these methods is something that cannot be indicated with XML 
 586     Schema.  This content is optionally followed by some identify constraints.
 587   </doc:p>
 588   <ref name="annotated" />
 589   <ref name="fixedOrDefault" />
 590   <zeroOrMore>
 591     <choice>
 592       <attribute name="nillable">
 593         <data type="boolean" />
 594       </attribute>
 595       <attribute name="block">
 596         <ref name="blockSet" />
 597       </attribute>
 598     </choice>
 599   </zeroOrMore>
 600   <choice>
 601     <empty />
 602     <attribute name="type">
 603       <data type="QName" />
 604     </attribute>
 605     <ref name="simpleTypeHost" />
 606     <ref name="complexTypeHost" />
 607   </choice>
 608   <!--zeroOrMore>
 609     <ref name="identityConstraint" />
 610   </zeroOrMore-->
 611 </define>
 612 
 613 <define name="topLevelElement">
 614   <doc:p>
 615     This describes an element element that appears at the top level of the 
 616     schema.  On top of the basic content for an element element, it has to 
 617     have a name, which is a unique identifier in the element symbol space.  It 
 618     may have substitutionGroup, abstract and/or final attributes.
 619   </doc:p>
 620   <element name="element"
 621         doc:href="http://www.w3.org/TR/xmlschema-1/#element-element">
 622     <ref name="element" />
 623     <attribute name="name">
 624       <data type="NCName" />
 625     </attribute>
 626     <zeroOrMore>
 627       <choice>
 628         <attribute name="substitutionGroup">
 629           <data type="QName" />
 630         </attribute>
 631         <attribute name="abstract">
 632           <data type="boolean" />
 633         </attribute>
 634         <attribute name="final">
 635           <ref name="derivationSet" />
 636         </attribute>
 637       </choice>
 638     </zeroOrMore>
 639   </element>
 640 </define>
 641 
 642 <define name="localElement">
 643   <doc:p>
 644     This describes an element element that appears locally, within a 
 645     complexType or group element.  It may have minOccurs and/or maxOccurs 
 646     attributes.  If it has a ref attribute, then that&apos;s all it can 
 647     have.  Otherwise, it must have a name and specifies its type in the same 
 648     way as the basic element content model described above.  It may in this 
 649     case also have a form element.  These constraints on local elements 
 650     cannot be described within XML Schema.
 651   </doc:p>
 652   <element name="element"
 653         doc:href="http://www.w3.org/TR/xmlschema-1/#element-element">
 654     <ref name="occurs" />
 655     <choice>
 656       <attribute name="ref">
 657         <data type="QName" />
 658       </attribute>
 659       <group>
 660         <ref name="element" />
 661         <attribute name="name">
 662           <data type="NCName" />
 663         </attribute>
 664         <optional>
 665           <attribute name="form">
 666             <ref name="formChoice" />
 667           </attribute>
 668         </optional>
 669       </group>
 670     </choice>
 671   </element>
 672 </define>
 673 
 674 <!--define name="namedGroup">
 675   <doc:p>
 676     This describes an group element that appears at the top level of the 
 677     schema.  It must have a name attribute, and must have one of an all, 
 678     choice or sequence element child.
 679   </doc:p>
 680   <element name="group"
 681         doc:href="http://www.w3.org/TR/xmlschema-1/#element-group">
 682     <ref name="annotated" />
 683     <attribute name="name">
 684       <data type="NCName" />
 685     </attribute>
 686     <choice>
 687       <element name="all">
 688         <ref name="simpleExplicitGroup" />  <!- - RS - relaxed all content model - ->
 689       </element>
 690       <element name="choice">
 691         <ref name="simpleExplicitGroup" />
 692       </element>
 693       <element name="sequence">
 694         <ref name="simpleExplicitGroup" />
 695       </element>
 696     </choice>
 697   </element>
 698 </define-->
 699 
 700 <!--define name="groupRef">
 701   <doc:p>
 702     This describes group element that occurs locally, referring to a 
 703     top-level named group.  It may have occurrence attributes, and must have 
 704     a ref attribute.
 705   </doc:p>
 706   <element name="group"
 707         doc:href="http://www.w3.org/TR/xmlschema-1/#element-group">
 708     <ref name="annotated" />
 709     <ref name="occurs" />
 710     <attribute name="ref">
 711       <data type="QName" />
 712     </attribute>
 713   </element>
 714 </define-->
 715 
 716 <define name="explicitGroup" txw:mode="inherit">
 717   <doc:p>
 718     This gives the content of a model group (not a group element) in the 
 719     normal run of things.  It has occurrence attributes and any number of 
 720     particles within it.
 721   </doc:p>
 722   <ref name="annotated" />
 723   <ref name="occurs" />
 724   <zeroOrMore>
 725     <ref name="nestedParticle" />
 726   </zeroOrMore>
 727 </define>
 728 
 729 <define name="simpleExplicitGroup">
 730   <doc:p>
 731     This gives the content of a model group (not a group element) within a 
 732     named group - it differs from the above in that it doesn&apos;t have any 
 733     occurrence attributes.
 734   </doc:p>
 735   <ref name="annotated" />
 736   <zeroOrMore>
 737     <ref name="nestedParticle" />
 738   </zeroOrMore>
 739 </define>
 740 
 741 <define name="all">
 742   <doc:p>
 743     This describes an all element that appears outside a named group (i.e. as 
 744     the content of a complexType element).  It has the standard model for an 
 745     all element, but adds minOccurs and maxOccurs attributes which can only 
 746     take certain values.
 747   </doc:p>
 748   <element name="all"
 749         doc:href="http://www.w3.org/TR/xmlschema-1/#element-all">
 750     <ref name="explicitGroup" />
 751   </element>
 752 </define>
 753 
 754 <define name="choice">
 755   <doc:p>
 756     This describes a choice element that appears outside a named group.
 757   </doc:p>
 758   <element name="choice"
 759         doc:href="http://www.w3.org/TR/xmlschema-1/#element-choice">
 760     <ref name="explicitGroup" />
 761   </element>
 762 </define>
 763 
 764 <define name="sequence">
 765   <doc:p>
 766     This describes a sequence element that appears outside a named group.
 767   </doc:p>
 768   <element name="sequence"
 769         doc:href="http://www.w3.org/TR/xmlschema-1/#element-sequence">
 770     <ref name="explicitGroup" />
 771   </element>
 772 </define>
 773 
 774 <define name="wildcard" txw:mode="inherit">
 775   <doc:p>
 776     This describes a wildcard element (i.e. any or anyAttribute).  The 
 777     namespace attribute can take a list URIs interspersed with the keywords 
 778     '##targetNamespace' and/or '##local'.  This RELAX NG schema, like the XML 
 779     Schema Recommendation, allows the keywords to be specified more than once 
 780     each within the list, if they&apos;re given.  This model also specifies the 
 781     processContents attribute.
 782   </doc:p>
 783   <ref name="annotated" />
 784   <zeroOrMore>
 785     <choice>
 786       <attribute name="namespace">
 787         <choice>
 788           <value type="token">##any</value>
 789           <value type="token">##other</value>
 790           <list>
 791             <zeroOrMore>
 792               <choice>
 793                 <data type="anyURI" />
 794                 <value>##targetNamespace</value>
 795                 <value>##local</value>
 796               </choice>
 797             </zeroOrMore>
 798           </list>
 799         </choice>
 800       </attribute>
 801       <attribute name="processContents">
 802         <choice>
 803           <value type="token">lax</value>
 804           <value type="token">skip</value>
 805           <value type="token">strict</value>
 806         </choice>
 807       </attribute>
 808     </choice>
 809   </zeroOrMore>
 810 </define>
 811 
 812 <define name="any">
 813   <doc:p>
 814     This describes an any element as a wildcard.
 815   </doc:p>
 816   <element name="any"
 817         doc:href="http://www.w3.org/TR/xmlschema-1/#element-any">
 818     <ref name="wildcard" />
 819     <ref name="occurs" />
 820   </element>
 821 </define>
 822 
 823 <!--define name="namedAttributeGroup">
 824   <doc:p>
 825     This describes an attributeGroup element as it appears at the top level 
 826     of the schema.  It must have a name attribute, and then contains 
 827     attribute declarations.
 828   </doc:p>
 829   <element name="attributeGroup"
 830         doc:href="http://www.w3.org/TR/xmlschema-1/#element-attributeGroup">
 831     <ref name="annotated" />
 832     <attribute name="name">
 833       <data type="NCName" />
 834     </attribute>
 835     <ref name="attrDecls" />
 836   </element>
 837 </define-->
 838 
 839 <!--define name="attributeGroupRef">
 840   <doc:p>
 841     This describes an attributeGroup element as it appears within a complex 
 842     type.  It must have a ref attribute.
 843   </doc:p>
 844   <element name="attributeGroup"
 845         doc:href="http://www.w3.org/TR/xmlschema-1/#element-attributeGroup">
 846     <ref name="annotated" />
 847     <attribute name="ref">
 848       <data type="QName" />
 849     </attribute>
 850   </element>
 851 </define-->
 852 
 853 <!--define name="include">
 854   <doc:p>
 855     This describes an include element, which must have a schemaLocation 
 856     attribute.
 857   </doc:p>
 858   <element name="include"
 859         doc:href="http://www.w3.org/TR/xmlschema-1/#element-include">
 860     <ref name="annotated" />
 861     <attribute name="schemaLocation">
 862       <data type="anyURI" />
 863     </attribute>
 864   </element>
 865 </define-->
 866 
 867 <!--define name="redefine">
 868   <doc:p>
 869     This describes a redefine element, which must have a schemaLocation 
 870     attribute and can then contain any mix of annotations and redefinable 
 871     components.
 872   </doc:p>
 873   <element name="redefine"
 874         doc:href="http://www.w3.org/TR/xmlschema-1/#element-redefine">
 875     <ref name="openAttrs" />
 876     <optional>
 877       <attribute name="id">
 878         <data type="ID" />
 879       </attribute>
 880     </optional>
 881     <attribute name="schemaLocation">
 882       <data type="anyURI" />
 883     </attribute>
 884     <zeroOrMore>
 885       <choice>
 886         <ref name="annotation" />
 887         <ref name="redefinable" />
 888       </choice>
 889     </zeroOrMore>
 890   </element>
 891 </define-->
 892 
 893 <define name="import">
 894   <doc:p>
 895     This describes an import element that&apos;s used when its parent schema 
 896     element specifies a targetNamespace.  In these cases, the namespace 
 897     attribute on the import element is optional.
 898   </doc:p>
 899   <element name="import"
 900         doc:href="http://www.w3.org/TR/xmlschema-1/#element-import">
 901           <ref name="annotated" />
 902           <optional>
 903             <attribute name="schemaLocation">
 904               <data type="anyURI" />
 905             </attribute>
 906           </optional>
 907     <optional>
 908       <attribute name="namespace">
 909         <data type="anyURI" />
 910       </attribute>
 911     </optional>
 912   </element>
 913 </define>
 914 
 915 <!--define name="selector">
 916   <doc:p>
 917     This describes a selector element.  The xpath attribute is a simplified 
 918     XPath - the regular expression given here is the one from the XML Schema 
 919     for XML Schema.
 920   </doc:p>
 921   <element name="selector"
 922         doc:href="http://www.w3.org/TR/xmlschema-1/#element-selector">
 923     <ref name="annotated" />
 924     <attribute name="xpath">
 925       <data type="token">
 926         <param name="pattern">(\.//)?(((child::)?((\i\c*:)?(\i\c*|\*)))|\.)(/(((child::)?((\i\c*:)?(\i\c*|\*)))|\.))*(\|(\.//)?(((child::)?((\i\c*:)?(\i\c*|\*)))|\.)(/(((child::)?((\i\c*:)?(\i\c*|\*)))|\.))*)*</param>
 927       </data>
 928     </attribute>
 929   </element>
 930 </define>
 931 
 932 <define name="field">
 933   <doc:p>
 934     This describes a field element.  The xpath attribute is a simplified 
 935     XPath - the regular expression given here is the one from the XML Schema 
 936     for XML Schema.
 937   </doc:p>
 938   <element name="field"
 939         doc:href="http://www.w3.org/TR/xmlschema-1/#element-field">
 940     <ref name="annotated" />
 941     <attribute name="xpath">
 942       <data type="token">
 943         <param name="pattern">(\.//)?((((child::)?((\i\c*:)?(\i\c*|\*)))|\.)/)*((((child::)?((\i\c*:)?(\i\c*|\*)))|\.)|((attribute::|@)((\i\c*:)?(\i\c*|\*))))(\|(\.//)?((((child::)?((\i\c*:)?(\i\c*|\*)))|\.)/)*((((child::)?((\i\c*:)?(\i\c*|\*)))|\.)|((attribute::|@)((\i\c*:)?(\i\c*|\*)))))*</param>
 944       </data>
 945     </attribute>
 946   </element>
 947 </define>
 948 
 949 <define name="keybase" txw:mode="inherit">
 950   <doc:p>
 951     This gives the basic content for identity constraints - a name attribute 
 952     that uniquely identifies the identity constraint, a selector element and 
 953     one or more field elements.
 954   </doc:p>
 955   <ref name="annotated" />
 956   <attribute name="name">
 957     <data type="NCName" />
 958   </attribute>
 959   <ref name="selector" />
 960   <oneOrMore>
 961     <ref name="field" />
 962   </oneOrMore>
 963 </define>
 964 
 965 <define name="identityConstraint" txw:mode="inline">
 966   <doc:p>
 967     This gives a model group for the three identity constraint elements, used 
 968     within the content of element elements.
 969   </doc:p>
 970   <choice>
 971     <ref name="unique" />
 972     <ref name="key" />
 973     <ref name="keyref" />
 974   </choice>
 975 </define>
 976 
 977 <define name="unique">
 978   <doc:p>
 979     This describes a unique element.
 980   </doc:p>
 981   <element name="unique"
 982         doc:href="http://www.w3.org/TR/xmlschema-1/#element-unique">
 983     <ref name="keybase" />
 984   </element>  
 985 </define>
 986 
 987 <define name="key">
 988   <doc:p>
 989     This describes a key element.
 990   </doc:p>
 991   <element name="key"
 992         doc:href="http://www.w3.org/TR/xmlschema-1/#element-key">
 993     <ref name="keybase" />
 994   </element>
 995 </define>
 996 
 997 <define name="keyref">
 998   <doc:p>
 999     This describes a keyref element.
1000   </doc:p>
1001   <element name="keyref"
1002         doc:href="http://www.w3.org/TR/xmlschema-1/#element-keyref">
1003     <ref name="keybase" />
1004     <attribute name="refer">
1005       <data type="QName" />
1006     </attribute>
1007   </element>
1008 </define-->
1009 
1010 <!--define name="notation">
1011   <doc:p>
1012     This describes a notation element.  The names of notation elements are 
1013     unique in the notation symbol space.  The public attribute is required, 
1014     and the system attribute is optional.
1015   </doc:p>
1016   <element name="notation"
1017         doc:href="http://www.w3.org/TR/xmlschema-1/#element-notation">
1018     <ref name="annotated" />
1019     <attribute name="name">
1020       <data type="NCName" />
1021     </attribute>
1022     <attribute name="public">
1023       <data type="token" />
1024     </attribute>
1025     <optional>
1026       <attribute name="system">
1027         <data type="anyURI" />
1028       </attribute>
1029     </optional>
1030   </element>
1031 </define-->
1032 
1033 <define name="appinfoContent">
1034   <doc:p>
1035     This is designed to describe the content of the appinfo elements in the 
1036     schema.  At the moment this allows any mixed content without validation.  
1037     Note that this is fairly complex compared to the XML Schema equivalent, 
1038     which would be a single any element.
1039   </doc:p>
1040   <ref name="anyContent" />
1041 </define>
1042 
1043 <define name="anyContent">
1044   <empty/>  <!-- KK don't care -->
1045   <!--mixed>
1046     <zeroOrMore>
1047       <element>
1048         <anyName />
1049         <zeroOrMore>
1050           <attribute>
1051             <anyName />
1052           </attribute>
1053         </zeroOrMore>
1054         <ref name="anyContent" />
1055         <empty />
1056       </element>
1057     </zeroOrMore>
1058   </mixed-->
1059 </define>
1060 
1061 <define name="appinfo">
1062   <doc:p>
1063     This describes an appinfo element.  It has an optional source attribute 
1064     and can currently contain anything at all.
1065   </doc:p>
1066   <element name="appinfo"
1067         doc:href="http://www.w3.org/TR/xmlschema-1/#element-appinfo">
1068     <optional>
1069       <attribute name="source">
1070         <data type="anyURI" />
1071       </attribute>
1072     </optional>
1073     <ref name="appinfoContent" />
1074   </element>
1075 </define>
1076 
1077 <define name="documentationContent">
1078   <doc:p>
1079     This is designed to describe the content of the documentation elements in 
1080     the schema.  At the moment this allows any mixed content without 
1081     validation.  Note that this is fairly complex compared to the XML Schema 
1082     equivalent, which would be a single any element.
1083   </doc:p>
1084   <ref name="anyContent" />
1085 </define>
1086 
1087 <define name="documentation">
1088   <doc:p>
1089     This describes a documentation element.  It has optional source 
1090     and xml:lang attributes and can currently contain anything at all.
1091   </doc:p>
1092   <element name="documentation"
1093         doc:href="http://www.w3.org/TR/xmlschema-1/#element-documentation">
1094     <zeroOrMore>
1095       <choice>
1096         <attribute name="source">
1097           <data type="anyURI" />
1098         </attribute>
1099         <attribute name="xml:lang">
1100           <data type="language" />
1101         </attribute>
1102       </choice>
1103     </zeroOrMore>
1104     <ref name="documentationContent" />
1105   </element>
1106 </define>
1107 
1108 <define name="annotation">
1109   <doc:p>
1110     This describes an annotation element.  It can have any attributes, may 
1111     have an id attribute, and contains any number of documentation or appinfo 
1112     elements.
1113   </doc:p>
1114   <element name="annotation"
1115         doc:href="http://www.w3.org/TR/xmlschema-1/#element-annotation">
1116     <ref name="openAttrs" />
1117     <optional>
1118       <attribute name="id">
1119         <data type="ID" />
1120       </attribute>
1121     </optional>
1122     <zeroOrMore>
1123       <choice>
1124         <ref name="documentation" />
1125         <ref name="appinfo" />
1126       </choice>
1127     </zeroOrMore>
1128   </element>
1129 </define>
1130 
1131 <define name="simpleDerivation" txw:mode="inline">
1132   <doc:p>
1133     This gives the various types of derivation of simple types.
1134   </doc:p>
1135   <choice>
1136     <ref name="simpleRestriction" />
1137     <ref name="list" />
1138     <ref name="union" />
1139   </choice>
1140 </define>
1141 
1142 <define name="simpleDerivationSet">
1143   <doc:p>
1144     This specifies the values of the final attribute for simple types.  This 
1145     RELAX NG schema for XML Schema, like the XML Schema Recommendation, allows 
1146     the keywords 'list', 'union' and 'restriction' to appear more than once 
1147     within the list.
1148   </doc:p>
1149   <choice>
1150     <value type="token">#all</value>
1151     <list>
1152       <zeroOrMore>
1153         <choice>
1154           <value>list</value>
1155           <value>union</value>
1156           <value>restriction</value>
1157         </choice>
1158       </zeroOrMore>
1159     </list>
1160   </choice>
1161 </define>
1162 
1163 <define name="simpleTypeHost" txw:mode="inherit">
1164   <ref name="typeHost" />
1165   <ref name="simpleType" />
1166 </define>
1167 
1168 <define name="simpleType" txw:mode="inherit">
1169   <doc:p>
1170     This gives the basic content of a simple type.
1171   </doc:p>
1172   <element name="simpleType"
1173         doc:href="http://www.w3.org/TR/xmlschema-1/#element-simpleType">
1174     <ref name="annotated" />
1175     <ref name="simpleDerivation" />
1176     <optional>
1177       <attribute name="name">
1178         <data type="NCName" />
1179       </attribute>
1180     </optional>
1181     <optional>
1182       <attribute name="final">
1183         <ref name="simpleDerivationSet" />
1184       </attribute>
1185     </optional>
1186   </element>
1187 </define>
1188 
1189 <!--define name="rangeFacets" txw:mode="inherit">
1190   <doc:p>
1191     This describes the relationship between the various range facets.  Only 
1192     one of minExclusive and minInclusive can be present, and only one of 
1193     maxExclusive and maxInclusive can be present.  This is a constraint that 
1194     can&apos;t easily be expressed using XML Schema.  This RELAX NG schema 
1195     for XML Schema is a little more restrictive than the XML Schema 
1196     Recommendation in that it also forces there to be a maximum of one of 
1197     each of these types of facets.
1198   </doc:p>
1199   <interleave>
1200     <optional>
1201       <choice>
1202         <ref name="minExclusive" />
1203         <ref name="minInclusive" />
1204       </choice>
1205     </optional>    
1206     <optional>
1207       <choice>
1208         <ref name="maxExclusive" />
1209         <ref name="maxInclusive" />
1210       </choice>
1211     </optional>
1212   </interleave>
1213 </define>
1214 
1215 <define name="digitFacets" txw:mode="inherit">
1216   <doc:p>
1217     This specifies optional totalDigits and fractionDigits elements.  This 
1218     RELAX NG schema for XML Schema is a little more restrictive than the XML 
1219     Schema Recommendation in that it also forces there to be a maximum of one 
1220     of each of these types of facets.
1221   </doc:p>
1222   <optional>
1223     <ref name="totalDigits" />
1224   </optional>
1225   <optional>
1226     <ref name="fractionDigits" />
1227   </optional>
1228 </define>
1229 
1230 <define name="lengthFacets" txw:mode="inherit">
1231   <doc:p>
1232     This specifies optional length, minLength and maxLength elements.  This 
1233     RELAX NG schema for XML Schema is a little more restrictive than the XML 
1234     Schema Recommendation in that it also forces there to be a maximum of one 
1235     of each of these types of facets, and says that if a length element is 
1236     given, then neither minLength nor maxLength should be present.
1237   </doc:p>
1238   <choice>
1239     <ref name="length" />
1240     <interleave>
1241       <optional>
1242         <ref name="minLength" />
1243       </optional>
1244       <optional>
1245         <ref name="maxLength" />        
1246       </optional>
1247     </interleave>
1248   </choice>
1249 </define>
1250 
1251 <define name="commonFacets" txw:mode="inherit">
1252   <doc:p>
1253     This specifies zero or more enumeration or pattern elements and an 
1254     optional whiteSpace element.  This RELAX NG schema for XML Schema is a 
1255     little more restrictive than the XML Schema Recommendation in that it 
1256     also forces there to be a maximum of one whiteSpace element within the 
1257     facets.  Note that the whiteSpace facet is constrained to have a value of 
1258     'collapse'.
1259   </doc:p>
1260   <zeroOrMore>
1261     <ref name="enumeration" />
1262   </zeroOrMore>
1263   <optional>
1264     <ref name="whiteSpaceCollapse" />
1265   </optional>
1266   <zeroOrMore>
1267     <ref name="pattern" />
1268   </zeroOrMore>
1269 </define-->
1270 
1271 <define name="simpleRestrictionModel">
1272   <doc:p>
1273     This specifies the types of facets that are valid in restrictions on the 
1274     built-in data types.  This can only perform rudimentary checking, but 
1275     should be enough in most circumstances.  Note that for xs:anySimpleType 
1276     and xs:string, the whiteSpace facet can take any value, for 
1277     xs:normalizedString it can be 'replace' or 'collapse', and for all other 
1278     built-in types it has to be 'collapse'.
1279   </doc:p>
1280   <choice>
1281     <attribute name="base">
1282       <data type="QName" />
1283     </attribute>
1284     <ref name="simpleTypeHost" />
1285   </choice>
1286   <interleave>
1287     <!--ref name="rangeFacets" />
1288     <ref name="digitFacets" />
1289     <ref name="lengthFacets" />
1290     <optional>
1291       <ref name="whiteSpace" />
1292     </optional-->
1293     <zeroOrMore>
1294       <ref name="enumeration" />
1295     </zeroOrMore>
1296     <!--zeroOrMore>
1297       <ref name="pattern" />
1298     </zeroOrMore-->
1299   </interleave>
1300 </define>
1301 
1302 <define name="list">
1303   <doc:p>
1304     This describes a list element.  It can either specify a local simple type 
1305     or have a itemType attribute.  This constraint cannot be expressed in XML 
1306     Schema.
1307   </doc:p>
1308   <element name="list"
1309         doc:href="http://www.w3.org/TR/xmlschema-1/#element-list">
1310     <ref name="annotated" />
1311     <choice>      
1312       <ref name="simpleTypeHost" />
1313       <attribute name="itemType">
1314         <data type="QName" />
1315       </attribute>
1316     </choice>
1317   </element>
1318 </define>
1319 
1320 <define name="union">
1321   <doc:p>
1322     This describes a union element.  If the memberTypes attribute is missing 
1323     or empty, then it must contain one or more simpleType elements; if 
1324     it&apos;s present, then it can contain simpleType elements or list simple 
1325     types in the memberTypes attribute.  This constraint cannot be expressed 
1326     in XML Schema.
1327   </doc:p>
1328   <element name="union"
1329         doc:href="http://www.w3.org/TR/xmlschema-1/#element-union">
1330     <ref name="annotated" />
1331     <choice>
1332       <group>
1333         <attribute name="memberTypes">
1334           <list>
1335             <oneOrMore>
1336               <data type="QName" />
1337             </oneOrMore>
1338           </list>
1339         </attribute>
1340         <zeroOrMore>
1341           <ref name="simpleTypeHost" />
1342         </zeroOrMore>
1343       </group>
1344       <group>
1345         <optional>
1346           <attribute name="memberTypes">
1347             <empty />
1348           </attribute>
1349         </optional>
1350         <oneOrMore>
1351           <ref name="simpleTypeHost" />
1352         </oneOrMore>
1353       </group>
1354     </choice>
1355   </element>
1356 </define>
1357 
1358 <define name="facet" txw:mode="inherit">
1359   <doc:p>
1360     This is the basic content of a facet.  It has an optional fixed attribute.
1361   </doc:p>
1362   <ref name="annotated" />
1363   <optional>
1364     <attribute name="fixed">
1365       <data type="boolean" />
1366     </attribute>
1367   </optional>
1368 </define>
1369 
1370 <define name="noFixedFacet" txw:mode="inherit">
1371   <doc:p>
1372     This is the content of a facet that cannot be fixed (enumeration or 
1373     pattern).  It has a value attribute that can take any kind of value.
1374   </doc:p>
1375   <ref name="annotated" />
1376   <attribute name="value" />
1377 </define>
1378 
1379 <!--define name="rangeFacet">
1380   <doc:p>
1381     This is the content of a range facet.  The value must be one of the data 
1382     types shown (as these are the only types of data that accept ranges).  I 
1383     haven&apos;t gone so far as to indicate the data type of the value 
1384     attribute of a range facet according to the base type as this would be 
1385     very complicated (although it would be possible in RELAX NG).
1386   </doc:p>
1387   <ref name="facet" />
1388   <attribute name="value">
1389     <choice>
1390       <data type="decimal" />
1391       <data type="float" />
1392       <data type="double" />
1393       <data type="duration" />
1394       <data type="dateTime" />
1395       <data type="time" />
1396       <data type="date" />
1397       <data type="gYearMonth" />
1398       <data type="gYear" />
1399       <data type="gMonthDay" />
1400       <data type="gMonth" />
1401       <data type="gDay" />
1402     </choice>
1403   </attribute>
1404 </define>
1405 
1406 <define name="minExclusive">
1407   <doc:p>
1408     This describes a minExclusive element.
1409   </doc:p>
1410   <element name="minExclusive"
1411         doc:href="http://www.w3.org/TR/2001/REC-xmlschema-2-20010502/datatypes.html#element-minExclusive">
1412     <ref name="rangeFacet" />
1413   </element>
1414 </define>
1415 
1416 <define name="minInclusive">
1417   <doc:p>
1418     This describes a minInclusive element.
1419   </doc:p>
1420   <element name="minInclusive"
1421         doc:href="http://www.w3.org/TR/2001/REC-xmlschema-2-20010502/datatypes.html#element-minInclusive">
1422     <ref name="rangeFacet" />
1423   </element>
1424 </define>
1425 
1426 <define name="maxExclusive">
1427   <doc:p>
1428     This describes a maxExclusive element.
1429   </doc:p>
1430   <element name="maxExclusive"
1431         doc:href="http://www.w3.org/TR/2001/REC-xmlschema-2-20010502/datatypes.html#element-maxExclusive">
1432     <ref name="rangeFacet" />
1433   </element>
1434 </define>
1435 
1436 <define name="maxInclusive">
1437   <doc:p>
1438     This describes a maxInclusive element.
1439   </doc:p>
1440   <element name="maxInclusive"
1441         doc:href="http://www.w3.org/TR/2001/REC-xmlschema-2-20010502/datatypes.html#element-maxInclusive">
1442     <ref name="rangeFacet" />
1443   </element>
1444 </define>
1445 
1446 <define name="numFacet">
1447   <doc:p>
1448     This is the content of a numerical facet.
1449   </doc:p>
1450   <ref name="facet" />
1451   <attribute name="value">
1452     <data type="nonNegativeInteger" />
1453   </attribute>
1454 </define>
1455 
1456 <define name="totalDigits">
1457   <doc:p>
1458     This describes a totalDigits element.  The value attribute must take a 
1459     positive integer.
1460   </doc:p>
1461   <element name="totalDigits"
1462         doc:href="http://www.w3.org/TR/2001/REC-xmlschema-2-20010502/datatypes.html#element-totalDigits">
1463     <ref name="facet" />
1464     <attribute name="value">
1465       <data type="positiveInteger" />
1466     </attribute>
1467   </element>
1468 </define>
1469 
1470 <define name="fractionDigits">
1471   <doc:p>
1472     This describes a fractionDigits element.
1473   </doc:p>
1474   <element name="fractionDigits"
1475         doc:href="http://www.w3.org/TR/2001/REC-xmlschema-2-20010502/datatypes.html#element-fractionDigits">
1476     <ref name="numFacet" />
1477   </element>
1478 </define>
1479 
1480 <define name="length">
1481   <doc:p>
1482     This describes a length element.
1483   </doc:p>
1484   <element name="length"
1485         doc:href="http://www.w3.org/TR/2001/REC-xmlschema-2-20010502/datatypes.html#element-length">
1486     <ref name="numFacet" />
1487   </element>
1488 </define>
1489 
1490 <define name="minLength">
1491   <doc:p>
1492     This describes a minLength element.
1493   </doc:p>
1494   <element name="minLength"
1495         doc:href="http://www.w3.org/TR/2001/REC-xmlschema-2-20010502/datatypes.html#element-minLength">
1496     <ref name="numFacet" />
1497   </element>
1498 </define>
1499 
1500 <define name="maxLength">
1501   <doc:p>
1502     This describes a maxLength element.
1503   </doc:p>
1504   <element name="maxLength"
1505         doc:href="http://www.w3.org/TR/2001/REC-xmlschema-2-20010502/datatypes.html#element-maxLength">
1506     <ref name="numFacet" />
1507   </element>
1508 </define-->
1509 
1510 <define name="enumeration">
1511   <doc:p>
1512     This describes an enumeration element.
1513   </doc:p>
1514   <element name="enumeration"
1515         doc:href="http://www.w3.org/TR/2001/REC-xmlschema-2-20010502/datatypes.html#element-enumeration">
1516     <ref name="noFixedFacet" />
1517   </element>
1518 </define>
1519 
1520 <!--define name="whiteSpace">
1521   <doc:p>
1522     This describes a whiteSpace element that can take any of the permitted 
1523     values.
1524   </doc:p>
1525   <element name="whiteSpace"
1526         doc:href="http://www.w3.org/TR/2001/REC-xmlschema-2-20010502/datatypes.html#element-whiteSpace">
1527     <ref name="facet" />
1528     <attribute name="value">
1529       <choice>
1530         <value type="token">preserve</value>
1531         <value type="token">replace</value>
1532         <value type="token">collapse</value>
1533       </choice>
1534     </attribute>
1535   </element>
1536 </define>
1537 
1538 <define name="whiteSpaceReplaceOrCollapse">
1539   <doc:p>
1540     This describes a whiteSpace element that can only take the values 
1541     'replace' or 'collapse'.
1542   </doc:p>
1543   <element name="whiteSpace"
1544         doc:href="http://www.w3.org/TR/2001/REC-xmlschema-2-20010502/datatypes.html#element-whiteSpace">
1545     <ref name="facet" />
1546     <attribute name="value">
1547       <choice>
1548         <value type="token">replace</value>
1549         <value type="token">collapse</value>
1550       </choice>
1551     </attribute>
1552   </element>
1553 </define>
1554 
1555 <define name="whiteSpaceCollapse">
1556   <doc:p>
1557     This describes a whiteSpace element that can only take the value 
1558     'collapse'.
1559   </doc:p>
1560   <element name="whiteSpace"
1561         doc:href="http://www.w3.org/TR/2001/REC-xmlschema-2-20010502/datatypes.html#element-whiteSpace">
1562     <ref name="facet" />
1563     <attribute name="value">
1564       <value type="token">collapse</value>
1565     </attribute>
1566   </element>
1567 </define>
1568 
1569 <define name="pattern">
1570   <doc:p>
1571     This describes a pattern element.
1572   </doc:p>
1573   <element name="pattern"
1574         doc:href="http://www.w3.org/TR/2001/REC-xmlschema-2-20010502/datatypes.html#element-pattern">
1575     <ref name="noFixedFacet" />
1576   </element>
1577 </define-->
1578 
1579 </grammar>