Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Учебное пособие СУБД 2011.pdf
Скачиваний:
68
Добавлен:
10.06.2015
Размер:
2.75 Mб
Скачать

121

XX. Язык XML

Вид занятия – лабораторное занятие. Время занятия – 2 часа.

Расширяемый язык разметки (eXtensible Markup Language, XML) был разработан специально для создания структурированных документов – он как никто другой позволяет представлять и манипулировать элементами данных. Любой документ XML может рассматриваться как символьная строка, состоящая из символов разметки и данных. Благодаря тому, что двоичные данные в XML отсутствуют, документ на основе расширяемого языка разметки может быть открыт и отредактирован в любом текстовом редакторе, от элементарного блокнота до текстового процессора класса Microsoft Word.

Построение простейшего документа XML

Правила создания рядового документа XML столь просты, что для написания демонстрационного проекта в формате XML уйдёт не более минуты.

<?xml version="1.0" encoding="WINDOWS-1251"?> <!--Это комментарий-->

<example>

<line1>Простой пример работы</line1> <line2>с языком XML</line2>

</example>

Каждому открывающему тэгу должен сопоставляться закрывающий тэг (за исключением первой строки документа). Признаком того, что тэг является закрывающим служит наклонная черта “/”.

Рисунок 20.1. Внешний вид XML-документа в браузере Windows Internet Explorer

Совокупность открывающего, закрывающего тэга и данных внутри них

<line3>данные</line3>

называется элементом документа.

Базовые правила определения элементов XML:

1.Каждому открывающему тэгу должен соответствовать закрывающий тэг.

2.Документ XML позволяет использовать вложенные друг в друга тэги, при условии, что тэги не должны перекрываться.

© Осипов Д.Л., 2011

122

3.В документе XML должен быть всего один корневой элемент.

4.Имена тэгов должны начинаться с буквы. После первого символа разрешается применять цифровые и буквенные символы. Имя не должно содержать символы пробела

идвоеточия “:”. В именах запрещено применять аббревиатуры “XML”, “xml”, “Xml”,

ит.п.

5.Имена чувствительны к регистру.

Атрибуты

Предположим, что мы через Интернет получаем прайс-лист книжного магазина. В нём содержатся данные систематизированные по жанру произведения, а внутри элементов жанра

<GENRE> .. </GENRE> хранятся элементы с описанием книг <BOOK>..</BOOK>.

<?xml version="1.0" encoding="WINDOWS-1251"?> <pricelist>

<GENRE>Роман

<BOOK WRITER="Толстой Л.Н." PUBLISHER="Мир" PRICE="100.00">

Война и мир</BOOK>

<BOOK WRITER="Толстой Л.Н." PUBLISHER="Детская литература" PRICE="57.00">

Анна Каренина</BOOK>

<BOOK WRITER="Достоевский Ф.М." PUBLISHER="Кавказ" PRICE="210.00">

Братья Карамазовы</BOOK> </GENRE>

<GENRE>Поэма

<BOOK WRITER="Гёте И.В." PUBLISHER="Худ. литература" PRICE="45.5"> Фауст</BOOK>

</GENRE>

</pricelist>

Самое главное в новом примере то, что открывающий тэг описания книг содержит атрибуты. Атрибут состоит из названия и значения. Порядок именования атрибутов ничем не отличается от правил задания имён для элементов документа. Значения атрибутов заключаются в двойные или одинарные кавычки, в нашем примере в них содержатся дополнительная информация, описывающая ту или иную книгу.

Определение документа DTD

Нельзя исключить вероятность того, что заложенная разработчиком смысловая нагрузка в элементы документа окажется не столь очевидной как для пользователя, так и для анализатора XML. Примеров неоднозначностей в толковании разметки документа достаточно много. Например, создавая элемент <PHONENUM> мы рассчитываем, что в нём будет храниться 11-значный номер телефона, но пользователь предположит, что достаточно ограничиться сокращённым 6-значным номером абонента. Для решения подобных проблем в базах данных разработан весьма эффективный аппарат поддержки целостности и непротиворечивости данных, а как обстоят дела в XML?

В ситуации неоднозначности толкования разметки стоит воспользоваться ещё одним козырем XML – способностью подключения к документу дополнительного описания назы-

ваемого определением типа документа (Document Type Definition, DTD). DTD конкрети-

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

Описание структуры документа XML с помощью DTD начинается сразу после обязательного заголовка документа и включает слово DOCTYPE. Признаком завершения секции описания выступает закрывающая квадратная скобка и закрывающий тэг ]>. Таким образом простейшее описание будет выглядеть следующим образом:

<!DOCTYPE имя_элемента [ ]>

© 2011 г. Д.Л. Осипов

123

Внутри секции содержится некоторый набор тэгов <! и > в которые заключаются имена элементов структуры или списки атрибутов. Восклицательный знак указывает на то, что это элемент объявления. Сразу за восклицательным знаком (без пробела) следует слово DOCTYPE и имя элемента структуры.

В простейшем случае описание DTD заносится непосредственно в документ XML, сразу после заголовка с версией. В представленном ниже примере мы создаём блок определения типа документа, информирующего нас о том, что:

1.Каждый информационный блок документа pricelist состоит из двух элементов

(GENRE и BOOK).

2.Оба элемента представляют собой разобранные символьные данные (Parsed Character Data, PCDATA) или, проще говоря, элементы хранят обычный текст.

3.Элемент BOOK содержит список атрибутов (тэг <!ATTLIST). Из них два атрибута обязательны для заполнения (#REQUIRED) и один необязательный (#IMPLIED).

<?xml version="1.0" encoding="WINDOWS-1251" standalone="yes"?> <!DOCTYPE pricelist [

<!ELEMENT GENRE (#PCDATA)>

<!ELEMENT BOOK (#PCDATA)>

<!ATTLIST BOOK

#REQUIRED

WRITER CDATA

PUBLISHER CDATA

#IMPLIED

PRICE CDATA

#REQUIRED>]>

<pricelist> <GENRE>Роман

<BOOK

WRITER="Толстой Л.Н." PUBLISHER="Мир" PRICE="100.00">

Война и мир</BOOK> </GENRE>

</pricelist>

Впроцессе чтения блоков данных XML, анализатор проверяет их на соответствие требованиям DTD. Если выявляются отсутствующие (или наоборот лишние) элементы и атрибуты, или элемент данных находится не в ожидаемом месте, или содержимое элементов и атрибутов не соответствует объявлению, то анализатор делает вывод о том, что документ некорректен.

Внашем примере элемент BOOK содержит объявления атрибутов. Список атрибутов начинается с тэга <!ATTLIST, далее следует имя элемента, которому принадлежит список, затем описание атрибутов и закрывающая угловая скобка. Ключевое достоинство атрибута в том, что тип хранимых в нём данных не ограничивается простым CDATA (см.

табл. 20.1).

Таблица 20.1. Типы атрибутов DTD

Тип

CDATA

ID

IDREF

IDREFS

ENTITY

Описание

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

Признак, что значение атрибута должно быть уникальным. Весьма полезное качество при работе с базами данных, так как позволяет однозначно идентифицировать элемент, которому принадлежит уникальный атрибут

Ватрибуте хранится ссылка на идентификатор (ID) элемента

Ватрибуте находится разделённая пробелами последовательность значений

IDREF

Ссылка на внешний объект (например, файл мультимедиа). При проверке корректности документа подобный объект пропускается анализатором

© 2011 г. Д.Л. Осипов

124

ENTITIES

NMTOKEN

NMTOKENS

Перечислимый атрибут

Разделённые пробелами ссылки на внешние объекты

Строка символьных данных, которая будет рассматриваться анализатором как корректное значение

Строка, содержащая несколько разделённых пробелами NMTOKEN

Атрибут, содержащий список допустимых значений. Например:

<!ATTLIST video format (MPEG1 | MPEG2 | MPEG4) “MPEG2”>

В скобках мы перечислили все допустимые для атрибута значения видеоформата. По умолчанию предлагается применять формат видеозаписи MPEG2

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

<!DOCTYPE COMPUTERS [

<!ELEMENT COMPUTER (CPU, HDD+, VIDEO, RAM, OTHER*)> <!ELEMENT CPU (#PCDATA)>

<!ELEMENT HDD (#PCDATA)>

<!ELEMENT VIDEO (#PCDATA)>

<!ELEMENT RAM (#PCDATA)>

<!ELEMENT OTHER (#PCDATA)>

]>

указывают на то, что элемент “COMPUTER” должен содержать информацию о процессоре “CPU”, жестком диске “HDD”, видеокарте “VIDEO”, памяти “RAM” и другом оборудовании “OTHER”. С этой целью названия вложенных элементов перечисляются в круглых скобках после слова “COMPUTER”. Подобное перечисление требует, чтобы при вводе XML данных строго соблюдался порядок следования элементов, на первом месте процессор, на втором

– винчестер, и т.д. Если обозначенный порядок, по каким то причинам нарушится, то анализатор документа немедленно известит нас об ошибке в документе.

Обратите внимание ещё на одну особенность описания DTD для примера с компьютером. Во второй строке листинга после названий элементов “HDD” и “OTHER” появились ранее не встречавшиеся нам символы “+” и “*”. Благодаря им мы приобретаем дополнительные возможности (см. табл. 20.2) по введению ограничений на количество элементов данных и установке признака обязательности и необязательности элемента.

Таблица 20.2. Ограничение количества элементов

Определитель Описание

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

+Элемент может появиться один или несколько раз

*Элемент может не появляться или появляться несколько раз

Пустой опре- Значение по умолчанию. Элемент обязателен и может появляться только один раз

делитель

С помощью символов “+” и “*” мы сумели создать определение DTD для XML-документа с переменным числом элементов. Теперь, при описании состава компьютера нам позволено подключать один или несколько жёстких дисков и неограниченное число дополнительного оборудования “OTHER”, при этом документ XML остаётся корректным.

<?xml version="1.0" encoding="WINDOWS-1251" standalone="no"?> <!DOCTYPE COMPUTERS SYSTEM "computers.dtd">

<COMPUTERS>

<COMPUTER>

<CPU>INTEL CoreDuo2400</CPU> <HDD>320GB</HDD> <VIDEO>RODEON8800</VIDEO>

© 2011 г. Д.Л. Осипов