Опубликован: 19.07.2010 | Доступ: свободный | Студентов: 1674 / 151 | Оценка: 4.07 / 3.43 | Длительность: 20:59:00
Лекция 7:

Введение в XML. Структура XML документа

< Лекция 6 || Лекция 7: 1234 || Лекция 8 >

Ограничения на содержимое

Для задания допустимых значений величин XML элементов и атрибутов можно использовать ограничения. Ограничения на значения XML элементов называются фасетами.

Список возможных ограничений приводится ниже:

Ограничение Описание
enumeration Определяет список допустимых значений
fractionDigits Указывет максимальное число десятичных позиций. Должно быть неотрицательным
length Указывает точное число символов или элементов в списке. Должно быть неотрицательным
maxExclusive Указывает верхнюю границу числовых значений
maxInclusive Указывает верхнюю границу числовых значений
maxLength Указывает максимальное число символов или элементов в списке. Должно быть неотрицательным
minExclusive Указывает нижнюю невключаемую границу числовых значений
minInclusive Указывает нижнюю включаемую границу числовых значений
minLength Указывает минимальное число символов или элементов в списке. Должно быть неотрицательным
pattern Определяет точно последовательность символов (шаблон), которая допустима
totalDigits Определяет точное число цифр. Должно быть неотрицательным
whiteSpace Указывает как обрабатывать неотображаемые символы (пробел, табуляция и др.)

Примеры ограничения:

<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>

Другой подход заключается в повторном использовании именованных элементов.

  1. Элемент "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>, то они должны в документе появляться именно в этой последовательности.

  2. Элемент "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 документа, как только будет обнаружена ошибка в этом документе.

< Лекция 6 || Лекция 7: 1234 || Лекция 8 >