ѕоскольку схемы станов¤тс¤ все более крупными, часто желательно делить их содержание на нескольких документов. Ёто облегчает их обслуживание, управление доступом, и удобочитаемость. ѕо этим причинам мы вз¤ли конструкции схемы, описывающие адреса из po.xsd, и поместили их в новый файл с именем address.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>
‘айл, содержащий конструкции
адреса, представлен ниже:
<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 мы опишем, как схемы могут быть
использованы дл¤ проверки правильности содержани¤ более чем одного пространства
имен.