Введение в 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>
Сложный элемент в схеме можно определить следующим образом:
<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>
Валидаторы XML
Для проверки действительности XML документа можно использовать специальные валидаторы, например W3C валидатор (http://validator.w3.org/).
Для проверки схем также существуют специальные валидаторы, например XML Schema валидатор (http://www.w3.org/2001/03/webdata/xsv).
Следует отметить, что согласно спецификации W3C любая программа должна прекратить обработку XML документа, как только будет обнаружена ошибка в этом документе.