Спонсор: Microsoft
Воронежский государственный университет
Опубликован: 04.02.2009 | Доступ: свободный | Студентов: 8216 / 665 | Оценка: 4.14 / 3.78 | Длительность: 19:54:00
Самостоятельная работа 11:

Структура XML документа. XML схемы

< Лекция 10 || Самостоятельная работа 11: 12345 || Лекция 11 >

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

Для задания допустимых значений величин 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>

Сложный элемент в схеме можно определить следующим образом:

<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>
< Лекция 10 || Самостоятельная работа 11: 12345 || Лекция 11 >
Михаил Олифиренко
Михаил Олифиренко
Александр Табачук
Александр Табачук

Это только у меня не работает кнопочка "Получить код DreamSpark"? Пишет "временно не доступно..." А когда заработает?