Reuse complex type : Salami Slice « XML Schema « XML






Reuse complex type


File: Data.xml

<?xml version="1.0" standalone="yes"?>
<statement 
 xmlns="http://www.java2s.com/statement"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://www.java2s.com/statement statement.xsd">
           
   <customer name="name 1" number="CUST123" type="VIP"/>
   <orders count="2">
      <order number="ORD100" owner="CUST123" total="500.00">
         <items>
            <item quantity="5" price="100">
              <description>item 1</description>
            </item>
            <item quantity="2" price="50">
              <description>item 2</description>
            </item>
         </items>
      </order>
      <order number="ORD101" owner="CUST123" total="150.00">
         <items>
            <item quantity="6" price="25">
              <description>item 3</description>
            </item>
         </items>
      </order>
   </orders>
</statement>
File: Schema.xsd

<?xml version="1.0" ?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
  targetNamespace="http://www.java2s.com/statement"
  xmlns="http://www.java2s.com/statement">

  <xs:element name="statement">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="customer" />
        <xs:element ref="orders" />
      </xs:sequence>
    </xs:complexType>
  </xs:element>

  <xs:element name="customer">
    <xs:complexType>
      <xs:sequence />
      <xs:attribute name="number" type="xs:ID" />
      <xs:attribute name="name"   type="xs:string" />
      <xs:attribute name="type"   type="xs:string"
       use="optional" default="normal" />
    </xs:complexType>
  </xs:element>

  <xs:element name="orders">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="order"
         maxOccurs="unbounded" />
      </xs:sequence>
      <xs:attribute name="count" 
       type="xs:nonNegativeInteger" />
    </xs:complexType>
  </xs:element>

  <xs:element name="order">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="items" />
      </xs:sequence>
      <xs:attribute name="number" type="xs:ID" />
      <xs:attribute name="owner"  type="xs:IDREF" />
      <xs:attribute name="total"  type="xs:decimal" />
    </xs:complexType>
  </xs:element>

  <xs:element name="items">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="item" 
         maxOccurs="unbounded" />
      </xs:sequence>
    </xs:complexType>
  </xs:element>

  <xs:element name="item">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="description" />
      </xs:sequence>
      <xs:attribute name="quantity" type="xs:nonNegativeInteger" />
      <xs:attribute name="price"    type="xs:decimal" />
    </xs:complexType>
  </xs:element>

  <xs:element name="description" type="xs:string" />
</xs:schema>

 








Related examples in the same category

1.Salami Slice Design
2.Global attibute definitions
3.Ref and Salami Slice
4.different types with the same name
5.Reuse data type defined
6.Reuse data type defined in another xml schema file
7.Schema for XSchema elements