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