Элементы sequence, any, choice, all и group
Элемент sequence определяет, что дочерние элементы данного элемента должны появляться в заданной последовательности и имеет следующий формат:
<префикс:sequence
id = ID
maxOccurs = (nonNegativeInteger | unbounded) : 1
minOccurs = nonNegativeInteger : 1
>
(annotation?, (element | group | choice | sequence | any)*)
</префикс:sequence>
Необязательный атрибут id задает уникальный идентификатор элемента, а необязательные атрибуты maxOccurs и minOccurs задают максимальное и минимальное значение для количества включений данной последовательности в родительский элемент.
Пример использования элемента sequence:
<xs:element name="personinfo">
<xs:complexType>
<xs:sequence>
<xs:element name="firstname" type="xs:string"/>
<xs:element name="lastname" type="xs:string"/>
<xs:sequence minOccurs="0" maxOccurs="unbounded">
<xs:element name="child" type="xs:string"/>
</xs:sequence>
</xs:sequence>
</xs:complexType>
</xs:element>
В примере задан элемент с именем personinfo (данные о сотруднике). Этот элемент содержит дочерние элементы firstname и lastname, а также последовательность элементов child (ребенок) – эта последовательность может отсутствовать или содержать неограниченное количество элементов child.
Как видно, из объявления элемента sequence, в содержимом этого элемента может быть задан дочерний элемент any. Этот элемент позволяет расширить документ XML элементами, которые не определены в схеме, и имеет следующий формат:
<префикс:any
id = ID
maxOccurs = (nonNegativeInteger | unbounded) : 1
minOccurs = nonNegativeInteger : 1
namespace = ((##any | ##other) | List (anyURI |
(##targetNamespace | ##local))) : ##any
processContents = (strict | lax | skip) : strict
>
(annotation?)
</префикс:any>
Необязательный атрибут id задает уникальный идентификатор элемента, а необязательные атрибуты maxOccurs и minOccurs задают максимальное и минимальное значение для количества включений элемента any в родительский элемент. Необязательный атрибут namespace определяет пространства имен, содержащих элементы, которые могут быть использованы в родительском элементе, и может иметь одно из следующих значений:
· ##any – допустимы элементы из любого пространства имен;
· ##other – могут присутствовать элементы из любого пространства имен, отличного от пространства имен, заданного для родительского элемента;
· ##local – элементы должны задаваться не из пространства имен;
· ##target Namespace – могут присутствовать элементы из пространства имен, заданного для родительского элемента;
· List (anyURI | (##targetNamespace | ##local))) – могут присутствовать элементы из заданного списка.
Необязательный атрибут processContents определяет, как процессор XML должен организовать обработку элементов, определенных данным элементом any и может иметь одно из следующих значений:
· strict – процессор XML должен получить схему необходимых пространств имен и проверить действительность элементов;
· lax – аналогично strict, но если схема не может быть получена, сообщение об ошибке не генерируется;
· skip – процессор XML пропускает проверку действительности элементов.
Пример использования элемента any:
<xs:element name="person">
<xs:complexType>
<xs:sequence>
<xs:element name="firstname" type="xs:string"/>
<xs:element name="lastname" type="xs:string"/>
<xs:any minOccurs="0"/>
</xs:sequence>
</xs:complexType>
</xs:element>
С помощью использования элемента any можно расширить содержимое элемента person (после элемента lastname) любым другим элементом.
Элемент choice разрешает задавать в родительском элементе только один из присутствующих в списке элементов и имеет следующий формат:
<префикс:choice
id = ID
maxOccurs = (nonNegativeInteger | unbounded) : 1
minOccurs = nonNegativeInteger : 1
>
(annotation?, (element | group | choice | sequence | any)*)
</префикс:choice>
Необязательный атрибут id задает уникальный идентификатор элемента, а необязательные атрибуты maxOccurs и minOccurs задают максимальное и минимальное значение для количества включений выбранного элемента в родительский элемент.
Пример использования элемента choice:
<xs:element name="employee">
…
</xs:element>
<xs:element name="freelance">
…
</xs:element>
…
<xs:element name="person">
<xs:complexType>
<xs:choice>
<xs:element ref="employee"/>
<xs:element ref="freelance"/>
</xs:choice>
</xs:complexType>
</xs:element>
Элемент person должен содержать один из описанных ранее элементов: employee (постоянный сотрудник) или freelance (контрактник).
Элемент all определяет, что элементы, содержащийся в нем, могут появляться в родительском элементе в любом порядке, и каждый элемент может появляться 0 или 1 раз. Элемент имеет следующий формат:
<префикс:all
id = ID
maxOccurs = 1 : 1
minOccurs = (0 | 1) : 1
>
(annotation?, element*)
</префикс:all>
Необязательный атрибут id задает уникальный идентификатор элемента. Необязательный атрибут maxOccurs должен иметь значение 1, а необязательный атрибут minOccurs задает минимальное значение для количества включений выбранного элемента в родительский элемент (0 или 1).
Пример использования элемента all:
<xs:element name="person">
<xs:complexType>
<xs:all minOccurs="0">
<xs:element name="firstname" type="xs:string"/>
<xs:element name="lastname" type="xs:string"/>
</xs:all>
</xs:complexType>
</xs:element>
Элементы firstname и lastname могут появляться в элементе в элементе person в любом порядке и один или оба элемента могут отсутствовать.
Элемент group используется для задания группы элементов в определении комплексного типа и имеет следующий формат:
<префикс:group
id = ID
name = NCName
ref = QName
maxOccurs = nonNegativeInteger | unbounded : 1
minOccurs = nonNegativeInteger : 1
>
(annotation?, (all | choice | sequence))
</префикс:group>
Атрибут name задает имя элемента. Он является обязательным только в том случае, если родительским элементом данного элемента является элемент schema или элемент redefine. Атрибут ref задает ссылку на имя другой группы (атрибуты name и ref являются взаимоисключающими). Необязательные атрибуты maxOccurs и minOccurs задают максимальное и минимальное значение для количества включений элементов группы в родительский элемент.
Пример использования элемента group:
<xs:group name="custGroup">
<xs:sequence>
<xs:element name="customer" type="xs:string"/>
<xs:element name="orderDetails" type="xs:string"/>
</xs:sequence>
</xs:group>
…
<xs:element name="order" type="orderType"/>
<xs:complexType name="orderType">
<xs:group ref="custGroup"/>
<xs:attribute name="status" type="xs:string"/>
</xs:complexType>
В этом примере определена группа custGroup, состоящая из двух элементов: customer (покупатель) и orderDetails (детали заказа), а затем эта группа использована (с помощью ссылки) в определении комплексного типа orderType.
Дата добавления: 2015-03-20; просмотров: 1172;