Атрибуты элементов

Определение простых элементов

Место XML-схем

Тема: Введение в xml-схемы

XML-схемы (xml schemas) — это альтернативный DTD способ формального описания языков xml-разметки. В файлах XML Schema определяются:

· элементы, которые могут появляться в документе,

· атрибуты, которые могут быть у объявленных элементов,

· является ли элемент пустым, или он может включать текст и элементы,

· для непустых элементов, какие элементы могут быть дв него вложены, а также порядок и число дочерних элементов,

· типы данных для элементов и их атрибутов,

· значения по умолчанию и фиксированные значения элементов и атрибутов.

В сравнении с DTD, xml-схемы обладают следующими преимуществами:

· правила языка разметки описываются средствами xml, а не спомощью специального языка, как DTD,

· описания конструкций и свойств элементов языков разметки более понятны,

· схемы имеют более богатый набор базовых типов данных, а также позволяют разрабочику определять новые сложные структуры данных,

· схемы обладают большой гибкостью и способностью к расширению и модификации.

Схемы не заменяют DTD полностью, например, описание самих языков схем выполняется с помощью DTD.

Языки XML-схем носят название XML Schema Definition (XSD).

Определение простого элемента включает задание имени элемента и типа данных:

<xs:element name="xxx" type="yyy"/>

Используются следующие встроенные типы данных:

xs:string, xs:decimal, xs:integer, xs:boolean, xs:date, xs:time.

Например, информация о некотором человеке (фамилия — строка символов , возраст — число, дата рожения — дата) представлена разметкой:

<lastname>Иванов</lastname><age>20</age><born>01-01-1990</born>

Элементы lastname, age и born должны быть определены в схеме следующим образом:

<xs:element name="lastname" type="xs:string"/><xs:element name="age" type="xs:integer"/><xs:element name="born" type="xs:date"/>

Заметим, что в DTD имеется только один тип данных — строки, и нет возможности указывать точные типы данных, как в данном случае.

Описание атрибута выполняется задается следующим образом:

<xs:attribute name="xxx" type="yyy"/>

где xxx – имя атрибута, а yyy — тип данных атрибута.

Используются следующие встроенные типы данных:

xs:string, xs:decimal, xs:integer, xs:boolean, xs:date, xs:time.

Например, XML элемент с атрибутом:

<lastname lang="RU">Иванов</lastname>

описывается соответствующей схемой:

<xs:attribute name="lang" type="xs:string"/>

Значение атрибута по умолчанию или фиксированное значение описываются следующим образом:

<xs:attribute name="lang" type="xs:string" default="RU"/><xs:attribute name="lang" type="xs:string" fixed="RU"/>

По умолчанию все атрибуты являются необязательными. Для описания обязательных атрибутов используется следующая конструкция:

<xs:attribute name="lang" type="xs:string" use="required"/>

Задание ограничений

Преимущества XML-схем проявляются, когда нужно определить ограничения на допустимые типы данных, используемые как значения атрибутов или в роли содержания элементов. Это самое слабое место DTD.

Благодаря типизации обеспечивается более надежная передача данных. Например, когда данные пересылаются от отправителя получателю существенно, чтобы оба участника обмена имели о содержании одинаковое представление. С помощью XML-схем отправитель может описать данные таким образом, чтобы получатель смог их правильно понять. Даты типа "02-12-2010" в одних странах интерпретируются как 2 декабря, а в других — как 12 февраля. Без типизации интерпретация таких записей дат затруднена.

Но, если определить XML-элемент c указанием типа данных,

<date type="date">2004-03-11</date>

то это гарантирует правильную интерпретацию, потому что тип date строго требует использовать формат YYYY-MM-DD.

В xml-схемах имеется возможность не только более точно указывать типы данных (более строгая типизация), но и ограничивать "диапазон" значений XML-элементов или атрибутов. В примере определен элемент age с ограничением на числовые значения —значение не может быть меньше нуля или больше 100.

<xs:element name="age"><xs:simpleType>
<xs:restrictionbase="xs:integer">
<xs:minInclusive value="0"/>
<xs:maxInclusive value="100"/>
</xs:restriction>
</xs:simpleType></xs:element>

Если значения текстовые, то можно ограничить набор принимаемых значений перечислением.

Определение новых типов данных

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

Вместо этого можно определить свой тип данных, и использовать его для определения любого числа элементов.

а) Определение простого типа

<xs:simpleTypename="carType">
<xs:restriction base="xs:string">
<xs:enumeration value="Audi"/>
<xs:enumeration value="Lada"/>
<xs:enumeration value="BMW"/>
</xs:restriction>
</xs:simpleType>

Элемент car теперь определяется через введеный тип carType:

<xs:element name="car" type="carType"/>

Ограничения на текстовые значения могут задаваться с помощью регулярных выражений. Например, тип значений, состоящих из одной строчной латинской буквы и цифры, определяется следующим образом:

<xs:simpleType name="vars">
<xs:restriction base="xs:string">
<xs:patternvalue="[a-z][0-9]"/>
</xs:restriction>
</xs:simpleType>

Определение элементов со сложными моделями содержания

Спецификация XML Schema предлагает 44 простых типа данных, которые применяются для построения моделей содержания (простота подразумевает неструктирированность данных). Встроенные типы данных xml-схем можно использовать как базовые для создания специализированных типов, необходимых в конкретных документах. Как и в случае DTD, модель содержания описывает не только элементы, которые могут быть вложены в данный, но и может определять порядок их поялвения в документе, а также возможное количество повторений элемента. Элементы со сложными моделями определяются как сложные типы (complexType).