D A T Y P I C
home
services
books
Overview
Table of Contents
Sample Chapter
Examples
1. Intro
2. Quick tour
3. Namespaces
4. Include/Import
5. Instances
6. Annotations
7. Element Decls
8. Attribute Decls
9. Simple types
10. Regexes
11. Union/List types
12. Built-in types
13. Complex types
14. Type derivation
15. Groups
16. Subst. groups
17. ID constraints
18. Redefines
19. DTDs topics
20. Naming
21. Extensibility
Errata
about
Definitive XML Schema

Definitive XML Schema

Priscilla Walmsley (pwalmsley@datypic.com)
1st edition (December 7, 2001)
Prentice Hall PTR; ISBN: 0130655678
Amazon.com
Buy at 30% off list price


Chapter 4: Schema composition


Full Example

This pulls together examples 4-3, 4-4 and 4-5, illustrating include, chameleon include, and import, respectively. Note that only the root element of the instance is prefixed, because all elements in all schema documents are declared locally and no elementFormDefault is specified.

Instance (chapter04.xml)

<ord:order  xmlns:ord="http://example.org/ord"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation="http://example.org/ord chapter04ord1.xsd">
  <number>123ABBCC123</number>
  <customer>
    <name>Priscilla Walmsley</name>
    <number>15466</number>
  </customer>
  <items>
    <product>
      <number>557</number>
      <name>Short-Sleeved Linen Blouse</name>
      <size system="US-DRESS">10</size>
      <color value="blue"/>
    </product>
  </items>
</ord:order>

Schema Document 1 (chapter04ord1.xsd)

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
            targetNamespace="http://example.org/ord"
            xmlns="http://example.org/ord"
            xmlns:prod="http://example.org/prod">

  <xs:include schemaLocation="chapter04ord2.xsd"/>
  <xs:include schemaLocation="chapter04cust.xsd"/>
  <xs:import namespace="http://example.org/prod"
                 schemaLocation="chapter04prod.xsd"/>

  <xs:element name="order" type="OrderType"/>
  <xs:complexType name="OrderType">
    <xs:sequence>
      <xs:element name="number" type="OrderNumType"/>
      <xs:element name="customer" type="CustomerType"/>
      <xs:element name="items" type="prod:ItemsType"/>
    </xs:sequence>
  </xs:complexType>

</xs:schema>

Schema Document 2 (chapter04ord2.xsd)

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
            xmlns="http://example.org/ord"
            targetNamespace="http://example.org/ord">

  <xs:simpleType name="OrderNumType">
    <xs:restriction base="xs:string"/>
  </xs:simpleType>

</xs:schema>

Schema Document 3 (chapter04cust.xsd)

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">

  <xs:complexType name="CustomerType">
    <xs:sequence>
      <xs:element name="name" type="CustNameType"/>
      <xs:element name="number" type="xs:integer"/>
    </xs:sequence>
  </xs:complexType>

  <xs:simpleType name="CustNameType">
    <xs:restriction base="xs:string"/>
  </xs:simpleType>

</xs:schema>

Schema Document 4 (chapter04prod.xsd)

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
            xmlns="http://example.org/prod"
            targetNamespace="http://example.org/prod">

  <xs:complexType name="ItemsType">
    <xs:sequence>
      <xs:element name="product" type="ProductType"/>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="ProductType">
    <xs:sequence>
      <xs:element name="number" type="xs:integer"/>
      <xs:element name="name" type="xs:string"/>
      <xs:element name="size" type="SizeType"/>
      <xs:element name="color" type="ColorType"/>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="SizeType">
    <xs:simpleContent>
      <xs:extension base="xs:integer">
        <xs:attribute name="system" type="xs:string"/>
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>

  <xs:complexType name="ColorType">
    <xs:attribute name="value" type="xs:string"/>
  </xs:complexType>

</xs:schema>


Book Examples

Example 4-1. Illegal duplication of element-type names

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
            xmlns="http://example.org/ord"
            targetNamespace="http://example.org/ord">
  <xsd:include schemaLocation="ord2.xsd"/>
  <xsd:element name="order" type="OrderType"/>
</xsd:schema>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
            xmlns="http://example.org/ord"
            targetNamespace="http://example.org/ord">
  <xsd:element name="order" type="OrderType"/>
</xsd:schema>


Example 4-2. Missing component

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
            xmlns="http://example.org/ord"
            targetNamespace="http://example.org/ord">

  <xsd:element name="number" type="xsd:integer"/>
  <xsd:element name="order" type="OrderType"/>
</xsd:schema>


Example 4-3. Include

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
            xmlns="http://example.org/ord"
            targetNamespace="http://example.org/ord">

  <xsd:include schemaLocation="ord2.xsd"/>

  <xsd:element name="order" type="OrderType"/>
  <xsd:complexType name="OrderType">
    <xsd:sequence>
      <xsd:element name="number" type="OrderNumType"/>
      <!--...-->
    </xsd:sequence>
  </xsd:complexType>

</xsd:schema>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
            xmlns="http://example.org/ord"
            targetNamespace="http://example.org/ord">

  <xsd:simpleType name="OrderNumType">
    <xsd:restriction base="xsd:string"/>
  </xsd:simpleType>
</xsd:schema>


Example 4-4. Chameleon include

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
            xmlns="http://example.org/ord"
            targetNamespace="http://example.org/ord">

  <xsd:include schemaLocation="cust.xsd"/>

  <xsd:element name="order" type="OrderType"/>
  <xsd:complexType name="OrderType">
    <xsd:sequence>
      <xsd:element name="number" type="OrderNumType"/>
      <xsd:element name="customer" type="CustomerType"/>
      <!--...-->
    </xsd:sequence>
  </xsd:complexType>
</xsd:schema>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">

  <xsd:complexType name="CustomerType">
    <xsd:sequence>
      <xsd:element name="name" type="CustNameType"/>
      <!--...-->
    </xsd:sequence>
  </xsd:complexType>
  <xsd:simpleType name="CustNameType">
    <xsd:restriction base="xsd:string"/>
  </xsd:simpleType>
</xsd:schema>


Example 4-5. Import

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
            xmlns="http://example.org/ord"
            xmlns:prod="http://example.org/prod"
            targetNamespace="http://example.org/ord">

  <xsd:import namespace="http://example.org/prod"
              schemaLocation="prod.xsd"/>

  <xsd:element name="order" type="OrderType"/>
  <xsd:complexType name="OrderType">
    <xsd:sequence>
      <xsd:element name="number" type="OrderNumType"/>
      <xsd:element name="items" type="prod:ItemsType"/>
      <!--...-->
    </xsd:sequence>
  </xsd:complexType>
</xsd:schema>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
        xmlns="http://example.org/prod"
        targetNamespace="http://example.org/prod">

  <xsd:complexType name="ItemsType">
    <xsd:sequence>
      <xsd:element name="product" type="ProductType"/>
    </xsd:sequence>
  </xsd:complexType>
</xsd:schema>