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