В XML Schema основное различие между элементами сложных
и простых типов заключается в том, что элементы сложного типа могут включать в
себя другие элементы и иметь атрибуты, а элементы простого типа не могут. Также
важное различие между определениями, которые создают новые типы (как простые,
так и сложные) и объявлениями, которые доступны элементам и атрибутам со специфическими
именами и типами (как простые, так и сложные) для представления в примерах
документов. В данном разделе мы
сфокусируем внимание на определении сложных типов и объявлении элементов и
атрибутов, представленных в них.
Новые сложные типы
определены, посредством использования элемента complexType,
и обычно такие определения содержат
набор объявлений элементов, ссылок элементов и объявлений атрибутов. Объявления
не самостоятельные типы, а скорее ассоциация между именем и ограничениями, которые
управляют представлением этого имени в документах, регулируемых связанной схемой.
Элементы объявляются посредством использования элемента element
, а атрибуты элемента attribute
. Например, 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
для определения типа, независимо от
того, является тип простым или сложным.
<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