Birdstep XML. Реализация стандартов SAX, DOM и XPATH

Оглавление

Введение

XML является универсальным форматом для структурированных документов и данных в интернет. Этот язык разметки, являющийся стандартом консорциума W3C (World Wide Web Consortium), используется для создания структурированного содержания и сопровождения метаданных о нем. На практике это означает, что XML позволяет организациям совместно использовать, обмениваться и публиковать данные универсальным и общепринятым образом. Более подробную информацию о XML можно получить по адресу http://www.w3.org/XML/.

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

Абстрактное определение языка XML называется множеством информации (Infoset) XML. Его целью является предоставление согласованного набора определений для ссылки на информацию в правильно построенном XML-документе.

Формальное определение Infoset можно найти по адресу www.w3.org/TR/xml-infoset.

XML-документы могут иметь два основных представления.

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

Модель Infoset - это иерархия узлов, где каждый узел представляет информационный элемент, и где каждый элемент может содержать другие элементы или значения. Это представление больше всего подходит для навигации в структуре документа, для поиска конкретных элементов или значений, а также для генерации вторичных документов.

Представление Infoset языка XML не передает какого-либо особого синтаксиса сериализации.

На рисунке 1 показана структура сериализации, стоящая за иерархическим преставлением.

Рис. 1.

Процессор баз данных Birdstep Database Engine

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

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

Наполненный данными процессор Birdstep Database Engine можно представить в виде коллекции объектов. Каждый объект может быть ассоциирован с типом (классом), который был декларирован в схеме базы данных. Объекты в Birdstep Database Engine могут быть организованы в иерархическую структуру. Поэтому этот процессор особенно хорошо подходит для представления XML-документов в виде иерархии узлов. Birdstep Database Engine содержит механизм создания структуры, навигации и поиска в ней. Ниже перечислены возможности доступные в Birdstep Database Engine.

  • Класс может обладать комбинацией обязательных и необязательных атрибутов.
  • Необязательные атрибуты могут быть добавлены динамически, что позволяет использовать представления структур данных, которые не были первоначально определены в схеме базы данных.
  • Объект может иметь много дочерних объектов, либо ни одного.
  • Дочерние объекты любого объекта упорядочены. Новые дочерние объекты вставляются согласованно по отношению к другим дочерним объектам.
  • Любой объект имеет не больше одного родительского объекта.
  • Ребро соединения объекта с родительским объектом обладает текстовым ярлыком, который описывает роль этого объекта по отношению к родителю.
  • Ярлыки могут быть скомбинированы, образуя пути в базе данных. Пути можно использовать для ограничения множества запросов на иерархически структурированные данные.
  • Объекты с одним и тем же родительским объектом могут иметь одинаковые ярлыки на ребре, соединяющем их с общим родителем. Это означает, что путь определяет не один, а множество объектов. С другой стороны, можно представлять ярлык как имя подкаталога. Тогда, на дочерние объекты, связанные с одним и тем же родительским объектом через одинаковый ярлык, можно смотреть, как на часть одного и того же подкаталога. Ярлык представляет подкаталог, а на объекты можно смотреть, как на файлы, хранимые в данном подкаталоге.
  • Диаграммы могут быть представлены с помощью комбинации родительски-дочерних структур и использования атрибутов для ссылки на другие объекты базы данных.
  • Индексирование обеспечивает быстрый поиск и навигацию.

Эти возможности Birdstep Database Engine служат средством для высокоэффективной и надежной реализации интерфейсов XML. XML-документы хранятся в базе данных Birdstep как объекты иерархической структуры. Для базы данных Birdstep БД-структура XML-документа была сконструирована максимально похожей на модель Infoset. Это означает, что существует однозначное соответствие между узлами в структуре Infoset и узлами в дереве, отвечающем объектам документов базы данных. Для эффективности, узлы атрибутов в Infoset не представляются как объекты в базе данных. Это отражается в структурном различии между определением в Infoset и XML-представлением в базе данных. Также для повышения эффективности, атрибуты Infoset представляются как атрибуты объектов, для которых атрибуты уместны. В последовательном (сериализованном) представлении XML-документы обычно содержат атрибуты, значения и теги. В базе данных Birdstep теги хранятся как объекты (теговые объекты). Атрибуты и их значения хранятся как атрибуты теговых объектов и в самих атрибутах этих объектов.

На рисунке 2 показано, как Birdstep реализует стандарты SAX, DOM и XPATH для программистов приложений с помощью множества классов и методов, определенных в этих стандартах. Реализация SAX, DOM и XPATH привязана к Birdstep Database Engine с помощью встроенного интерфейса API-обращений к базе данных.

Рис. 2. Реализация Birdstep DBE и XML

SAXM

SAX является простым интерфейсом API для XML, который был разработан, чтобы обеспечить программистам доступ к нужной информации без необходимости самим создавать специальные синтаксические анализаторы.

SAX - это набор абстрактных программных интерфейсов, которые проецируют документ на поток вызовов известных методов. Продукты компании Birdstep используют внешние синтаксические анализаторы (expat-parser) с открытым кодом, чтобы анализировать поток и считывать интегрированные теги, атрибуты, значения, текст и структуру XML-документов. SAX компании Birdstep содержит методы для преобразования документа в иерархию объектов и атрибутов, которые будут представлять документ.

SAX описывает управляемый событиями интерфейс для процесса синтаксического разбора XML-документов. SAX является свободно распространяемым интерфейсом API, разработанным специалистами из списка рассылки XML-DEV. SAX не имеет формальных документов спецификации, но он определяется свободно распространяемой реализацией, выполненной с помощью языка программирования Java™. Синтаксический анализатор языка XML является совместимым с SAX, если он использует интерфейс, реализованный со статусом всеобщего достояния (public domain).

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

Использование SAX для импорта XML-документов и данных

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

SAX будет реагировать на событие для каждого открытого и каждого закрытого тега. Еще он запускается на события для секций #PCDATA и CDATA, инструкций обработки, а также для шаблонов DTD, комментариев и так далее. На рисунке 3 показано, как можно использовать реализацию Birdstep SAX для импорта XML-документа в базу данных Birdstep.

Рис. 3. Реализация Birdstep SAX

Использование SAX для получения XML-документов и данных из базы данных Birdstep

Когда XML-документ сохранен в базе данных Birdstep, его можно получить целиком или по частям с помощью данной реализации SAX. В этом случае можно создавать программы приложений, которые используют интерфейс Birdstep SAX в качестве управляемого событиями механизма подачи элементов документа. Нужно отметить, что элементы подаются последовательно и навигация назад и вперед при использовании SAX невозможна. Конечно, программа приложения может реагировать на события независимо. Например, она может выполнять сериализацию документа, то есть перестраивать его. Также программа может осуществлять поиск тегов или сбор статистики. На рисунке 4 показано, как реализация Birdstep SAX взаимодействует с программой приложения и Birdstep Database Engine.

Рис. 4. Реализация Birdstep SAX

DOM

Так же, как анализатор XML вообще и SAX, в частности, наносит некоторый слой абстракции на фактическое текстовое представление XML-документа, объектная модель документа (DOM) добавляет слой абстракции к верхнему уровню всего документа. DOM стандартизует объектную модель, представляющую XML-документ, и определяет интерфейс структуры и стиля XML-документов, который не зависит от языка программирования и платформы, К этому интерфейсу некоторые процессы получают динамический доступ и могут обновлять его. Элементы рассматриваются как узлы дерева вместо того, чтобы быть составленными из открывающих и закрывающих тегов. Узлы могут обладать родительскими и дочерними объектами. Также они могут иметь внутренние свойства, которые можно изменить с помощью объектов и методов.

DOM предоставляет программам доступ к хранящейся в XML-документе информации, как к иерархической объектной модели. DOM рассматривает документ как дерево узлов, основанное на структуре и информации данного XML-документа. Программисты могут получить доступ к информации, взаимодействуя с этим деревом узлов. DOM определяет множество абстрактных интерфейсов, что моделирует согласование документа со спецификациями XML-модели Infoset. Реализация DOM компании Birdstep состоит из множества методов для обеспечения доступа к документу, хранимому в базе данных в виде иерархии объектов. Данная реализация DOM поддерживает приложения, написанные на C++.

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

Использование DOM полезно для изменения XML-документов. Например, можно создать DOM-дерево, изменить его, добавив новые узлы и переместив некоторые ветви, а затем на выходе создать новый XML-документ. Также можно самостоятельно создать DOM-дерево и преобразовать его в XML. Часто, это более гибкий способ получения XML-кода, чем просто писать <tag1>...</tag1> в файле.

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

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

Модель DBE-хранилища компании Birdstep была спроектирована максимально приближенной DOM по структуре. Однако, эта модель проще, настолько, чтобы сделать эффективным последовательный вывод данных, то есть с помощью SAX. Поскольку в БД компании Birdstep XML-данные хранятся в структурах, схожих с DOM, DOM-интерфейс (или SAX-обработчик) не обязан загружать в память весь XML-документ прежде, чем пользователь сможет получить к нему доступ. К методам и объектам DOM можно обращаться в то время как документ находится в кэш-памяти буфера. Это основное отличие от подхода, когда XML-документ храниться в виде последовательной цепочки объектов.

XML-интерфейс процессора Birdstep Database Engine во многих отношениях подвержен влиянию со стороны DOM-интерфейса компании Apache, под названием Xerces. Это было сделано с целью помочь персоналу, знакомому с Xerces, легче перейти к работе с XML-интерфейсом процессора баз данных Birdstep Database Engine. Кроме того, проекты, использующие Xerces в качестве основного интерфейса, могут быть легко переведены на использование XML-интерфейса процессора Birdstep Database Engine. Однако, лежащая в основе архитектура полностью различна, поскольку DOM-интерфейс компании Birdstep работает с постоянными объектами баз данных, тогда как Xerces работает только с динамическими представлениями, находящимися в памяти.

XPATH

XPATH (язык путей в XML) является языком для выбора в XML-документе некоторого множества узлов. Синтаксис этого языка основан на использовании путей. Продукт XPATH компании Birdstep содержит логику, которая интерпретирует запрос, преобразует его в серию обращений к API-методам Birdstep DBE и представляет результирующее множество узлов.

Основной целью XPath является адресация частей XML-документа. В поддержку этой основной цели данный язык также предоставляет базовые средства для манипуляций со строками, числами и логическими параметрами. В XPath реализован компактный, отличный от XML синтаксис для того, чтобы облегчить использование XPath с идентификаторами URI и значениями атрибутов в XML. XPath оперирует скорее с абстрактной, логической структурой XML-документа, чем с его поверхностным синтаксисом. Название XPath возникло из-за использования путевых обозначений, таких как указатель URL, для навигации по иерархической структуре XML-документов.

Основной синтаксической конструкцией в XPath является выражение. Выражение после обработки выдает объект одного из следующих четырех основных типов:

  • тип множества узлов (неупорядоченная коллекция узлов без дубликатов);
  • логический тип (значения: true или false);
  • число (число с плавающей запятой);
  • строка (последовательность UCS-символов).

XPath используется для извлечения путей из XML-документов. В базе данных компании Birdstep XML-документы представлены в виде иерархии объектов (узлов). Когда XPATH-оператор используется в программе, выражение и содержание узлов задаются в качестве параметров. Синтаксический анализатор XPATH оценивает выражение и преобразует его в запрос к процессору Birdstep Database Engine. Результатом запроса является неупорядоченное множество узлов, которые могут быть и пустыми. Это множество удовлетворяет критериям данного выражения.

Запрос обрабатывается с помощью функций LookUp процессора Birdstep Database Engine. Схема индексации процессора базы данных обеспечивает высокопроизводительный поиск. Получающееся множество представляется с помощью ориентированной на указатели коллекции в процессоре баз данных Birdstep Database Engines.


Страница сайта http://test.interface.ru
Оригинал находится по адресу http://test.interface.ru/home.asp?artId=167