Название: Базы данных. Концепция баз данных, реляционная модель данных, языки SQL и XML (Токмаков Г. П.)

Жанр: Информационные системы и технологии

Просмотров: 1406


7.3. xml схемы и метаданные

 

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

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

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

представляет данные, которые легко переносятся в базу данных и из нее.

Поэтому при использовании XML для хранения программно обрабатывае- мых данных необходима более основательная поддержка типов данных и их структуры. Привнесение в среду Web метаданных, описывающих свойства под- держиваемых в ней информационных ресурсов, является одной из важнейших целей создания платформы XML. Речь идет, прежде всего, об описании структу- ры XML-документов и их смыслового содержания (семантики). Необходимость решения этой задачи аргументируется стремлением к получению возможностей автоматической проверки правильности структуры XML-документов. Имеется в виду, что при наличии явного описания структуры документов проверку их правильности может осуществлять браузер.

Однако чаще всего не учитывается еще одно важное назначение метадан-

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

чивающих интеграцию неоднородных информационных ресурсов.

 

7.3.1.  С ТРУКТУРИРОВА Н И Е  ДАНН ЫХ  И  СХЕМА  XML

 

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

Любая задача структурирования связана с построением модели данных. В качестве модели XML-документа выбирается некий шаблон, определяющий тип используемой в документе информации и ее структуру. Такие шаблоны на-

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

В первое время для этой цели использовалась спецификация DTD (Document Type Definition), но фирма Microsoft разработала новый подход, который об- ладает значительными возможностями для описания типов данных. XML Schema задает структуру документа при помощи особого словаря; другими словами, сама схема документа представляет собой XML-документ, который включает в себя теги и атрибуты. Поэтому консорциум W3C рекомендовал описывать струк- туру документов XML на языке XSD.

Язык XSD различает простые и сложные элементы XML. Простыми (simple) элементами описываемого документа XML считаются элементы, не содержащие атрибутов и вложенных элементов. Сложные (complex)  элементы содержат ат- рибуты и/или вложенные элементы. Схема XML описывает простые типы – ти- пы простых элементов, и сложные типы – типы сложных элементов.

На Ошибка! Источник ссылки не найден. показана схема XML для доку- мента-заказа, приведенного на Рис. 8.2. . Даже этот простой пример показывает основательную поддержку типизации данных в схемах XML; элементы и атрибу- ты имеют типы данных, очень похожие на типы данных SQL. Кроме того, схема, приведенная на Ошибка! Источник ссылки не найден., сама является XML- документом, и поэтому человеку, знакомому с основами XML, прочитать ее лег- че, чем DTD-определение.

Возвращаясь к выполняемой XML функции разметки, следует еще раз под-

черкнуть, что он (в отличие от HTML) не является полнофункциональным язы-

ком, который должен решать все задачи представления, поддержки и обработки

 

 

Рис. 7.2.          XML-документ, содержащий расширенный заказ товаров

 

информационных ресурсов Web.

Если проводить аналогию с технологиями баз данных, то XML можно ква- лифицировать как язык определения данных. Специфика XML как языка опреде- ления данных заключается в том, что в нем сочетаются возможности описания свойств экземпляров элементов XML-документов, составляющих содержание данного конкретного документа, с возможностями определения свойств типа XML-документов (XML Schema) в терминах типов элементов этих документов.

1. Первая группа средств (теги разметки) используется по принципу само- описываемости, определяя некоторые свойства элементов конкретного доку- мента с помощью встраиваемых в него тегов разметки.

2. Что касается XML Schema, то она описывает типовые свойства элементов документа и свойства типов документов в целом.

Роль XML Schema аналогична роли схемы базы данных. Экземпляр XML мож-

но сравнить с хранением данных на физическом диске в СУБД, а XML-схему  со схемой языка описания SQL-данных. При этом XML Schema отчуждается от описываемых документов и хранится где-либо в Web. Конкретные XML- документы ссылаются на это определение, хотя они могут и включать его непо- средственно в явном виде.

 

7.3.2.  Т ИПЫ  ДА ННЫХ  В  СХЕМЕ  XML

 

С точки зрения базы данных основательная поддержка типов и структур данных является одним из главных достоинств XML Схем. В спецификации XML Schema определено более 30 встроенных типов данных, очень похожих на типы данных SQL. Наиболее важные с точки зрения баз данных типы данных ХМL Схем перечислены в таблице 7.1.

Если сравнить типы данных XML Схемы с типами данных баз данных, приве- денных в таблице 3.1, то можно сделать вывод, что все они могут быть взаимно обратно преобразованы друг в друга без потери информации. Именно это об- стоятельство является важным качеством XML-формата.

 

 

Типы данных в XML Схеме

Таблица 7.1

 

 

Тип данных XML Схемы

 

Описание

Числовые данные

Integer

Целое число

PositiveInteger

Положительное целое число

NegativeInteger

Отрицательное целое число

NonPositiveInteger

Нуль или отрицательное целое число

NonNegativeInteger

Нуль или положительное целое число

Int

32-битовое целое число со знаком

UnsignedInt

32-битовое целое число без знака

Long

64-битовое целое число со знаком

UnsignedLong

64-битовое целое число без знака

Short

16-битовое целое число со знаком

UnsignedShort

16-битовое целое число без знака

 

 

Тип данных XML Схемы

 

Описание

Decimal

Число, содержащее дробную часть

Float

Число с плавающей запятой стандартной точности

Double

Число с плавающей запятой двойной точности

Символьные данные

String

Символьная строка переменной длины

NormalizedString

Строка, в которой символы новой строки, возврата каретки и табуля-

ции заменены пробелами

Token

Строка, обработанная как NormalizedString, в которой удалены на- чальные и конечные пробелы и подряд идущие пробелы заменены одним пробелом

Дата и время

Time

Время дня (часы/минуты/секунды/миллисекунды)

DateTime

День и время (эквивалент SQL-типа TIMESTAMP)

Duration

Длительность            временного    интервала       (эквивалент    SQL-типа

DURATION)

Date

Год/месяц/день

Gmonth

Месяц по григорианскому календарю (от 1 до 12)

Gyear

Год по григорианскому календарю (от 0000 до 9999)

Gday

День месяца по григорианскому календарю (от 1 до 31)

GmonthDay

Месяц/день по григорианскому календарю

Другие данные

Boolean

Значение TRUE/FALSE

Byte

Один байт данных со знаковым битом

UnsignedByte

Один байт данных без знакового бита

base64Binary

Двоичные данные по основанию 64

HexBinary

Двоичные данные по основанию 16

AnyURI

URI-адрес в Интернете, например, http://www.w3.org

Language

Допустимый язык XML (английский, французский ...)

 

Так же как стандарты SQL2 и SQL3, XML Schema поддерживает пользователь- ские типы данных, производные от встроенных типов или других пользова- тельских типов данных. Пользовательский тип данных определяется как огра- ничение, накладываемое на другой тип данных XML.

Ниже приведено определение производного типа данных repNumType, огра-

ничивающего допустимые коды служащих диапазоном значений от 101 до 199.

 

 

С таким определением типа данных можно объявлять сущности и атрибуты схемы как относящиеся к типу repNumType, и для них будет автоматически при- меняться заданное вами ограничение.

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

Еще XML Schema позволяет определять сложные типы данных, то есть поль-

зовательские структуры. Вот, например, определение сложного типа данных

custAddrType, составленного из вложенных элементов стандартных типов:

 

 

Можно также создать пользовательский тип данных, представляющий со- бой список элементов данных другого типа. Вот, в частности, определение сложного типа repListType, представляющего собой список кодов служащих:

 

 

Обычно в определении любого языка содержится описание типов и струк- тур данных. Информация о типе указывает характер размещения данных в дво- ичной памяти, выделяемой ОС в ходе выполнения этой программы. Язык про- граммирования воспринимает данные через собственный набор типов данных, которые, по сути, являются абстракцией двоичного кода, используемого для физического хранения и манипулирования битами и байтами.

Поэтому программные средства используют только собственный, уникаль-

ный механизм для формирования, передачи и хранения данных, как будто не существует других языков программирования или словно эта программная сис-

тема решает многолетнюю проблему абстрагирования данных раз и навсегда.

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

шаг представляет собой значительный сдвиг в вопросе восприятия данных при-

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

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

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

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

XML-процессоры находят соответствие имен элементов в файле схемы с именами элементов в файле данных и применяют сведения о типе и структуре. XML-процессоры также должны «понимать» специальные элементы схемы, ка- сающиеся интерпретации данных, по таким вопросам, как упорядочивание дан- ных  для  передачи  по  HTTP (сериализация)  или  порядок  отображения  SOAP- сообщения на определенный метод объекта.

Отображение любых значений в текстовую форму и обратно является не-

эффективным действием в плане как использования пространства памяти, так и в  отношении скорости обработки. Но  нередко производительность является

«наименьшим злом» по сравнению с нереализованными возможностями. И в

этом случае, поскольку язык XML предлагает выход для важнейшей, ранее не-

разрешимой проблемы, производительность отступает на второй план.

 

7.3.3.  Э ЛЕМЕН Т Ы  И  АТРИБУТЫ  В  XML С ХЕМЕ

 

Помимо богатых возможностей для определения типов данных XML Schema включает богатый словарь для определения структуры документа и разрешен- ных элементов и атрибутов.

– Простое содержимое. Элемент содержит только текст (хотя, как говорилось в предыдущем параграфе, текст можно ограничить данными отдельного типа, таки- ми как дата или числовое значение). Содержимое этого типа определяется при помощи элемента simpleContent.

– Только элементы. Элемент содержит только вложенные элементы. Содержи-

мое этого типа определяется при помощи элемента complexType.

– Смешанное содержимое. Элемент может содержать и текстовое содержимое, и вложенные элементы. XML Schema требует, чтобы последовательность элементов и

текстового содержимого была строго определена, и допустимые документы должны соответствовать этой последовательности.

– Пустое содержимое. Элемент содержит только атрибуты и никакого тексто- вого содержимого. XML Schema интерпретирует такие элементы как особый случай содержимого типа «только элементы» без объявленных элементов.

– Любое содержимое. Элемент может быть пустым, содержать вложенные эле- менты и/или текст. Содержимое этого типа определяется при помощи элемента anyТуре.

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

схемы. Кроме того, можно указать, что элемент может встречаться в документе несколько раз, и задать минимальное и максимальное количество вхождений. Подобно SQL, XML Schema поддерживает значение элементов NULL, указывающее, что содержимое элемента неизвестно. В терминологии XML это значение назы- вается nil, но смысл его тот же самый. Поддержка этого значения упрощает

перенос данных между XML и столбцами баз данных, которые могут содержать значения NULL.

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

как единое целое. Группировка элементов делает их структуру еще более гиб- кой. Группа может определять последовательность элементов, которые долж- ны обязательно присутствовать в документе в заданном порядке. Или же она может определять набор элементов, из которого в документе обязательно дол-

жен присутствовать только один элемент.

Аналогичные возможности имеются  и  для  управления атрибутами. От-

дельный атрибут можно  определить как  обязательный или  необязательный.

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

 

7.3.4.  П РОСТРАНСТВО  ИМЕН

 

Поскольку возможно существование множества схем, поэтому во избежа- ние совпадения имен тэгов в XML вводятся пространства имен тэгов, исполь- зуемых для хранения словарей  XML  наборов определений типов данных и структур, используемых для различных целей. В большой организации может быть полезно определить стандартизированное XML-представление для основ- ных дел объектов, таких как адреса, номера товаров, коды клиентов и т. п., и держать их в общем хранилище. Полезны и определения более высокого уров- ня, описывающие такие документы, как заказы, заявления на отпуск и т. п., для совместного использования их обычно объединяют в группы.

Пространство  имени  указывается  перед  именем  тэга:  <namespace:tag/>.

Пространство имен может быть подключено в любом тэге документа XML, напр.:

<ntb:notebook xmlns:ntb = «http://some.firm.com/2003/ntbml»>. В  качестве имени пространства имен рекомендовано указывать некоторый URL. Но это во- все не означает, что описание пространства имен находится по данному адресу.

Данный сайт может вообще не существовать, никаких обращений по этому адресу не будет. Использование URL рекомендовано лишь для того, чтобы обес- печить уникальность именования пространств имен. Поэтому в отношении пространств имен важно иметь в виду, что:

– строка в определении пространства имен является только строкой. Да, эти строки  выглядят  как  URL,  но  ими  не  являются.  Вы  можете  определить

xmlns:addr="mike", и это также будет работать;

– только одно важно в отношении строки пространства имен: она должна быть уникальной; вот почему большинство пространств имен выглядят как URL;

– XML-парсер не обращается к http://www.zyx.com/books/, чтобы найти схе- му, он просто использует этот текст как строку. Это несколько сбивает с толку, но именно так работают пространства имен.

Если пространство имен явно не указывается для тэга, то используется пространство имен по умолчанию. Это пространство имен можно переопреде-

 

 
лить:

 

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

Каждому пространству имен, заданному в заголовке схемы, может быть при-

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

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

сами:

 

В этом примере пространство имен компании идентифицируется префик- сом corp, а основное пространство имен XML  префиксом xsd. Все ссылки на типы данных уточняются одним из этих префиксов, благодаря чему они абсо- лютно однозначны.