Лекция №
Тема: Введение в 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 должны быть определены в схеме следующим образом:
|
Заметим, что в 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:restriction base="xs:string">
< xs:patternvalue="[a-z][0-9]" />
</xs:restriction>
</xs:simpleType>
Определение элементов со сложными моделями содержания
Спецификация XML Schema предлагает 44 простых типа данных, которые применяются для построения моделей содержания (простота подразумевает неструктирированность данных). Встроенные типы данных xml-схем можно использовать как базовые для создания специализированных типов, необходимых в конкретных документах. Как и в случае DTD, модель содержания описывает не только элементы, которые могут быть вложены в данный, но и может определять порядок их поялвения в документе, а также возможное количество повторений элемента. Элементы со сложными моделями определяются как сложные типы (complexType).
Справочная информация