Мы можем контролировать то, как элементы должны использоваться в документах с индикаторами.
индикаторы
Есть семь показателей:
Показатели заказа:
- All
- Choice
- Sequence
Показатели Встречаемость:
- maxOccurs
- minOccurs
Группа показатели:
- Group name
- attributeGroup name
Индикаторы Заказать
Индикаторы заказа используются для определения порядка элементов.
Все Индикатор
<all> индикатор указывает , что дочерние элементы могут появляться в любом порядке, и что каждый дочерний элемент должен иметь место только один раз:
<xs:element name="person">
<xs:complexType>
<xs:all>
<xs:element name="firstname" type="xs:string"/>
<xs:element name="lastname" type="xs:string"/>
</xs:all>
</xs:complexType>
</xs:element>
Note: При использовании <all> индикатор вы можете установить <minOccurs> индикатор 0 или 1 , а <maxOccurs> индикатор может быть установлен только в 1 ( <minOccurs> и <maxOccurs> описаны ниже).
Выбор индикатора
<choice> индикатор указывает , что может происходить либо один дочерний элемент или другой:
<xs:element name="person">
<xs:complexType>
<xs:choice>
<xs:element name="employee" type="employee"/>
<xs:element name="member" type="member"/>
</xs:choice>
</xs:complexType>
</xs:element>
Индикатор чередования фаз
<sequence> индикатор указывает , что дочерние элементы должны появляться в определенном порядке:
<xs:element name="person">
<xs:complexType>
<xs:sequence>
<xs:element name="firstname" type="xs:string"/>
<xs:element name="lastname" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
Показатели Встречаемость
Показатели Встречаемость используются для определения, как часто может произойти элемент.
Note: Для всех "Order" и "Group" показателей (любой, все, выбор, последовательность, название группы, и группа справки) значение по умолчанию для MaxOccurs и MinOccurs 1.
MaxOccurs Индикатор
<maxOccurs> индикатор определяет максимальное количество раз может возникнуть элемент:
<xs:element name="person">
<xs:complexType>
<xs:sequence>
<xs:element name="full_name" type="xs:string"/>
<xs:element name="child_name" type="xs:string" maxOccurs="10"/>
</xs:sequence>
</xs:complexType>
</xs:element>
Приведенный выше пример показывает , что "child_name" элемент может происходить как минимум один раз (значение по умолчанию для MinOccurs 1) и не более десяти раз в "person" элемента.
MinOccurs Индикатор
<minOccurs> индикатор определяет минимальное число раз может произойти элемент:
<xs:element name="person">
<xs:complexType>
<xs:sequence>
<xs:element name="full_name" type="xs:string"/>
<xs:element name="child_name" type="xs:string"
maxOccurs="10" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
</xs:element>
Приведенный выше пример показывает , что "child_name" элемент может происходить как минимум ноль раз и не более десяти раз в "person" элемента.
Tip: Чтобы разрешить элемент появляться неограниченное число раз, используйте MaxOccurs = "неограниченную" заявление:
A working example:
XML файл , который называется "Myfamily.xml" :
<?xml version="1.0" encoding="UTF-8"?>
<persons xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="family.xsd">
<person>
<full_name>Hege Refsnes</full_name>
<child_name>Cecilie</child_name>
</person>
<person>
<full_name>Tove Refsnes</full_name>
<child_name>Hege</child_name>
<child_name>Stale</child_name>
<child_name>Jim</child_name>
<child_name>Borge</child_name>
</person>
<person>
<full_name>Stale Refsnes</full_name>
</person>
</persons>
Файл XML выше содержит корневой элемент с именем "persons" . Внутри этого корневого элемента мы определили три "person" элементы. Каждый "person" элемент должен содержать "full_name" элемент и может содержать до пяти "child_name" элементов.
Вот файл схемы "family.xsd" :
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
elementFormDefault="qualified">
<xs:element name="persons">
<xs:complexType>
<xs:sequence>
<xs:element name="person" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name="full_name" type="xs:string"/>
<xs:element name="child_name" type="xs:string"
minOccurs="0" maxOccurs="5"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
Группа Показатели
Показатели группы используются для определения связанных наборов элементов.
Элемент группы
групп элементов определяются с декларацией группы, как это:
<xs:group name="groupname">
...
</xs:group>
Вы должны определить все, выбор, или последовательность элементов внутри декларации группы. Следующий пример определяет группу под названием "persongroup" , который определяет группу элементов , которые должны произойти в точной последовательности:
<xs:group name="persongroup">
<xs:sequence>
<xs:element name="firstname" type="xs:string"/>
<xs:element name="lastname" type="xs:string"/>
<xs:element name="birthday" type="xs:date"/>
</xs:sequence>
</xs:group>
После того, как вы определили группу, вы можете ссылаться на нее в другом определении, как это:
<xs:group name="persongroup">
<xs:sequence>
<xs:element name="firstname" type="xs:string"/>
<xs:element name="lastname" type="xs:string"/>
<xs:element name="birthday" type="xs:date"/>
</xs:sequence>
</xs:group>
<xs:element name="person" type="personinfo"/>
<xs:complexType name="personinfo">
<xs:sequence>
<xs:group ref="persongroup"/>
<xs:element name="country" type="xs:string"/>
</xs:sequence>
</xs:complexType>
Группы атрибутов
Атрибут группы определяются с декларацией attributeGroup, как это:
<xs:attributeGroup name="groupname">
...
</xs:attributeGroup>
Следующий пример определяет атрибут группу под названием "personattrgroup" :
<xs:attributeGroup name="personattrgroup">
<xs:attribute name="firstname" type="xs:string"/>
<xs:attribute name="lastname" type="xs:string"/>
<xs:attribute name="birthday" type="xs:date"/>
</xs:attributeGroup>
После того как вы определили группы атрибутов, вы можете ссылаться на нее в другом определении, как это:
<xs:attributeGroup name="personattrgroup">
<xs:attribute name="firstname" type="xs:string"/>
<xs:attribute name="lastname" type="xs:string"/>
<xs:attribute name="birthday" type="xs:date"/>
</xs:attributeGroup>
<xs:element name="person">
<xs:complexType>
<xs:attributeGroup ref="personattrgroup"/>
</xs:complexType>
</xs:element>