XML-Схемы

Для устранения недостатков DTD компанией Microsoft был разработан новый стандарт XML-схем, который был впоследствии предложен на рассмотрение консорциумом W3C и 2 мая 2001 года был принят им в качестве официальной рекомендации.

XML-схемы – это основанная на XML технология, которая позволяет:

1. Определять элементы, которые могут появиться в документе.

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

3. Тип данных элементов и атрибутов.

 

Так как XML-схемы сами основаны на XML, то они приобретают от него дополнительные возможности:

1. Поддержка пространства имен.

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

3. Возможность преобразования схем посредством XSLT.

 

Рассмотрим пример составления XML-схемы для заказа в интернет магазине, который приведен ранее:

<?xml version="1.0" encoding="utf-8"?>

<xs:schema

attributeFormDefault="unqualified"

elementFormDefault="qualified"

xmlns:xs="http://www.w3.org/2001/XMLSchema"

xmlns:o="http://www.mephi.ru/order"

targetNamespace="http://www.mephi.ru/order">

<xs:element name="order">

<xs:complexType>

<xs:sequence>

<xs:element name="address" type="o:AddressType" />

<xs:element name="date" type="xs:date" />

<xs:element name="time" type="xs:time" />

<xs:element name="items">

<xs:complexType>

<xs:sequence>

<xs:element minOccurs="1" maxOccurs="unbounded" name="item">

<xs:complexType>

<xs:sequence>

<xs:element name="id" type="xs:integer" />

<xs:element name="name" type="xs:string" />

<xs:element name="quantity" type="o:QuantityType" />

</xs:sequence>

</xs:complexType>

</xs:element>

</xs:sequence>

</xs:complexType>

</xs:element>

</xs:sequence>

<xs:attribute name="customerId" type="xs:integer" use="required" />

</xs:complexType>

</xs:element>

<xs:complexType name="AddressType">

<xs:sequence>

<xs:element name="city" type="xs:string" />

<xs:element name="street" type="xs:string" />

<xs:element name="house" type="xs:unsignedByte" />

</xs:sequence>

</xs:complexType>

<xs:simpleType name="QuantityType">

<xs:restriction base="xs:integer">

<xs:minInclusive value="1"/>

</xs:restriction>

</xs:simpleType>

</xs:schema>

 

Для добавления ссылки на файл схемы из XML-файла можно использовать следующую конструкцию:

<?xml version="1.0" encoding="utf-8" ?>

<order xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:noNamespaceSchemaLocation="order.xsd"

xmlns="http://www.mephi.ru/order">

...

</order>

 

На первый взгляд, XML-схемы довольно сложны для понимания. Это связано с тем, что они содержат больше информации о документе, чем определения DTD, и с довольно обширными возможностями по составлению самих схем.

В XML-схемах могут быть объявлены простые элементы:

<xs:element name="название элемента" type="тип данных" />

 

Сложные элементы:

<xs:element name="название элемента">

<xs:complexType>

...

содержимое элемента

...

</xs:complexType>

</xs:element>

 

Или ссылки на другие элементы:

<xs:element ref="название элемнта на который ссылается" />

 

Количество вхождений элементов задается с помощью атрибутов «minOccurs» и «maxOccurs». Значением по умолчанию для этих атрибутов является единица, т.е. каждый элемент по умолчанию появляется ровно один раз. В приведенном примере количество заказанной продукции определяется большим либо равным одной позиции:

<xs:element minOccurs="1" maxOccurs="unbounded" name="item">

...

</xs:element>

 

Возможности для описания атрибутов элементов практически идентичные, за исключением того, что атрибут не может являться сложным типом, т.е. содержащим дочерние элементы. Количество вхождений атрибутов может быть задано с помощью атрибута «use», который принимает значения «optional» (необязательно вхождение), «required» (обязательное вхождение) и «prohibited» (запрещенный атрибут). Для атрибутов с необязательным вхождением может быть задано значение по умолчанию, которое этот атрибут примет в случае его отсутствия в документе:

<xs:attribute name="status" type="o:StatusType" use="optional" default="поступил"/>

 

Одной из важных особенностей XML-схем является определение типов данных. Для XML-схем изначально задан набор типов данных, которые принадлежат пространству имен XML. Вот список наиболее употребительных из них:

· xs:string

· xs:decimal

· xs:integer

· xs:boolean

· xs:date

· xs:time

 

Кроме того, при составлении XML-схем имеется возможность определения собственных типов данных, которые могут быть как простыми, так и сложными. Новые пользовательские типы данных создаются путем наложения дополнительных ограничений на существующие типы данных. Этим же путем определены и базовые типы данных XML-схем. Таким образом, все типы данных порождаются от одного базового типа, путем введения дополнительных ограничений. Например, пользовательский тип данных «количество товара» определяется как число типа integer, со значением больше либо равным единице:

<xs:simpleType name="QuantityType">

<xs:restriction base="xs:integer">

<xs:minInclusive value="1"/>

</xs:restriction>

</xs:simpleType>

 

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

<xs:complexType name="AddressType">

<xs:sequence>

<xs:element name="city" type="xs:string" />

<xs:element name="street" type="xs:string" />

<xs:element name="house" type="xs:unsignedByte" />

</xs:sequence>

</xs:complexType>

 

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

<xs:simpleType name="StatusType">

<xs:restriction base="xs:string">

<xs:enumeration value="поступил" />

<xs:enumeration value="обрабатывается" />

<xs:enumeration value="оплачен" />

</xs:restriction>

</xs:simpleType>

 

Таким образом, XML-схемы являются мощным и общепризнанным средством для задания схем проверки правильности XML-документов. Дополнительную информацию по XML-схемам можно найти на сайте консорциума W3C по адресу http://www.w3.org/XML/Schema.








Дата добавления: 2015-02-28; просмотров: 1653;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.014 сек.