2.2 Определения сложных типов, объявления элементов и атрибутов

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

Новые сложные типы определены, посредством использования элемента complexType, и обычно такие определения содержат набор объявлений элементов, ссылок элементов и объявлений атрибутов. Объявления не самостоятельные типы, а скорее ассоциация между именем и ограничениями, которые управляют представлением этого имени в документах, регулируемых связанной схемой. Элементы объявляются посредством использования элемента element, а атрибуты элемента attribute. Например, USAddress определен как сложный тип, и внутри его определения мы видим пять объявлений элементов и одно объявление атрибута:

Определение типа USAddress

<xsd:complexType name="USAddress" > <xsd:sequence> <xsd:element name="name" type="xsd:string"/> <xsd:element name="street" type="xsd:string"/> <xsd:element name="city" type="xsd:string"/> <xsd:element name="state" type="xsd:string"/> <xsd:element name="zip" type="xsd:decimal"/> </xsd:sequence> <xsd:attribute name="country" type="xsd:NMTOKEN" fixed="US"/> </xsd:complexType>

Вывод из этого определения заключается в том, что любой элемент, представленный в примере, чей тип объявлен как USAddress (например, shipTo в po.xml) должен состоять из пяти элементов и одного атрибута. Эти элементы должны называться name, street, city, state и zip, как задано значениями объявления атрибута name. Кроме этого, элементы должны появляться в той же последовательности (порядке), в котором они объявлены. Каждый из этих первых четырех элементов будет содержать строковое значение, а пятый числовое. Элемент, тип которого объявлен как USAddress, может представляться с атрибутом country, который должен содержать строку US.

Определение USAddress содержит только объявления, включающее простые типы: string, decimal и NMTOKEN. Напротив, определение PurchaseOrderType содержит объявления элементов, включающих сложные типы, например, USAddress, хотя отметим, что оба объявления используют тот же самый атрибут type для определения типа, независимо от того, является тип простым или сложным.

Определение PurchaseOrderType

<xsd:complexType name="PurchaseOrderType"> <xsd:sequence> <xsd:element name="shipTo" type="USAddress"/> <xsd:element name="billTo" type="USAddress"/> <xsd:element ref="comment" minOccurs="0"/> <xsd:element name="items" type="Items"/> </xsd:sequence> <xsd:attribute name="orderDate" type="xsd:date"/> </xsd:complexType>

В определении PurchaseOrderType два объявления элементов (shipTo и billTo)связывают разные имена элементов с одним и тем же сложным типом, а именно USAddress. Последствие этого определения заключается в том, что любой элемент, представленный в документе примера (например, po.xml), чей тип объявлен как PurchaseOrderType, должен состоять из элементов shipTo и billTo, содержащих пять подэлементов (name, street, city, state и zip), которые объявлены как часть USAddress. Элементы shipTo и billTo могут также включать атрибут country, который объявлен как часть USAddress.

Определение PurchaseOrderType содержит атрибут orderDate, объявление которого подобно объявлению атрибута country, определяет простой тип. Фактически, все объявления атрибутов должны ссылаться на простые типы, потому что в отличие от объявлений элементов, атрибуты не могут содержать других элементов или атрибутов.

Объявления элементов, которые мы пока описали, имеют имя, связанное с существующим определением типа. Иногда, более предпочтительно использовать существующий элемент, а не объявлять новый, например:

<xsd:element ref=”comment” minOccurs=”0”/>

Это объявление ссылается на существующий элемент comment, который объявлен где-то в другом месте схемы счета на покупку. В общем случае, значение атрибута ref должно ссылаться на глобальный элемент, то есть элемент, который объявлен в schema, и это предпочтительнее, чем как часть определения сложного типа. Последствие такого объявления состоит в том, что элемент с именем comment может появляться в документе примера и его содержание должно быть согласовано с типом элемента, в данном случае string.

 



===

часы frederique constant
часы eterna
часы maurice lacroix
часы nina ricci
часы hermle
часы certina
часы gucci

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