8. Creating Building Blocks (samples)

Sample 1

[download]

<?xml version="1.0"?> 
<!-- $Header:
/home/cvsroot/w3c-xml-schema/user/examples/building-blocks/simple-types.xsd,v
1.12001/11/26 13:27:08 vdv Exp $ -->
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:simpleType name="string255">
    <xs:restriction base="xs:token">
      <xs:maxLength value="255"/>
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="string32">
    <xs:restriction base="xs:token">
      <xs:maxLength value="32"/>
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="isbn">
    <xs:restriction base="xs:unsignedLong">
      <xs:totalDigits value="10"/>
      <xs:pattern value="\d{10}"/>
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="bookID">
    <xs:restriction base="xs:ID">
      <xs:pattern value="b\d{10}"/>
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="supportedLanguages">
    <xs:restriction base="xs:language">
      <xs:enumeration value="en"/>
      <xs:enumeration value="es"/>
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="date">
    <xs:restriction base="xs:date">
      <xs:pattern value="[^:Z]*"/>
    </xs:restriction>
  </xs:simpleType>
</xs:schema>

Sample 2

[download]


  <xs:include schemaLocation="simple-types.xsd"/>

Sample 3

[download]

<?xml version="1.0"?> 
<!-- $Header:
/home/cvsroot/w3c-xml-schema/user/examples/building-blocks/complex-types.xsd,v
1.12001/11/26 13:27:08 vdv Exp $ -->
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:complexType name="elementWithID">
    <xs:attribute ref="id"/>
  </xs:complexType>
  <xs:complexType name="bookTmp">
    <xs:complexContent>
      <xs:extension base="elementWithID">
        <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="available"/>
      </xs:extension>
    </xs:complexContent>
  </xs:complexType>
  <xs:complexType name="personType">
    <xs:complexContent>
      <xs:extension base="elementWithID">
        <xs:sequence>
          <xs:element ref="name"/>
          <xs:element ref="born"/>
          <xs:element ref="dead" minOccurs="0"/>
          <xs:element ref="qualification" minOccurs="0"/>
        </xs:sequence>
      </xs:extension>
    </xs:complexContent>
  </xs:complexType>
</xs:schema>

Sample 4

[download]


  <xs:include schemaLocation="simple-types.xsd"/>

  <xs:include schemaLocation="complex-types.xsd"/>

Sample 5

[download]


  <xs:element name="book">
    <xs:complexType>
      <xs:complexContent>
        <xs:restriction base="bookTmp">
          <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 name="id" type="bookID"/>
          <xs:attribute ref="available"/>
        </xs:restriction>
      </xs:complexContent>
    </xs:complexType>
  </xs:element>

Sample 6

[download]

<?xml version="1.0"?> 
<!-- $Header:
/home/cvsroot/w3c-xml-schema/user/examples/building-blocks/complex-types2.xsd,v
1.12001/11/26 13:27:08 vdv Exp $ -->
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:complexType name="elementWithID">
    <xs:attribute ref="id"/>
  </xs:complexType>
  <xs:complexType name="book">
    <xs:complexContent>
      <xs:extension base="elementWithID">
        <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="available"/>
      </xs:extension>
    </xs:complexContent>
  </xs:complexType>
  <xs:complexType name="personType">
    <xs:complexContent>
      <xs:extension base="elementWithID">
        <xs:sequence>
          <xs:element ref="name"/>
          <xs:element ref="born"/>
          <xs:element ref="dead" minOccurs="0"/>
          <xs:element ref="qualification" minOccurs="0"/>
        </xs:sequence>
      </xs:extension>
    </xs:complexContent>
  </xs:complexType>
</xs:schema>

Sample 7

[download]


  <xs:redefine schemaLocation="complex-types2.xsd">
    <xs:complexType name="book">
      <xs:complexContent>
        <xs:restriction base="book">
          <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 name="id" type="bookID"/>
          <xs:attribute ref="available"/>
        </xs:restriction>
      </xs:complexContent>
    </xs:complexType>
  </xs:redefine>

[download]


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

Sample 8

[download]

<?xml version="1.0"?> 
<!-- $Header:
/home/cvsroot/w3c-xml-schema/user/examples/building-blocks/character-group.xsd,v
1.12001/11/26 13:27:08 vdv Exp $ -->
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:group name="character">
    <xs:sequence>
      <xs:element ref="born"/>
      <xs:element ref="qualification"/>
    </xs:sequence>
  </xs:group>
</xs:schema>

Sample 9

[download]


  <xs:redefine schemaLocation="character-group.xsd">
    <xs:group name="character">
      <xs:sequence>
        <xs:element ref="name"/>
        <xs:group ref="character"/>
      </xs:sequence>
    </xs:group>
  </xs:redefine>

[download]


  <xs:element name="character">
    <xs:complexType>
      <xs:group ref="character"/>
      <xs:attribute ref="id"/>
    </xs:complexType>
  </xs:element>

Sample 10


  <xs:redefine schemaLocation="bar.xsd">
    <xs:group name="foo">
      <xs:sequence>
        <xs:sequence minOccurs="0">
          <xs:group ref="foo"/>
        </xs:sequence>
        <xs:element ref="bar"/>
      </xs:sequence>
    </xs:group>
  </xs:redefine>



Sample 11


  <xs:group name="group">
    <!-- This group definition is *not* valid -->
    <xs:sequence>
      <xs:element name="foo">
        <xs:complexType>
          <xs:group ref="group" minOccurs="0"/>
        </xs:complexType>
      </xs:element>
      <xs:element name="bar" type="xs:token"/>
    </xs:sequence>
  </xs:group>



Sample 12

[download]

<?xml version="1.0"?> 
<!-- $Header:
/home/cvsroot/w3c-xml-schema/user/examples/building-blocks/author.xsd,v
1.12001/11/26 13:27:08 vdv Exp $ -->
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:group name="author">
    <xs:sequence>
      <xs:element ref="name"/>
      <xs:element ref="born"/>
      <xs:element ref="dead" minOccurs="0"/>
      <xs:element name="nationality" type="xs:NMTOKEN" minOccurs="0"/>
    </xs:sequence>
  </xs:group>
</xs:schema>

Sample 13

[download]


  <xs:redefine schemaLocation="author.xsd">
    <xs:group name="author">
      <xs:sequence>
        <xs:element ref="name"/>
        <xs:element ref="born"/>
        <xs:element ref="dead" minOccurs="0"/>
      </xs:sequence>
    </xs:group>
  </xs:redefine>

[download]


  <xs:element name="author">
    <xs:complexType>
      <xs:group ref="author"/>
      <xs:attribute ref="id"/>
    </xs:complexType>
  </xs:element>

Sample 14


  <xs:attributeGroup name="commonAttributes">
    <xs:attribute name="id" type="xs:ID"/>
    <xs:attribute name="available" type="xs:boolean"/>
    <xs:attribute name="lang" type="xs:language"/>
  </xs:attributeGroup>

						

Sample 15


  <xs:redefine schemaLocation="attributes.xsd">
    <xs:attributeGroup name="commonAttributes">
      <xs:attribute name="id" type="xs:ID"/>
      <xs:attribute name="lang" type="xs:language"/>
    </xs:attributeGroup>
  </xs:redefine>

						

Sample 16


  <xs:pattern value=".+(Z|[+-].{5})"/>

Sample 17

[download]

<?xml version="1.0"?> 
<!-- $Header:
/home/cvsroot/w3c-xml-schema/user/examples/building-blocks/pattern.ent,v
1.12001/11/26 13:27:08 vdv Exp $ --> 
<xs:pattern value=".+(Z|[+-].{5})"
  xmlns:xs="http://www.w3.org/2001/XMLSchema"/>

Sample 18

<?xml version="1.0"?>
<!DOCTYPE xs:schema[
<!ENTITY TZ-pattern SYSTEM "pattern.ent">
]>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
	<xs:simpleType name="myDate">
		<xs:restriction base="xs:date">
				&TZ-pattern;
		</xs:restriction>
	</xs:simpleType>
	<xs:element name="myDate" type="myDate"/>
</xs:schema>
			 

Sample 19

[download]

<?xml version="1.0"?> 
<!-- $Header:
/home/cvsroot/w3c-xml-schema/user/examples/building-blocks/pattern.xsd,v
1.12001/11/26 13:27:08 vdv Exp $ -->
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:simpleType name="date">
    <xs:restriction base="xs:date">
      <xs:pattern value=".+(Z|[+-].{5})" id="TZ-pattern"/>
    </xs:restriction>
  </xs:simpleType>
  <xs:element name="myDate" type="myDate"/>
</xs:schema>

Sample 20

[download]

<?xml version="1.0"?> 
<!-- $Header:
/home/cvsroot/w3c-xml-schema/user/examples/building-blocks/xinclude.xsd,v
1.12001/11/26 13:27:08 vdv Exp $ --> 
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
  xmlns:xi="http://www.w3.org/2001/XInclude">
  <xs:simpleType name="myDateTime">
    <xs:restriction base="xs:dateTime">
      <xi:include href="pattern.xsd#TZ-pattern" parse="xml"/>
    </xs:restriction>
  </xs:simpleType>
  <xs:element name="myDate" type="myDateTime"/>
</xs:schema>

Sample 21

[download]

<?xml version="1.0"?> 
<!-- $Header:
/home/cvsroot/w3c-xml-schema/user/examples/simpleTypes.xsd,v 1.1
2001/11/2613:27:08 vdv Exp $ -->
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:simpleType name="string255">
    <xs:restriction base="xs:token">
      <xs:maxLength value="255"/>
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="string32">
    <xs:restriction base="xs:token">
      <xs:maxLength value="32"/>
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="isbn">
    <xs:restriction base="xs:unsignedLong">
      <xs:totalDigits value="10"/>
      <xs:pattern value="\d{10}"/>
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="bookID">
    <xs:restriction base="xs:ID">
      <xs:pattern value="b\d{10}"/>
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="supportedLanguages">
    <xs:restriction base="xs:language">
      <xs:enumeration value="en"/>
      <xs:enumeration value="es"/>
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="date">
    <xs:restriction base="xs:date">
      <xs:pattern value="[^:Z]*"/>
    </xs:restriction>
  </xs:simpleType>
</xs:schema>

Sample 22

[download]

<?xml version="1.0"?> 
<!-- $Header:
/home/cvsroot/w3c-xml-schema/user/examples/complexTypes.xsd,v 1.1
2001/11/2613:27:07 vdv Exp $ -->
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:complexType name="elementWithID">
    <xs:attribute ref="id"/>
  </xs:complexType>
  <xs:complexType name="bookTmp">
    <xs:complexContent>
      <xs:extension base="elementWithID">
        <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="available"/>
      </xs:extension>
    </xs:complexContent>
  </xs:complexType>
  <xs:complexType name="personType">
    <xs:complexContent>
      <xs:extension base="elementWithID">
        <xs:sequence>
          <xs:element ref="name"/>
          <xs:element ref="born"/>
          <xs:element ref="dead" minOccurs="0"/>
          <xs:element ref="qualification" minOccurs="0"/>
        </xs:sequence>
      </xs:extension>
    </xs:complexContent>
  </xs:complexType>
</xs:schema>

Sample 23

[download]

<?xml version="1.0"?> 
<!-- $Header:
/home/cvsroot/w3c-xml-schema/user/examples/first-building-blocks.xsd,v
1.12001/11/26 13:27:07 vdv Exp $ -->
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:include schemaLocation="simpleTypes.xsd"/>
  <xs:include schemaLocation="complexTypes.xsd"/>
  <xs:element name="name" type="string32"/>
  <xs:element name="qualification" type="string255"/>
  <xs:element name="born" type="date"/>
  <xs:element name="dead" type="date"/>
  <xs:element name="isbn" type="isbn"/>
  <xs:attribute name="id" type="xs:ID"/>
  <xs:attribute name="available" type="xs:boolean"/>
  <xs:attribute name="lang" type="supportedLanguages"/>
  <xs:element name="title">
    <xs:complexType>
      <xs:simpleContent>
        <xs:extension base="string255">
          <xs:attribute ref="lang"/>
        </xs:extension>
      </xs:simpleContent>
    </xs:complexType>
  </xs:element>
  <xs:element name="library">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="book" maxOccurs="unbounded"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:element name="book">
    <xs:complexType>
      <xs:complexContent>
        <xs:restriction base="bookTmp">
          <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 name="id" type="bookID"/>
          <xs:attribute ref="available"/>
        </xs:restriction>
      </xs:complexContent>
    </xs:complexType>
  </xs:element>
  <xs:element name="author">
    <xs:complexType>
      <xs:complexContent>
        <xs:restriction base="personType">
          <xs:sequence>
            <xs:element ref="name"/>
            <xs:element ref="born"/>
            <xs:element ref="dead" minOccurs="0"/>
          </xs:sequence>
          <xs:attribute ref="id"/>
        </xs:restriction>
      </xs:complexContent>
    </xs:complexType>
  </xs:element>
  <xs:element name="character">
    <xs:complexType>
      <xs:complexContent>
        <xs:restriction base="personType">
          <xs:sequence>
            <xs:element ref="name"/>
            <xs:element ref="born"/>
            <xs:element ref="qualification"/>
          </xs:sequence>
          <xs:attribute ref="id"/>
        </xs:restriction>
      </xs:complexContent>
    </xs:complexType>
  </xs:element>
</xs:schema>