4.1 —хема в нескольких документах

ѕоскольку схемы станов¤тс¤ все более крупными, часто желательно делить их содержание на нескольких документов. Ёто облегчает их обслуживание, управление доступом, и удобочитаемость. ѕо этим причинам мы вз¤ли конструкции схемы, описывающие адреса из po.xsd, и поместили их в новый файл с именем address.xsd. ћодифицированный файл схемы счета на покупку назван ipo.xsd:

—хема международного счета на покупку, ipo.xsd

<schema targetNamespace=Фhttp://www.example.com/IPOФ
		xmlns=Фhttp://www.w3.org/2001/XMLSchemaФ
		xmlns:ipo=Фhttp://www.example.com/IPOФ>

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

 <!-- include address constructs -->
 <include
  schemaLocation=Фhttp://www.example.com/schemas/address.xsdФ/>

 <element name=ФpurchaseOrderФ type=Фipo:PurchaseOrderTypeФ/>

 <element name=ФcommentФ type=ФstringФ/>

 <complexType name=ФPurchaseOrderTypeФ>
  <sequence>
   <element name=ФshipToФ type=Фipo:AddressФ/>
   <element name=ФbillToФ type=Фipo:AddressФ/>
   <element ref=Фipo:commentФ minOccurs=Ф0Ф/>
   <element name=ФitemsФ type=Фipo:ItemsФ/>
  </sequence>
  <attribute name=ФorderDateФ type=ФdateФ/>
 </complexType>

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

 <simpleType name=ФSKUФ>
  <restriction base=ФstringФ>
   <pattern value=Ф\d{3}-[A-Z]{2}Ф/>
  </restriction>
 </simpleType>

</schema>

‘айл, содержащий конструкции адреса, представлен ниже:

јдреса дл¤ схемы международного счета на покупку, address.xsd

<schema targetNamespace=Фhttp://www.example.com/IPOФ
		xmlns=Фhttp://www.w3.org/2001/XMLSchemaФ
		xmlns:ipo=Фhttp://www.example.com/IPOФ>

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

 <complexType name=ФAddressФ>
  <sequence>
   <element name=ФnameФ type=ФstringФ/>
   <element name=ФstreetФ type=ФstringФ/>
   <element name=ФcityФ type=ФstringФ/>
  </sequence>
 </complexType>

 <complexType name=ФUSAddressФ>
  <complexContent>
   <extension base=Фipo:AddressФ>
    <sequence>
     <element name=ФstateФ type=Фipo:USStateФ/>
     <element name=ФzipФ type=ФpositiveIntegerФ/>
    </sequence>
   </extension>
  </complexContent>
 </complexType><

 <complexType name=ФUKAddressФ>
  <complexContent>
   <extension base=Фipo:AddressФ>
    <sequence>
     <element name=ФpostcodeФ type=Фipo:UKPostcodeФ/>
    </sequence>
    <attribute name=ФexportCodeФ type=ФpositiveIntegerФ fixed=Ф1Ф/>
   </extension>
  </complexContent>
 </complexType>

 <!-- other Address derivations for more countries -->

 <simpleType name=ФUSStateФ>
  <restriction base=ФstringФ>
   <enumeration value=ФAKФ/>
   <enumeration value=ФALФ/>
   <enumeration value=ФARФ/>
   <!-- and so on ... -->
  </restriction>
 </simpleType>

 <!-- simple type definition for UKPostcode -->

<</schema>

—чет на покупку и конструкции адреса теперь содержатс¤ в двух файлах схемы, ipo.xsd и address.xsd. ƒл¤ того, чтобы представить эти конструкции как часть схемы международного счета на покупку, или другими словами, включить их в пространство имен международного счета на покупку, ipo.xsd содержит элемент include,:

<include schemaLocation=Фhttp://www.example.com/schemas/address.xsdФ/>

Ёффект использовани¤ элемента include заключаетс¤ в том, что определени¤ и объ¤влени¤, которые содержатс¤ в address.xsd, будут доступными как часть схемы целевого пространства имен международного счета на покупку. ќдно важное предостережение относительно использовани¤ include. ÷елевое пространство имен включенных компонент должно быть тем же самым, что и целевое пространство имен в схеме, в данном случае - http://www.example.com/IPO.»спользование механизма include дл¤ привносимых из вне определений и объ¤влений позвол¤ет эффективно добавить эти компоненты к существующему целевому пространству имен. ¬ –азделе 4.5, мы опишем подобный механизм, который дает возможность ¬ам изменить некоторые компоненты, когда они уже введены.

¬ нашем примере мы показали только один включающий и один включаемый документ. –еально можно включать несколько документов, использу¤ несколько элементов include. ѕри этом включаемые документы сами могут включать другие документы. ќднако вложение документов таким способом ¤вл¤етс¤ корректным, только если все включенные части схемы объ¤влены с одним и тем же целевым пространством имен.

ƒокументы примера, соответствующие схеме определени¤ которой охватывают несколько схем, нуждаютс¤ только в ссылке на 'самый верхний' документ и общее пространство имен. —обрать вместе все определени¤, указанные в различных включенных документах, это задача обработчика. ¬ыше в нашем примере, документ ipo.xml (см. –аздел 4.3) ссылаетс¤ только на общее целевоепространство имен, http://www.example.com/IPO, и (косвенно) один файл схемы http://www.example.com/schemas/ipo.xsd. ќбработчик несет ответственность за получение файла схемы address.xsd.

¬ –азделе 5.4 мы опишем, как схемы могут быть использованы дл¤ проверки правильности содержани¤ более чем одного пространства имен.

 

Сайт создан в системе uCoz