|
|
|||||||||||||||||||||||||||||
|
Работа с XML-документами в Sybase Adaptive Server EnterpriseИсточник: КомпьютерПресс Александр Барышев, Sybase CIS
Обсуждение XML в компьютерных изданиях в бумажном и в электронном виде сделало этот язык и его применение широко известным публике, так что доказывать его достоинства не имеет смысла. В то же время хотелось бы отметить, что XML не является панацеей для решения всех проблем электронного обмена документами между приложениями, но вкупе со многими уже существующими технологиями позволяет сделать такой обмен более простым и надежным. Именно поэтому крупнейшие поставщики СУБД добавили в свои SQL-серверы наборы компонентов, утилит и интерфейсов для работы с XML-документами, то есть создали своего рода программную инфраструктуру, которая позволяет объединить реляционную модель баз данных с иерархической моделью XML, упростить способ передачи информации в Интернет и хранение готовых XML-документов. А теперь рассмотрим, как реализована поддержка XML во флагманской СУБД Sybase - Adaptive Server Enterprise (ASE). Поддержка XML в ASEПоддержка XML введена в ASE начиная с версии 12.0. Она включает в себя хранение и обработку XML-документов не только со стороны клиента, но и на сервере. Встроенная в сервер виртуальная Java-машина с помощью методов специального Java-класса Jxml позволяет выполнять анализ XML-документа и совершать над ним базовые операции. В новую версию ASE 12.5, начало коммерческой реализации которой намечается в середине июня, добавлена возможность хранить синтаксически разобранные документы в полях таблицы типа image. Введен процессор языка XQL (XML query language) для обработки XML. Ниже мы расскажем обо всех возможностях обеих версий для работы с XML. Стратегия хранения XML-документовАSE хранит XML-документы в полях типа char или varchar (если размер документа небольшой), в полях типа Java-класс, в полях Image или Text. Существуют три подхода для размещения XML-документов:
Размещение документов поэлементноВ этом случае данные хранятся в традиционном реляционном представлении в таблицах ASE. При запросе к базе происходит выборка данных из всех таблиц и формирование XML-документа. При записи в базу происходит обратная операция - разбор XML и распределение данных по таблицам. Этот подход рекомендуется применять в случаях, когда происходит интенсивное изменение информации (например, в системах «банк-клиент»). Достоинством использования указанного подхода является поддержка ссылочной целостности на уровне базы данных и использования языка Transact-SQL для формирования и разбора XML-документа (применение функций SUBSTR, CONVERT и т.д.), а недостатком - необходимость проведения синтаксического анализа XML-документа каждый раз при его сборке/разборке. Размещение документов целикомДокумент целиком хранится в таблице, содержащей одну колонку типа image или text. Такой способ хранения документов подходит для тех случаев, когда их содержание статично, а любое обновление сводится к перезаписи в базе данных. Типичные примеры указанных документов - статьи, каталоги, прайс-листы и т.п., то есть документы в самом обычном значении этого слова, которые и хранятся в базе данных, и извлекаются по запросу целиком. Для хранения синтаксически разобранных (проанализированных) документов необходимо использовать поля типа Image, поскольку в случае, если документ хранится в поле типа text, то ASE 12.5 будет автоматически производить анализ документа при обращении к нему. Достоинство этого подхода - быстрый возврат по запросу законченного XML-документа. Недостаток состоит в том, что на поиск необходимого документа затрачивается длительное время. Гибридный подходГибридный подход предусматривает создание уникального ключевого поля в таблице для каждого XML-документа. Это обеспечивает быстрый доступ к необходимому документу. Понятие XQLДля работы с XML-документами в ASE реализован интерфейс языка XQL (XML Query Language). XQL был специально разработан в качестве основного языка запросов для фильтрации и выбора данных из XML-документов. Несмотря на то что этот язык еще сравнительно молод и пока не имеет стандарта, он уже получил поддержку со стороны Web-консорциума, и многие промышленные приложения используют его при работе с XML. Это достаточно краткий и понятный язык, наиболее привлекательный для современных СУБД. Рассмотрим некоторые из его операторов, которые будут использоваться в примерах, приводимых в данной статье. Операторы уровня иерархии ‘/’ и ‘//’Конструкция /bookstore/book/title позволяет получить новый XML-документ, содержащий в себе список названий всех книг, которые хранятся на складе. Аналогичный документ вернет конструкция /bookstore//titlе. Оператор фильтра "[]"Этот оператор позволяет создать новый документ, содержащий в себе только необходимое подмножество данных:
В данном примере будет создан новый документ, содержащий в себе список названий книг, автором которых является Mary. Полное описание XQL можно получить по адресу http://www.w3.org/TandS/QL/QL98/pp/xql.html/. Реализация XQL в ASE 12.5Как уже отмечалось выше, XQL реализован в ASE в виде Java-класса xml.xql, в котором содержатся методы для анализа и выполнения запросов к XML. Этот класс может выполняться на любой виртуальной машине Java, которую поддерживает ASE, и поэтому может использоваться для написания клиентских приложений для работы с XML на рабочих местах вне сервера. Класс содержит два основных метода:
Метод parse()В зависимости от передаваемых параметров этот метод имеет два варианта (рис. 1). Parse() с параметром String - это статический метод для анализа XML и преобразования его во внутренний формат Sybase. В качестве параметра используется строковый параметр Java String:
Parse() с параметром InputStream - в качестве аргумента берется InputStream, то есть для работы с документами, поступающими извне:
Результатом выполнения метода parse() является объект класса SybXmlStream, содержащий оптимизированную индексную структуру XML-документа внутри ASE. Такое внутреннее представление решает проблему снижения производительности сервера при одновременной работе нескольких пользователей с одним XML-документом, размер которого составляет несколько мегабайт. Метод query()Этот метод служит для выполнения запросов к XML-документам и имеет два аргумента: строка XQL-запроса и XML-документ. Результатом выполнения является XML-документ с корневым элементом <xql_result>… </xql_result>. В зависимости от типа передаваемых параметров имеет четыре варианта (рис. 2). Query() c параметром String - этот статический метод выполняет запрос к XML-документу, содержащемуся в строке:
Query() с параметром InputStream - этот метод выполняет запрос к XML-документу, который хранится в файле на диске:
или находится в Интернете (в этом случае используется объект URL):
Query() с параметром SybXmlStream - принимает в качестве параметра объект класса SybXmlStream. Типичный сценарий использования этого варианта:
Query() с параметром JXml - класс JXml применяется в текущей версии ASE 12.0 как Java-объект для хранения и работы с XML-документами. Если в базе уже имеются документы, разработанные с помощью данного класса, то работу с ними можно производить с помощью XQL:
Интеграция SQL с XQL в ASE 12.5Над документами, хранящимися в базе данных XML, можно выполнять четыре основные операции: INSERT, DELETE, UPDATE и SELECT. Создадим таблицу:
Добавим в нее документ:
Удалим из таблицы все записи, содержащие XML-документы, в которых упоминается имя автора Karl:
Переменная EmptyResult содержит пустой XML-документ в виде <xql_result></xql_result>. Аналогично можно выполнить изменение документов:
Как SQL выполняет запрос к реляционным данным, так и XQL выполняет запросы к данным, которые хранятся в XML-документе:
Приведенная конструкция оператора SELECT выбирает из таблицы все строки, где содержатся XML-документы с автором Mary, а затем формирует список книг, автором которых является Mary. Поддержка XML в ASE позволяет разработчикам создавать эффективные решения в области обмена деловой информацией между различными приложениями. Хранение XML-документов в базе облегчает работу Web-дизайнерам, которым приходится рисовать сотни HTML-страниц с одинаковым содержанием, но с разными способами представления данных. Используя поддержу Java в ASE, можно создавать собственные классы для обработки специфических XML-документов. Все вышеописанные, а также другие решения, предлагаемые компанией Sybase, позволяют ASE стать надежной основой для построения систем электронной коммерции и создания единого информационного портала предприятия. Ссылки по теме
|
|