(495) 925-0049, ITShop интернет-магазин 229-0436, Учебный Центр 925-0049
  Главная страница Карта сайта Контакты
Поиск
Вход
Регистрация
Рассылки сайта
 
 
 
 
 

Работа с 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-документов:

  1. Размещение документов поэлементно.
  2. Размещение документов целиком.
  3. Гибридный подход.

Размещение документов поэлементно

В этом случае данные хранятся в традиционном реляционном представлении в таблицах 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е.

Оператор фильтра "[]"

Этот оператор позволяет создать новый документ, содержащий в себе только необходимое подмножество данных:

/bookstore/book[author/first-name = ‘Mary’]/title

В данном примере будет создан новый документ, содержащий в себе список названий книг, автором которых является 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() - для анализа XML;
  • Query() - для выполнения запросов к XML.

Метод parse()

В зависимости от передаваемых параметров этот метод имеет два варианта (рис. 1).

Parse() с параметром String - это статический метод для анализа XML и преобразования его во внутренний формат Sybase. В качестве параметра используется строковый параметр Java String:

SybXmlStream xmlStream = xml.Xql.parse("<xml><A><B>c</B></A></xml>");

Parse() с параметром InputStream - в качестве аргумента берется InputStream, то есть для работы с документами, поступающими извне:

URL fileURL;
fileURL = new URL("http://xml.mysite.com/order.xml");
InputStream inputXML;
SybXmlStream xmlStream;
inputXML = fileURL.openStream();
xmlStream = xml.Xql.parse(inputXML);

Результатом выполнения метода parse() является объект класса SybXmlStream, содержащий оптимизированную индексную структуру XML-документа внутри ASE. Такое внутреннее представление решает проблему снижения производительности сервера при одновременной работе нескольких пользователей с одним XML-документом, размер которого составляет несколько мегабайт.

Метод query()

Этот метод служит для выполнения запросов к XML-документам и имеет два аргумента: строка XQL-запроса и XML-документ. Результатом выполнения является XML-документ с корневым элементом <xql_result>… </xql_result>. В зависимости от типа передаваемых параметров имеет четыре варианта (рис. 2).

Query() c параметром String - этот статический метод выполняет запрос к XML-документу, содержащемуся в строке:

String result = xml.Xql.query("/bookstore/book/author", "<xml> ... </xml>");

Query() с параметром InputStream - этот метод выполняет запрос к XML-документу, который хранится в файле на диске:

FileInputStream xmlStream = new FileInputStream("bookstore.xml");
String result = Xql.query("/bookstore/book/author", xmlStream);

или находится в Интернете (в этом случае используется объект URL):

URL xmlURL = new URL("http://mybookstore.amazon.com/bookstore.xml");
String result = Xql.query("/bookstore/book/author", xmlURL.openStream());

Query() с параметром SybXmlStream - принимает в качестве параметра объект класса SybXmlStream. Типичный сценарий использования этого варианта:

SybXmlStream xmlStream = xml.Xql.parse("<xml>..</xml>");
String result = xml.Xql.query("/bookstore/book/author", xmlStream);

Query() с параметром JXml - класс JXml применяется в текущей версии ASE 12.0 как Java-объект для хранения и работы с XML-документами. Если в базе уже имеются документы, разработанные с помощью данного класса, то работу с ними можно производить с помощью XQL:

JXml xDoc = new JXml("<xml>...</xml>");
String result = Xql.query( "/bookstore/book/author", xDoc);

Интеграция SQL с XQL в ASE 12.5

Над документами, хранящимися в базе данных XML, можно выполнять четыре основные операции: INSERT, DELETE, UPDATE и SELECT.

Создадим таблицу:

create table XMLDAT(.., xmldoc image,..)

Добавим в нее документ:

insert into XMLDAT values ( .., xml.Xql.parse( "<xml><bookstore>..</bookstore></xml>"), .. )

Удалим из таблицы все записи, содержащие XML-документы, в которых упоминается имя автора Karl:

Delete from XMLDAT
Where
xml.Xql.query("/bookstore/book[autor/first-name=‘Karl’], xmlcol ) != xml.xql.EmptyResult

Переменная EmptyResult содержит пустой XML-документ в виде <xql_result></xql_result>.

Аналогично можно выполнить изменение документов:

update XMLDAT
set xmldoc = xml.Xql.parse("<xml> … … </xml>")
Where ..

Как SQL выполняет запрос к реляционным данным, так и XQL выполняет запросы к данным, которые хранятся в XML-документе:

Select
xml.Xql.query("/bookstore/book[autor/first-name=‘Mary’], xmlcol )
from XMLDAT
Where
            xml.Xql.query("/bookstore/book[autor/first-name=‘Mary’], xmlcol ) != xml.xql.EmptyResult

Приведенная конструкция оператора SELECT выбирает из таблицы все строки, где содержатся XML-документы с автором Mary, а затем формирует список книг, автором которых является Mary.

Поддержка XML в ASE позволяет разработчикам создавать эффективные решения в области обмена деловой информацией между различными приложениями. Хранение XML-документов в базе облегчает работу Web-дизайнерам, которым приходится рисовать сотни HTML-страниц с одинаковым содержанием, но с разными способами представления данных. Используя поддержу Java в ASE, можно создавать собственные классы для обработки специфических XML-документов. Все вышеописанные, а также другие решения, предлагаемые компанией Sybase, позволяют ASE стать надежной основой для построения систем электронной коммерции и создания единого информационного портала предприятия.

Ссылки по теме


 Распечатать »
 Правила публикации »
  Написать редактору 
 Рекомендовать » Дата публикации: 14.01.2003 
 

Магазин программного обеспечения   WWW.ITSHOP.RU
SAP Crystal Reports XI R2 Dev 2006 INTL WIN NUL License (Version 11)
Inventory 9
Allround Automation PL/SQL Developer - Annual Service Contract - Unlimited
IBM Domino Messaging Client Access License Authorized User License + SW Subscription & Support 12 Months
IBM DOMINO ENTERPRISE CLIENT ACCESS LICENSE AUTHORIZED USER ANNUAL SW SUBSCRIPTION & SUPPORT RENEWAL
 
Другие предложения...
 
Курсы обучения   WWW.ITSHOP.RU
 
Другие предложения...
 
Магазин сертификационных экзаменов   WWW.ITSHOP.RU
 
Другие предложения...
 
3D Принтеры | 3D Печать   WWW.ITSHOP.RU
 
Другие предложения...
 
Новости по теме
 
Рассылки Subscribe.ru
Информационные технологии: CASE, RAD, ERP, OLAP
Новости ITShop.ru - ПО, книги, документация, курсы обучения
Программирование на Microsoft Access
CASE-технологии
СУБД Oracle "с нуля"
Программирование на Visual Basic/Visual Studio и ASP/ASP.NET
Проект mic-hard - все об XP - новости, статьи, советы
 
Статьи по теме
 
Новинки каталога Download
 
Исходники
 
Документация
 
 



    
rambler's top100 Rambler's Top100