5. Расширенные концепции III: Квартальный отчет

Приложение для учета изделий для дома может сгенерировать специализированные отчеты, которые суммируют, сколько и какие типы продуктов были поставлены в регион. Пример такого отчета за четвертый квартал 1999, показан в 4Q99.xml.

Отметим, что в этом разделе мы используем квалифицированные элементы в схеме, и где возможно пространство имен по умолчанию.

Квартальный отчет, 4Q99.xml

<purchaseReport
  xmlns="http://www.example.com/Report"
  period="P3M" periodEnding="1999-12-31">

 <regions>
  <zip code="95819">
   <part number="872-AA" quantity="1"/>
   <part number="926-AA" quantity="1"/>
   <part number="833-AA" quantity="1"/>
   <part number="455-BX" quantity="1"/>
  </zip>
  <zip code="63143">
   <part number="455-BX" quantity="4"/>
  </zip>
 </regions>

 <parts>
  <part number="872-AA">Lawnmower</part>
  <part number="926-AA">Baby Monitor</part>
  <part number="833-AA">Lapis Necklace</part>
  <part number="455-BX">Sturdy Shelves</part>
 </parts>

</purchaseReport>

Части списков отчетов с номером и количеством  объявляются с различными почтовыми индексами. Это обеспечивает описание каждой части отдельно. Действительно, анализируя представленные счета, ясно видно назначение отчетов и однозначность данных, которые определены номером.  Например, каждый почтовый индекс появляется только однажды (уникальность). Точно так же описание каждой объявленной части представляется только один раз, хотя части могут быть связаны с несколькими почтовыми индексами (ссылочное ограничение), как, например, номер части 455-BX. В следующих разделах, мы увидим, как специфицировать эти ограничения, используя XML Schema.

Схема отчета, report.xsd

<schema targetNamespace="http://www.example.com/Report"
		xmlns="http://www.w3.org/2001/XMLSchema"
		xmlns:r="http://www.example.com/Report"
		xmlns:xipo="http://www.example.com/IPO"
		elementFormDefault="qualified">

 <!-- for SKU -->
 <import namespace="http://www.example.com/IPO"/>
 <annotation>
  <documentation xml:lang="en">
   Report schema for Example.com
   Copyright 2000 Example.com. All rights reserved.
  </documentation>
 </annotation>

 <element name="purchaseReport">
  <complexType>
   <sequence>
    <element name="regions" type="r:RegionsType">
     <keyref name="dummy2" refer="r:pNumKey">
      <selector xpath="r:zip/r:part"/>
      <field xpath="@number"/>
     </keyref>
    </element>

    <element name="parts" type="r:PartsType"/>
   </sequence>
   <attribute name="period" type="duration"/>
   <attribute name="periodEnding" type="date"/>
  </complexType>

  <unique name="dummy1">
   <selector xpath="r:regions/r:zip"/>
   <field xpath="@code"/>
  </unique>

  <key name="pNumKey">
   <selector xpath="r:parts/r:part"/>
   <field xpath="@number"/>
  </key>
 </element>

 <complexType name="RegionsType">
  <sequence>
   <element name="zip" maxOccurs="unbounded">
    <complexType>
     <sequence>
      <element name="part" maxOccurs="unbounded">
       <complexType>
        <complexContent>
         <restriction base="anyType">
          <attribute name="number" type="xipo:SKU"/>
          <attribute name="quantity" type="positiveInteger"/>
         </restriction>
        </complexContent>
       </complexType>
      </element>
     </sequence>
     <attribute name="code" type="positiveInteger"/>
    </complexType>
   </element>
  </sequence>
 </complexType>
 
 <complexType name="PartsType">
  <sequence>
   <element name="part" maxOccurs="unbounded">
    <complexType>
     <simpleContent>
      <extension base="string">
       <attribute name="number" type="xipo:SKU"/>
      </extension>
     </simpleContent>
    </complexType>
   </element>
  </sequence>
 </complexType>

</schema>

LinkSale | LinkObmen |
Используются технологии uCoz