Работа с XML при помощи продуктов Informix

Андрей Прохоров

Что такое XML и зачем он нужен?

Интеграция XML в СУБД

   Хранение XML в виде BLOB-полей

   Представление документа XML в наборе связанных таблиц

   Иерархическая структура хранения

Заключение

 

В последние годы все большее количество поставщиков программного обеспечения заявляют о поддержке в своих продуктах технологий XML. Не остался в стороне и такой поставщик СУБД, как компания Informix Software.

Как именно объектно-реляционный сервер может поддерживать XML — вопрос далеко не однозначный даже для специалистов. Задача данной статьи — рассказать о том, как в принципе объектно-реляционная СУБД (ОРСУБД) может поддерживать XML-технологии и как эти подходы реализованы в СУБД Informix Dynamic Server 9.

Что такое XML и зачем он нужен?

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

<ARTICLE>
	<AUTHOR>
		<FNAME>Петр</FNAME>
		<LANME>Васин</LNAME>
	</AUTHOR>
	<TITLE>СУБД и XML</TITLE>
	<DATE>25.04.01</DATE>
</ARTICLE>

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

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

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

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

В начало В начало

Интеграция XML в СУБД

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

В начало В начало

Хранение XML в виде BLOB-полей

С точки зрения реализации самым простым способом является первый. Он очень часто применяется при использовании РСУБД для хранения XML-данных. Все возможности обработки сводятся к записи документа в поле типа BLOB или CLOB и к его извлечению по запросу пользователя. При этом вся осмысленная обработка ложится на приложение.

Использование объектно-реляционных технологий позволило расширить интеллектуальные возможности СУБД по обработке документов при данном методе хранения. В частности, в ОРСУБД Informix Dynamic Server 9 (IDS 9) появилась такая структура хранения данных, как Smart BLOB. Отличительной особенностью Smart BLOB является то, что сервер может выполнять более тонкие операции с таким объектом. В частности, сервер предоставляет возможность выбирать, изменять и блокировать не весь Smart BLOB целиком, а только указанные фрагменты поля данного типа.

Кроме того, IDS 9 предоставляет открытый API для определения вторичных методов доступа, то есть индексов. Благодаря такой открытости разработаны три модуля полнотекстового поиска компаниями Excalibur, Verity и RedLab для IDS 9. В частности, модуль Verity позволяет осуществлять контекстный поиск по XML-документам. При помощи Verity Text Search DataBlade можно осуществлять индексированный поиск по определенным разделам документа. Если вернуться к приведенному выше примеру с заголовками статей, то можно запросить все статьи, в заголовках которых встречается указанное слово или словосочетание.

Таким образом, применение сервера IDS 9 позволяет существенно расширить возможности по обработке XML-документов при их хранении в неизменном виде. Простота реализации данного способа хранения вполне оправданна при работе с данными относительно несложной структуры.

В начало В начало

Представление документа XML в наборе связанных таблиц

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

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

  • путем осуществления преобразования внешним приложением;
  • путем преобразования документов внутри сервера баз данных.

В первом случае вся нагрузка, связанная с формированием и разбором XML-документов, ложится на клиентское приложение либо на сервер приложений. Такой подход имеет как преимущества, так и недостатки. К преимуществам можно отнести:

  • относительную простоту реализации метода;
  • разнесение вычислительной нагрузки между СУБД и приложением.

Естественно, что наряду с достоинствами имеются и недостатки. В этом случае каждое приложение, нуждающееся в XML-документе, должно само заботиться о его формировании и разборе XML. Для облегчения данного процесса Informix предлагает инструментальное средство Informix Object Translator. Это визуальное средство разработки позволяет связать объекты, в самом общем понимании, с реляционной структурой базы данных. При этом автоматически генерируется код, обеспечивающий сохранение и извлечение объектов из базы данных. Object Translator имеет встроенные средства поддержки XML как одного из таких типов объектов. Генерация кода обеспечивается для языков Visual Basic и Java.

Специальное расширение JAXP интерфейса доступа к данным JDBC представила компания Sun. Это расширение предназначено для работы с XML-документами из Java-приложений. Компания Informix реализовала поддержку данного расширения в очередной версии своего JDBC-драйвера 2.20.

Второй способ формирования XML-документов внутри сервера баз данных является более сложным, но зато гораздо более элегантным. Дело в том, что вариант поставки IDS 9, называемый Informix Internet Foundation, включает компонент J/Foundation. Этот компонент позволяет выполнять Java-процедуры внутри сервера. Таким образом, можно воспользоваться бесплатно распространяемыми XML-парсерами, написанными на Java, для формирования и разбора XML-документов непосредственно внутри сервера Informix.

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

В начало В начало

Иерархическая структура хранения

Наиболее сложным и при этом наиболее перспективным методом организации хранения XML-документов является воспроизведение иерархической структуры документа в рамках объектно-реляционной модели. Данный подход сулит достижение высокой эффективности в обработке данных.

В Informix разработан прототип иерархического метода хранения в виде Node Blade. В рамках этого модуля реализован тип данных Node — узел дерева. С его помощью структура приведенного выше примера XML-документа может быть представлена в следующем виде:

Node Value :: Node     Tag Name :: Varchar
1                                    ARTICLE
1.1                                 AUTHOR
1.1.1                             FNAME
1.1.2                             LNAME
1.2                                 TITLE
1.3                                    DATE

При этом вполне естественным образом можно организовать переход между различными уровнями иерархии. Для их осуществления могут быть задействованы обычные B+-индексы. Так, для перехода от тэга <LNAME> на один уровень выше необходимо урезать идентификатор исходного узла 1.1.1 до 1.1. Это вполне очевидная, легко выражаемая и, что более важно, быстро исполняемая в терминах SQL операция.

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

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

Так выглядит направление разработок Informix по обеспечению хранения XML-документов в виде естественной для них иерархической структуры данных.

В начало В начало

Заключение

Таким образом, Informix поддерживает все основные методы работы с XML-документами. При этом реализуется данная поддержка не только на уровне объектно-реляционного сервера баз данных IDS 9, но и на уровне средств связности и средств разработки. Это позволяет выбрать оптимальное для решения конкретной прикладной задачи технологическое решение.

КомпьютерПресс 6'2001