13. Writing Extensible Schemas (samples)

Sample 1

[download]


  <xs:element name="library">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="book" maxOccurs="unbounded">
          <xs:complexType>
            <xs:sequence>
              <xs:element ref="isbn"/>
              <xs:element ref="title"/> 
              <xs:element ref="author" minOccurs="0"
                maxOccurs="unbounded"/> 
              <xs:element ref="character" minOccurs="0"
                maxOccurs="unbounded"/>
            </xs:sequence>
            <xs:attribute ref="id"/>
            <xs:attribute ref="available"/>
          </xs:complexType>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>

Sample 2

[download]


  <xs:element name="book">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="isbn"/>
        <xs:element ref="title"/>
        <xs:element ref="author" minOccurs="0" maxOccurs="unbounded"/> 
        <xs:element ref="character" minOccurs="0"
          maxOccurs="unbounded"/>
      </xs:sequence>
      <xs:attribute ref="id"/>
      <xs:attribute ref="available"/>
    </xs:complexType>
  </xs:element>

[download]


  <xs:element name="library">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="book" maxOccurs="unbounded"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>

Sample 3

[download]


  <xs:complexType name="bookType">
    <xs:sequence>
      <xs:element ref="isbn"/>
      <xs:element ref="title"/>
      <xs:element ref="author" minOccurs="0" maxOccurs="unbounded"/>
      <xs:element ref="character" minOccurs="0" maxOccurs="unbounded"/>
    </xs:sequence>
    <xs:attribute ref="id"/>
    <xs:attribute ref="available"/>
  </xs:complexType>

[download]


  <xs:element name="library">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="book" type="bookType" maxOccurs="unbounded"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>

Sample 4

[download]


  <xs:group name="bookGroup">
    <xs:sequence>
      <xs:element name="book">
        <xs:complexType>
          <xs:sequence>
            <xs:element ref="isbn"/>
            <xs:element ref="title"/> 
            <xs:element ref="author" minOccurs="0"
              maxOccurs="unbounded"/> 
            <xs:element ref="character" minOccurs="0"
              maxOccurs="unbounded"/>
          </xs:sequence>
          <xs:attribute ref="id"/>
          <xs:attribute ref="available"/>
        </xs:complexType>
      </xs:element>
    </xs:sequence>
  </xs:group>

[download]


  <xs:element name="library">
    <xs:complexType>
      <xs:sequence>
        <xs:group ref="bookGroup" maxOccurs="unbounded"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>

Sample 5

[download]


  <xs:complexType name="bookType">
    <xs:sequence>
      <xs:element ref="isbn"/>
      <xs:element ref="title"/>
      <xs:element ref="author" minOccurs="0" maxOccurs="unbounded"/>
      <xs:element ref="character" minOccurs="0" maxOccurs="unbounded"/>
    </xs:sequence>
    <xs:attribute ref="id"/>
    <xs:attribute ref="available"/>
  </xs:complexType>

[download]


  <xs:element name="book" type="bookType"/>

[download]


  <xs:group name="bookGroup">
    <xs:sequence>
      <xs:element ref="book"/>
    </xs:sequence>
  </xs:group>

[download]


  <xs:element name="library">
    <xs:complexType>
      <xs:sequence>
        <xs:group ref="bookGroup" maxOccurs="unbounded"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>

Sample 6


  

  <xs:group name="section">
    <xs:sequence>
      <xs:element ref="title"/>
      <xs:choice>
        <xs:group ref="section" maxOccurs="unbounded"/>
        <xs:element ref="para" maxOccurs="unbounded"/>
      </xs:choice>
    </xs:sequence>
  </xs:group>



Sample 7

[download]


  <xs:element name="title">
    <xs:complexType>
      <xs:simpleContent>
        <xs:extension base="xs:token">
          <xs:attribute name="lang">
            <xs:simpleType>
              <xs:restriction base="xs:language">
                <xs:enumeration value="en"/>
                <xs:enumeration value="fr"/>
              </xs:restriction>
            </xs:simpleType>
          </xs:attribute>
        </xs:extension>
      </xs:simpleContent>
    </xs:complexType>
  </xs:element>

Sample 8

[download]


  <xs:attribute name="lang">
    <xs:simpleType>
      <xs:restriction base="xs:language">
        <xs:enumeration value="en"/>
        <xs:enumeration value="fr"/>
      </xs:restriction>
    </xs:simpleType>
  </xs:attribute>

[download]


  <xs:element name="title">
    <xs:complexType>
      <xs:simpleContent>
        <xs:extension base="xs:token">
          <xs:attribute ref="lang"/>
        </xs:extension>
      </xs:simpleContent>
    </xs:complexType>
  </xs:element>

Sample 9

[download]


  <xs:simpleType name="langType">
    <xs:restriction base="xs:language">
      <xs:enumeration value="en"/>
      <xs:enumeration value="fr"/>
    </xs:restriction>
  </xs:simpleType>

[download]


  <xs:element name="title">
    <xs:complexType>
      <xs:simpleContent>
        <xs:extension base="xs:token">
          <xs:attribute name="lang" type="langType"/>
        </xs:extension>
      </xs:simpleContent>
    </xs:complexType>
  </xs:element>

Sample 10

[download]


  <xs:attributeGroup name="langGroup">
    <xs:attribute name="lang">
      <xs:simpleType>
        <xs:restriction base="xs:language">
          <xs:enumeration value="en"/>
          <xs:enumeration value="fr"/>
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
  </xs:attributeGroup>

[download]


  <xs:element name="title">
    <xs:complexType>
      <xs:simpleContent>
        <xs:extension base="xs:token">
          <xs:attributeGroup ref="langGroup"/>
        </xs:extension>
      </xs:simpleContent>
    </xs:complexType>
  </xs:element>

Sample 11

[download]


  <xs:simpleType name="langType">
    <xs:restriction base="xs:language">
      <xs:enumeration value="en"/>
      <xs:enumeration value="fr"/>
    </xs:restriction>
  </xs:simpleType>

[download]


  <xs:attribute name="lang" type="langType"/>

[download]


  <xs:attributeGroup name="langGroup">
    <xs:attribute ref="lang"/>
  </xs:attributeGroup>

[download]


  <xs:element name="title">
    <xs:complexType>
      <xs:simpleContent>
        <xs:extension base="xs:token">
          <xs:attributeGroup ref="langGroup"/>
        </xs:extension>
      </xs:simpleContent>
    </xs:complexType>
  </xs:element>