Работа с XML при помощи продуктов Informix
Что такое 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