Структура XML документа. XML схемы
Ограничения на содержимое
Для задания допустимых значений величин XML элементов и атрибутов можно использовать ограничения. Ограничения на значения XML элементов называются фасетами.
Список возможных ограничений приводится ниже:
Примеры ограничения:
<xs:element name="age"> <xs:simpleType> <xs:restriction base="xs:integer"> <xs:minInclusive value="0"/> <xs:maxInclusive value="120"/> </xs:restriction> </xs:simpleType> </xs:element> <xs:element name="password"> <xs:simpleType> <xs:restriction base="xs:string"> <xs:pattern value="[a-zA-Z0-9]{8}"/> </xs:restriction> </xs:simpleType> </xs:element>
Описание сложных элементов
При описании документов, имеющих сложную иерархическую структуру, можно сначала определить все элементы и атрибуты, а затем ссылаться на них.
Рассмотрим следующий пример:
<employee> <firstname>John</firstname> <lastname>Smith</lastname> </employee>
Сложный элемент в схеме можно определить следующим образом:
<example><xs:element name="firstname" type="xs:string"/> <xs:element name="lastname" type="xs:string"/> <xs:element name="employee"> <xs:complexType> <xs:sequence> <xs:element ref="firstname"/> <xs:element ref="lastname"/> </xs:sequence> </xs:complexType> </xs:element>
Другой подход заключается в повторном использовании именованных элементов.
- Элемент " employee " element может быть объявлен непосредственно по имени:
<xs:element name="employee"> <xs:complexType> <xs:sequence> <xs:element name="firstname" type="xs:string"/> <xs:element name="lastname" type="xs:string"/> </xs:sequence> </xs:complexType> </xs:element>
Поскольку дочерние элементы " firstname " и " lastname " окружены индикатором <sequence>, то они должны в документе появляться именно в этой последовательности.
- Элемент " employee " может иметь атрибут типа, ссылающийся на имя сложного типа:
<xs:element name="employee" type="personinfo"/> <xs:complexType name="personinfo"> <xs:sequence> <xs:element name="firstname" type="xs:string"/> <xs:element name="lastname" type="xs:string"/> </xs:sequence> </xs:complexType>
Несколько элементов могут ссылаться на тот же самый сложный тип:
<xs:element name="employee" type="personinfo"/> <xs:element name="student" type="personinfo"/> <xs:element name="member" type="personinfo"/> <xs:complexType name="personinfo"> <xs:sequence> <xs:element name="firstname" type="xs:string"/> <xs:element name="lastname" type="xs:string"/> </xs:sequence> </xs:complexType>
Также можно строить сложный элемент на базе существующего сложного элемента с добавлением нескольких элементов:
<xs:element name="employee" type="fullpersoninfo"/> <xs:complexType name="personinfo"> <xs:sequence> <xs:element name="firstname" type="xs:string"/> <xs:element name="lastname" type="xs:string"/> </xs:sequence> </xs:complexType> <xs:complexType name="fullpersoninfo"> <xs:complexContent> <xs:extension base="personinfo"> <xs:sequence> <xs:element name="address" type="xs:string"/> <xs:element name="city" type="xs:string"/> <xs:element name="country" type="xs:string"/> </xs:sequence> </xs:extension> </xs:complexContent> </xs:complexType>
Пустой сложный элемент не может иметь содержимого, только атрибуты.
С помощью специальных индикаторов можно указывать, как элементы могут использоваться в документах.
Всего используется семь индикаторов:
- Индикатор порядка ( Order ):
- All
- Choice
- Sequence
- Индикатор вхождения ( Occurrence ):
- maxOccurs
- minOccurs
- Групповые ( Group ) индикаторы:
- Group name
- attributeGroup name
Пример:
<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>