Разработка XML - схемы

Для описания структуры документа кроме DTD можно использовать схему XML, которая имеет определенные преимущества в сравнении с DTD. Схема – это внешний файл, который содержит описание элементов и атрибутов XML – документа. Схемы используют синтаксис языка XML для определения элементов документа, их подчинение, типов данных элементов, при чем схемы поддерживают значительно большее количество типов данных чем DTD. Схемы, в отличие от DTD, также поддерживают пространства имен. Таким образом, после проверки на соответствие XML - документа схеме обрабатывающая программа может создать модель данных документа, которая включает:

§ словарь – названия элементов и атрибутов;

§ модель содержимого документа – структура документа, которая отображает отношение между элементами и атрибутами:

§ типы данных.

На настоящее время существуют два основных типа схем: XML – Data Reduced - стандарт, который используется фирмой Microsoft, и XML – Schema – стандарт W3C. Схемы стандарта XML – Data Reduced достаточно распространены, однако, на практике чаще работают со схемами стандарта корпорации W3C XML – Schema, поэтому данный инструмент работы по XML – документам будет рассматриваться на примере стандарта XML – Schema.

Создание схемы выполняется с помощью языка XML – схемы, которая по обыкновению называется языком определения XML – схемы XSD (XML Schema definition). Стандарт имеет статус рекомендации W3C с 2 мая 2001 года. Сейчас консорциумом разрабатывается новая версия 1.1 XML – Schema Definition Language (XSD).

XML – схема начинается с объявления XML – документа, дальше следует тег xsd:schema, который является тегом наивысшего уровня, который содержит в себе все элементы XML – схемы. Данный тег включает атрибуты, которые определяют пространства имен для схемы. По обыкновению тег schema включает атрибут

xmlns:xsd="http://www.w3.org/2001/Xmlschema"

Этот атрибут указывает на то, что элементы и типы данной схемы определяются в пространстве имен 2001 Xmlschema, которое можно найти по адресу http://www.w3.org/2001/XMLSchema. Атрибут xmlns имеет фиксированное значение, в данном случае его менять нельзя. Как префикс пространства имен можно использовать любую последовательность символов. По обыкновению используются префикс xsd в соответствии с согласованием относительно использования данного именного пространства для определения элементов XML – схемы.

Внутри тега schema описываются элементы XML – документа. Элементы, которые содержат элементы или атрибуты, называются элементами комплексного типа. Элементы, которые вмещают только собственные данные, называются элементами простого типа. Для описания элементов простого типа используется тег element, что имеет вид:

<xsd:element name="имя_элемента" type="тип_данных"/>

В XML – схемах чаще всего используются такие типы данных:

xsd:string - любые символьные данные
xsd:boolean - логические значения true или false, 1 или 0
xsd:integer - целое число
xsd:float - числовое значение
xsd:date - дата
xsd:datetime - дата и время

Например, для описания элемента first_name можно в схеме определить:

<xsd:element name=" first_name " type="xsd:string"/>

Элементы комплексного типа могут быть описаны в схеме двумя образами:

I. Определяется имя элемента, комплексный тип данных для конкретного элемента и дальше описывается последовательность дочерних элементов.

Например, так можно описать элемент student, который имеет дочерние элементы name и birthday символьного типа данных.

<xsd:element name="student">

<xsd:complextype>

<xsd:sequence>

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

<xsd:element name="birthday" type="xsd:string"/>

</xsd:sequence>

</xsd:complextype>

</xsd:element>

II. Объявляется элемент – определяется его имя и имя комплексного типа данных, а дальше в схеме описывается комплексный тип данных с данным именем.

Например, элемент student может быть описан так:

<xsd:element name="student" type="stdata" />

<xsd:complextype name="stdata" >

<xsd:sequence>

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

<xsd:element name="birthday" type="xsd:string"/>

</xsd:sequence>

</xsd:complextype>

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

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

name - имя атрибуту элемента;

type – тип данных значения атрибуту;

default – значение по умолчанию;

fixed – фиксированное значение атрибуту;

use – характер использования атрибуту: required – атрибут есть обязательным, optional - необязательный атрибут.

Например, если простой элемент phone имеет атрибут kind, то это можно описать так:

<xsd:element name="phone" type="xsd:string">

<xsd:attribute name=" kind" type="xsd:string"/>

</xsd:element>

В схемах, как и в DTD, можно определить допустимое количество повторений для элементов документа – количество вложений. Это выполняется с помощью атрибутов minoccurs и maxoccurs тега xsd:element.

Атрибут minoccurs определяет минимальное количество появлений элемента в документе. Возможные значения атрибута:

0 – элемент есть необязательным, может появляться нуль или больше раз;

1 – элемент должен быть присутствующим минимум один раз (значение по умолчанию).

Атрибут maxoccurs определяет максимальное количество появлений элемента в документе. Возможные такие значения атрибуту:

1 – элемент может появляться в документе не больше одного раза;

unbounded – число появлений элемента в документе не ограниченно.

Схему XML – документа можно создать с помощью текстового редактора, в том числе программы Блокнот, или с использованием разных XML – редакторов. Файл, в котором хранится схема документа, должен иметь расширения xsd. Для того чтобы связать XML – документ со схемой, нужно в теге корневого элемента определить пространство имен схемы и определить внешний файл, в котором находится схема.

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

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

<students xmlns:xsd="http://www.w3.org/2001/Xmlschema-instance"

xsd:nonamespaceschemalocation="Schdoc1.xsd">

<student number="1">

<name><first_name>Иван</first_name>

<last_name>Петренко</last_name></name>

<birthday>8 декабря 1990 года</birthday></student>

<student number="2">

<name><first_name>Мария</first_name>

<last_name>Смирнова</last_name></name>

<birthday>20 июля 1989 года</birthday></student>

</students>

Схема этого документа:

<?xml version="1.0"?>

<xsd:schema xmlns:xsd="http://www.w3.org/2001/Xmlschema">

<xsd:element name="students" type="sts" />

<xsd:complextype name="sts" >

<xsd:sequence>

<xsd:element name="student" type="stdata" minoccurs="0" maxoccurs="unbounded" />

</xsd:sequence>

</xsd:complextype>

<xsd:complextype name="stdata" >

<xsd:sequence>

<xsd:element name="name" type="stname" />

<xsd:element name="birthday" type="xsd:string"/>

</xsd:sequence>

<xsd:attribute name="number" type="xsd:string"/>

</xsd:complextype>

<xsd:complextype name="stname" >

<xsd:sequence>

<xsd:element name="first_name" type="xsd:string"/>

<xsd:element name="last_name" type="xsd:string"/>

</xsd:sequence>

</xsd:complextype>

</xsd:schema>

Для проверки соответствия документа схеме можно использовать разные программные средства – программы XML – Validator, некоторые из них предоставляют возможность проверить соответствие XML – документа схеме в режиме он-лайн. Например, по адресу http://xmltools.corefiling.com/schemaValidate можно обратиться к такой программе.

На web-странице в поле XML Schema нужно определить файл со схемой, в поле XML Instance – файл с XML – документом, нажать на кнопке Validate, дальше для вывода результатов проверки валидности нажать на ссылке Click here. Результаты проверки должны выглядеть как на рис. 10.4. В случае выявления ошибок программа выведет перечень причин, с которых документ не является валидным.

Рисунок 3 – Окно диалога программы проверки XML – документа на соответствие схеме


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: