XML-ТЕХНОЛОГИИ Лекция 2 Схемы XML-документа

реклама
XML-ТЕХНОЛОГИИ
Лекция 2
Схемы XML-документа
Ограничения на структуру
документа

XML предоставляет слишком большую
свободу в организации корректного
документа

Такая свобода может стать источником
ошибок и путаницы

Решение — задать структурные и
семантические ограничения
Примеры ограничений
на структуру документа

Структурное ограничение:
элемент с именем А может содержать
только элементы с именем В

Семантическое ограничение:
атрибут a, содержащийся в элементе A,
должен обладать уникальным
значением среди множества значений
атрибутов a
Схемы XML-документов

Схема XML-документа — модель,
отделенная от самого документа, в
которой заданы его структурные и
параметрические ограничения

Схема — модель типов

Наиболее популярными языками
являются DTD, XML Schema (XSD),
RelaxNG, XDR
Валидные XML-документы

Валидный XML-документ по отношению
к некоторой схеме — корректный XMLдокумент, удовлетворяющий всем
ограничениям, определенным в схеме
DTD. Аббревиатура и назначение

DTD — Document Type Definition

DTD — это язык описания, который
позволяет определить, какие элементы
должны быть в XML-документе, сколько
раз они должны повторяться, какие
атрибуты должны быть у этих
элементов, какие атрибуты
обязательные и какие не обязательные,
а также какие сущности могут
использоваться в документе
DTD. Преимущества

DTD является де-факто стандартом
спецификации схем (по крайней мере,
пока стандарт XML Schema не будет
окончательно утвержден)

схемы DTD можно однозначно
отобразить на другие XML-схемы
DTD. Объявление типа документа

<!DOCTYPE корневой_элемент
URI_внешнего_подмножества
[внутреннее_подмножество]>:
<!DOCTYPE root "schemas/test.dtd">
или
 <!DOCTYPE root [
<!ELEMENT root (elem1)+>
]>
или
 <!DOCTYPE root "schemas/test.dtd" [
<!ELEMENT root (elem1)+>
]>

DTD. Объявление элементов
<!ELEMENT название элемента (что может
содержать)>
Специальные знаки:
 «+» — один или несколько экземпляров
объекта в скобках
 «*» — ноль, один или несколько экземпляров
объекта
 «?» — допустимы ноль или один экземпляр
объекта

DTD. Объявление элементов

«EMPTY» — элемент должен быть пустым

«ALL» — элемент может содержать любые
вложенные элементы и текстовые узлы

«#PCDATA» — элемент может содержать
только текст, но не вложенные элементы
DTD. Примеры объявления
элементов

<!ELEMENT снабжение (поставщик)+>

<!ELEMENT поставщик (поставка)*>

<!ELEMENT поставка (товар)>

<!ELEMENT товар EMPTY>
DTD. Объявление атрибутов

<!ATTLIST родительский_элемент
имя тип режим_использования>

Типы атрибутов: ID, CDATA, IDREF и т.д.

Режимы: #IMPLIED, #REQUIRED, «значение
по умолчанию»
DTD. Пример объявления
атрибутов

<!ATTLIST снабжение
номер CDATA #REQUIRED >

<!ATTLIST поставщик
код
ID
#REQUIRED
имя CDATA #REQUIRED
статус CDATA "10"
город CDATA #REQUIRED >

<!ATTLIST товар
код
ID
#REQUIRED
назв CDATA #REQUIRED
цвет (синий | красный | белый | иной) #IMPLIED
город CDATA # IMPLIED >
DTD. Недостатки

Отличный от XML синтаксис языка

Нет проверки типов данных. В DTD есть
только один тип – строка

В DTD нет пространств имен. Нельзя
поставить в соответствие документу два и
более DTD описаний
XSD. Главные XML-схемы

XSD — альтернативный способ создания правил
построения XML-документов

По сравнению с DTD схемы обладают более
мощными средствами для определения сложных
структур данных, обеспечивают более понятный
способ описания грамматики языка, способны
легко модернизироваться и расширяться.

XSD позволяют описывать правила для XMLдокумента средствами самого же XML
XSD. Стандарты

XML DTD for XML-Data-Schema

Версия 1.0 была одобрена в качестве
рекомендации консорциума W3C 2 мая 2001 года

28 октября 2004 года была опубликована вторая
редакция версии 1.0, исправляющая ряд ошибок
XSD. Корневой элемент

schema — корневой элемент любой XSD-схемы

в XSD всегда пространство имен задается URL
http://www.w3c.org/2001/XMLSchema

в XSD для обозначения пространства имен
принято использовать префикс xsd

<xsd:schema
xmlns:xsd=http://www.w3c.org/2001/XMLSchema>
XSD. Сложные и простые типы

Элемент простого типа не может содержать другие
элементы или атрибуты

Элемент простого типа задается конструкцией
simpleType

Комплексный тип может создавать эффект
встраивания элементов в другие элементы или
может ассоциировать атрибуты с элементом

Элемент сложного типа задается конструкцией
complexType
XSD. Определение простых типов

Некоторые из простых типов, например string и
decimal встроены в язык XML-схемы, в то время
как другие определены специально для
конкретных документов

Для определения имени и типа собственного
простого типа используют оператор simpleType.

С помощью оператора restriction указывают
прототип и идентифицируют фасеты
XSD. Примеры простых типов
XSD. Ограничение вхождений

minOccures — минимальное число экземпляров
элемента (например, 0 )

maxOccures — максимальное число экземпляров
элемента (например, 1 или unbounded)

Пример:
<xsd:element name="test" minOccurs="0"
maxOccurs="unbounded">…</xsd:element>
XSD. Ограничение вхождений

minOccures — минимальное число экземпляров
элемента (например, 0 )

maxOccures — максимальное число экземпляров
элемента (например, 1 или unbounded)

Пример:
<xsd:element name="test" minOccurs="0"
maxOccurs="unbounded">…</xsd:element>
XSD. Определение элементов

В определении элемента указываются: имя
элемента, его тип, количество вхождений и
структура

Совокупность дочерних элементов обозначается
как sequence (характерно только для элементов
сложного типа)

Совокупность атрибутов элемента задается
непосредственно в элементе complexType
XSD. Пример определения
элементов
<xsd:element name="Снабжение">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="Поставщик">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="Поставка">
…
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
XSD. Определение атрибутов

В определении атрибута указываются: имя
атрибута, тип данных и режим использования

Совокупность атрибутов элемента задается
непосредственно в элементе complexType
XSD. Пример определения
атрибутов
<xsd:element name="Снабжение">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="Поставщик">
<xsd:complexType>
<xsd:attribute name="ID" type="xsd:string“ use="required"/>
<xsd:attribute name=“name" type="xsd:string“ use="required"/>
<xsd:attribute name=“status" type="xsd:positiveInteger" />
</xsd:complexType>
</xsd:element>
</xsd:sequence>
<xsd:attribute name="ID" type="xsd:string“ use="required"/>
</xsd:complexType>
</xsd:element>
RelaxNG. Почему XSD
недостаточно?

XSD решает все проблемы DTD: он
является XML приложением, и позволят
описывать все мыслимые виды ограничений на
структуру документа

XSD характеризуется излишней сложностью

На основе языков TREX и RELAX был
разработан язык схем, названный RELAX NG

RELAX NG (REgular LAnguage for XML Next
Generation)
RelaxNG. Корневой элемент

Корневой элемент — grammar

Описание конструкций Relax NG — start

Пространство имен в Relax NG относится к
URL http://relaxng.org/ns/structure/1.0
<?xml version="1.0"?>
<grammar
xmlns="http://relaxng.org/ns/structure/1.0">
<start> </start> </grammar>
RelaxNG. Элементы
<?xml version="1.0"?>
<grammar xmlns="http://relaxng.org/ns/structure/1.0">
<start>
<element name="Снабжение">
<element name="Поставщик">
<element name="Поставка">
<element name="Товар">
</element>
</element>
</element>
</element>
</start>
</grammar>
RelaxNG. Атрибуты
<?xml version="1.0"?>
<grammar xmlns="http://relaxng.org/ns/structure/1.0">
<start>
<element name="Снабжение">
<attribute name="ID"> <text /> </attribute>
<element name="Поставщик">
<attribute name="ID"> <text /> </attribute>
<attribute name="name"> <text /> </attribute>
<attribute name="status"> <text /> </attribute>
<element name="Поставка">
<element name="Товар">
</element>
</element>
</element>
</element>
</start>
</grammar>
RelaxNG. Смешанное содержимое
<element name="subject">
<mixed>
<element name="b">
<text />
</element>
<element name="i">
<text />
</element>
</mixed>
</element>
Элемент test может содержать как текст, так и один
элемент b или один элемент i.
RelaxNG. Опциональные элементы
<element name="subject">
<mixed>
<optional>
<element name="b">
<text />
</element>
</optional>
<optional>
<element name="i">
<text />
</element>
</optional>
</mixed>
</element>
Элемент test может содержать как текст, так и один элемент b или один элемент i.
RelaxNG. Альтернатива
<element name="location">
<choice>
<element name="description"><text/></element>
<element name="place"><text/></element>
</choice>
</element>
Элемент location может содержать или один
элемент description, или один элемент place.
…
RelaxNG. Множественные
вхождения
<element name="Снабжение">
<oneOrMore>
<element name="Поставщик">
<zeroOrMore>
<element name="Поставка">
<oneOrMore>
<element name="Товар">
</element>
</oneOrMore>
</element>
</zeroOrMore>
</element>
</oneOrMore>
</element>
…
Скачать