div.main {margin-left: 20pt; margin-right: 20pt}
Работа с XML при помощи продуктов Informix
Андрей Прохоров
В последние годы все большее количество поставщиков программного
обеспечения заявляют о поддержке в своих продуктах технологий XML. Не остался
в стороне и такой поставщик СУБД, как компания Informix Software.
Как именно объектно-реляционный сервер может поддерживать XML — вопрос далеко
не однозначный даже для специалистов. Задача данной статьи — рассказать о том,
как в принципе объектно-реляционная СУБД (ОРСУБД) может поддерживать XML-технологии
и как эти подходы реализованы в СУБД Informix Dynamic Server 9.
По сути 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-данных. Все возможности
обработки сводятся к записи документа в поле типа 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. Для облегчения данного процесса 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, но и на уровне средств связности и средств разработки.
Это позволяет выбрать оптимальное для решения конкретной прикладной задачи технологическое
решение.
|