programmera.net -> webservice -> normal     för utskrift      info@programmera.net

XML Schema

1. Vad är XML Schema?
2. po.xml
3. po.xsd

1. Vad är XML Schema?

XML Schema är ett sätt att verifera att ett XML-dokument håller en viss standard. Genom att skriva ett XML Schema som definierar hur ett XML-dokument får se ut har du skapat din egen standard. Specifikationen för XML Schema utfärdas av W3C och är uppdelad i 3 dokument:

  1. XML Schema Part 0: Primer (Second Edition) finns på  http://www.w3.org/TR/2004/REC-xmlschema-0-20041028/ . Ett relativt lättläst dokument som syftar till att läsaren snabbt ska förstå hur man skapar ett XML Schema-dokument.
  2. XML Schema Part 1: Structures (Second Edition) finns på  http://www.w3.org/TR/2004/REC-xmlschema-1-20041028/structures.html . Detta dokument innehåller den fullständiga specifikationen för strukturer.
  3. XML Schema Part 2: Datatypes (Second Edition) finns på  http://www.w3.org/TR/2004/REC-xmlschema-2-20041028/datatypes.html . Detta dokument specifierar hur man skapar datatyper i XML Schema.

2. po.xml

Vi börjar med ett XML-dokument, Purchase Order, som ser ut på följande sätt (taget från XML Schema: Primer) :

<?xml version="1.0"?>
<purchaseOrder xmlns="http://www.example.com/PO1" orderDate="1999-10-20">
   <shipTo country="US">
      <name>Alice Smith</name>
      <street>123 Maple Street</street>
      <city>Mill Valley</city>
      <state>CA</state>
      <zip>90952</zip>
   </shipTo>
   <billTo country="US">
      <name>Robert Smith</name>
      <street>8 Oak Avenue</street>
      <city>Old Town</city>
      <state>PA</state>
      <zip>95819</zip>
   </billTo>
   <comment>Hurry, my lawn is going wild<!/comment>
   <items>
      <item partNum="872-AA">
         <productName>Lawnmower</productName>
         <quantity>1</quantity>
         <USPrice>148.95</USPrice>
         <comment>Confirm this is electric</comment>
      </item>
      <item partNum="926-AA">
         <productName>Baby Monitor</productName>
         <quantity>1</quantity>
         <USPrice>39.98</USPrice>
         <shipDate>1999-05-21</shipDate>
      </item>
   </items>
</purchaseOrder>

I detta dokument är det den andra raden som är mest intressant:

<purchaseOrder xmlns="http://www.example.com/PO1" orderDate="1999-10-20">
Attributet xmlns pekar ut det XML Schema som validerar detta dokument.

3. po.xsd

Nedan visas XML Schema för Purchase Order (från XML Schema: Primer):


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

  <xsd:annotation>
    <xsd:documentation xml:lang="en">
     Purchase order schema for Example.com.
     Copyright 2000 Example.com. All rights reserved.
    </xsd:documentation>
  </xsd:annotation>

  <xsd:element name="purchaseOrder" type="PurchaseOrderType"/>

  <xsd:element name="comment" type="xsd:string"/>

  <xsd:complexType name="PurchaseOrderType">
    <xsd:sequence>
      <xsd:element name="shipTo" type="USAddress"/>
      <xsd:element name="billTo" type="USAddress"/>
      <xsd:element ref="comment" minOccurs="0"/>
      <xsd:element name="items"  type="Items"/>
    </xsd:sequence>
    <xsd:attribute name="orderDate" type="xsd:date"/>
  </xsd:complexType>

  <xsd:complexType name="USAddress">
    <xsd:sequence>
      <xsd:element name="name"   type="xsd:string"/>
      <xsd:element name="street" type="xsd:string"/>
      <xsd:element name="city"   type="xsd:string"/>
      <xsd:element name="state"  type="xsd:string"/>
      <xsd:element name="zip"    type="xsd:decimal"/>
    </xsd:sequence>
    <xsd:attribute name="country" type="xsd:NMTOKEN"
                   fixed="US"/>
  </xsd:complexType>

  <xsd:complexType name="Items">
    <xsd:sequence>
      <xsd:element name="item" minOccurs="0" maxOccurs="unbounded">
        <xsd:complexType>
          <xsd:sequence>
            <xsd:element name="productName" type="xsd:string"/>
            <xsd:element name="quantity">
              <xsd:simpleType>
                <xsd:restriction base="xsd:positiveInteger">
                  <xsd:maxExclusive value="100"/>
                </xsd:restriction>
              </xsd:simpleType>
            </xsd:element>
            <xsd:element name="USPrice"  type="xsd:decimal"/>
            <xsd:element ref="comment"   minOccurs="0"/>
            <xsd:element name="shipDate" type="xsd:date" minOccurs="0"/>
          </xsd:sequence>
          <xsd:attribute name="partNum" type="SKU" use="required"/>
        </xsd:complexType>
      </xsd:element>
    </xsd:sequence>
  </xsd:complexType>

  <!-- Stock Keeping Unit, a code for identifying products -->
  <xsd:simpleType name="SKU">
    <xsd:restriction base="xsd:string">
      <xsd:pattern value="\d{3}-[A-Z]{2}"/>
    </xsd:restriction>
  </xsd:simpleType>

</xsd:schema>