Лабораторная работа № 7
Изучение возможностей xml-субд Sedna
по созданию и ведению баз данных
1. Цель работы
Целью работы является изучение возможностей XML-СУБД Sedna по созданию и ведению XML-ориентированных баз данных.
2. Задачи
Задачами лабораторной работы являются овладение навыками создания и заполнения XML-документов, запуска СУБД Sedna и создания новых баз данных в ней, загрузки XML-данных в базу данных из файла, программирования запросов XQuery, программных технологий реализации XSL-таблиц стилей для трансформации XML-данных.
3. Теоретическая часть
XML – Extensible Markup Language – переводится как «расширяемый язык разметки». Здесь разметка – это задание структуры данных в текстовых документах. Расширяемость языка в данном случае означает, что в язык можно вводить собственные обозначения, с помощью которых выполняется разметка. Иными словами, в XML можно вводить свои собственные теги разметки, а не пользоваться теми, которые определены разработчиками языка.
Более конкретно XML можно определить как язык для представления данных в виде деревьев. Это означает, что разметка документа задает некоторую иерархию фрагментов размечаемого текста.
Элемент XML-документа – это то, что заключено между открывающим и соответствующим закрывающим тегами. Имя элемента задается именем тега. Внутри элемента могут располагаться текстовые фрагменты и другие элементы. В документе может быть несколько элементов с одинаковыми именами. Пустой элемент ничего не содержит внутри себя: <поставка></поставка>. Его можно обозначить кратко с помощью самозакрывающегося тега: <поставка/>.
Элемент может иметь несколько атрибутов. Разделенный пробелами список атрибутов элемента записывается в его открывающем теге после имени. Каждый атрибут имеет имя атрибута, за которым через знак равенства следует строковое значение атрибута, заключенное в кавычки или апострофы.
Важная особенность имен элементов и атрибутов – чувствительность к регистру. Например, <студент/>, <Студент/> и <СТУДЕНТ/> – это разные элементы.
XML-СУБД. СУБД, работающие с XML данными, принято подразделять на две категории: прирожденные XML-СУБД (native XML DBMS, NXD), например «Tamino» Softwahre AG, и СУБД, поддерживающие XML (XML-enabled DBMS), например, SQL Server. Разница между ними состоит, во-первых, в полноте функциональных возможностей, поддерживаемых на логическом уровне представления и манипулирования XML данными и, во-вторых, в организации физического хранения (индексация и минимизация количества операций ввода-вывода), оптимизированного именно для XML данных.
Понятие Native XML Database было введено для отличия, что данный тип баз данных основан на использовании внутреннего представления XML в отличие от XML-надстроек над существующими реляционными базами данных (XML enabled DB), такими как Oracle, PosgreSQL, MS SQL Server, в которых реализована XML-надстройка (XML-SQL) в соответствии со стандартом доступа SQL-2003.
Основным требованием к XML native DB (NXD) является использование внутреннего представления (иногда употребляют – бинарное) DOM XML в базе данных.
Некоторые из направлений возможного применения NXD:
– использование в веб-службах;
– генерация суммарных отчетов данных из XML;
– поиск релевантных документов в слабоструктурированных данных;
– публикация данных для Web непосредственно в XHTML;
– объединение нескольких XML-документов, формирование сводных документов.
Прирожденные XML-СУБД обязательно определяют (логическую) модель XML-документа – в отличие от данных, содержащихся в этом самом документе – и сохраняет и извлекает документы в соответствии с этой моделью.
Прирожденные XML-СУБД хранят XML-документы, как единое целое, и создают модель, подобную XML или одной из XML-технологий, например InfosetилиDOM. Эта модель включает произвольные уровни вложенности и сложности, а также полную поддержку смешанных и слабоструктурированных данных. Эта модель автоматически отображается с помощью NXD в базовый механизм хранения. Это отображение обеспечит поддержку заданную XML-модель данных.
Фундаментальная единица (логического) хранения в прирожденные XML-СУБД – XML-документ (в то время как в реляционной базе данных – запись)
Sedna – российская прирожденная XML-СУБД, разрабатываемая исследовательской группой Modis в Институте системного программирования РАН. Текущая реализация Sedna базируется на спецификациях языка XQuery 1.0 и его модели данных.
Модель данных XML является иерархической, поэтому иерархические данные представляют собой естественный вариант использования прирожденных XML-СУБД. XML-ориентированная СУБД Sedna призвана решать задачи хранения большого объема XML-данных (до 1Гб и более) и эффективного управления этими данными, включая задачи поиска, изменения и трансформации данных.
Разработка Sedna не основана на использовании какой-либо существующей системы управления базами данных. Вместо того, чтобы создавать некоторую надстройку над существующей СУБД, систему управления XML-данными разрабатывали с нуля.
В общей архитектуре СУБД Sedna выделено несколько компонентов. Регулятор (governer) служит «управляющим центром» системы. Все остальные компоненты регистрируются у регулятора, который «знает», с какими базами данных работает система, и отслеживает выполнение транзакций. Слушатель (listener) создает для каждого нового авторизованного клиента экземпляр компонента подключение (connection) и устанавливает между ними прямую связь. В компоненте подключения инкапсулируется сеанс клиента. Для каждой заявки клиента «начать транзакцию» («begin transaction») его компонент подключения создает экземпляр компонента транзакция (transaction). В этом компоненте инкапсулируются компоненты выполнения запросов: парсер (parser), оптимизатор (optimizer) и исполнитель (executor).
В СУБД Sedna для общения клиентов с сервером используется протокол обмена сообщениями, базирующийся на механизме сокетов TCP/IP. Этот протокол открыт и предназначается для реализации высокоуровневых интерфейсов прикладного программирования (API) для связи с различными языками программирования. К настоящему времени разработаны драйверы, реализующие API для языков Java и Scheme.
Для работы с СУБД Sedna обычно используется инструмент командной строки (в случае реализации для операционной системы Windows). Для запуска СУБД используется команда se_gov, которая запускает одноименный exe-файл в папке BIN установочной директории Sedna. Здесь важно отметить, что установка Sedna является довольно простой – достаточно скачать дистрибутив СУБД с официального сайта (в виде архива) и развернуть его на локальной машине. По сути, вся структура СУБД представлена иерархией файлов и директорий такого архива – здесь хранятся как конфигурационные файлы СУБД (метаданные), так и информация, хранящаяся в базе данных (как правило, эти данные представлены в директории Data).
Создание новой базы данных выполняется посредством команды se_cdb (сокращение от sedna_create database), в качестве аргумента которой передается имя создаваемой базы данных.
Работа с базой данных возможна только в том случае, если она является активной (находится в состоянии running). Поэтому для выполнения дальнейших манипуляций с базой данных (независимо от того, когда она была создана), ее нужно запустить, активизировать. Для этого в Sedna используется команда se_sm, в качестве аргумента которой также передается название базы данных.
Структура и содержимое базы данных формируются несколько отличным от традиционного способа образом. Первым шагом создания базы данных является создание XML-файла (вручную в текстовом редакторе или полуавтоматизированно, в специальных XML-редакторах). Далее полученный XML-документ загружается в базу, при этом в составе одной и той же базы данных могут быть выделены несколько независимых документов, к каждому из которых могут быть обращены свои специфические запросы. Для загрузки документа в базу данных используется функция se_term, которой в качестве аргумента передается имя XQuery-файла, в котором прописываются имя базы данных и расположение файла, подгружаемого в нее.
Sedna Admin – это инструментально-программное средство, в визуальном режиме поддерживающее работу с XML-СУБД Sedna. Для развертывания Sedna Admin достаточно загрузить дистрибутив (в виде архива, как и сама СУБД) и скопировать его на локальную машину. Для начала работы нужно выбрать активную базу данных, фактически, установить связь с ней. Изначально это средство позиционируется как инструментарий отладки и выполнения запросов XQuery (запуск запросов из командной строки или из специальных файлов довольно трудоемок и проблематичен). Sedna Admin позволяет в режиме реального времени написать программный код запроса XQuery и запустить его на выполнение. При наличии ошибок инструментальное средство дает их подробное описание и рекомендации к исправлению.
XQuery. Запросы к БД выполняются посредством формулирования запросов на специальном языке XML Query (XQuery). Этот язык стандартизирован консорциумомW3C.
Язык является функциональным, строго типизированным, модульным, весьма выразительным и изящным. В его разработке принимали участие ведущие специалисты отрасли СУБД. Язык XQuery позволяет извлекать древовидные данные, трансформировать их и генерировать в качестве результата опять же древовидные данные (XML).
Язык XQuery определяет синтаксис итераций инструкции FLWOR. Слово FLWOR — это сокращение от слов for, let, where, order by и return.
Инструкция FLWOR состоит из следующих частей.
Одно или несколько предложений FOR, которые привязывают одну или несколько переменных-итераторов к входным последовательностям.
Входные последовательности также могут быть выражениями XQuery (например, выражениями XPath). Они являются либо последовательностями узлов, либо последовательностями атомарных значений. Последовательности атомарных значений могут быть получены с помощью литералов или функций-конструкторов. В SQL Server нельзя использовать построенные XML-узлы в качестве входных последовательностей.
Необязательное предложение let. Это предложение присваивает значение данной переменной для конкретной итерации. Присвоенное выражение может быть выражением XQuery, например выражением XPath, и может возвращать либо последовательность узлов, либо последовательность атомарных значений. Последовательности атомарных значений могут быть получены с помощью литералов или функций-конструкторов. В SQL Server нельзя использовать построенные XML-узлы в качестве входных последовательностей.
Переменная-итератор. Дополнительно для этой переменной с помощью ключевого слова as можно указать тип.
Необязательное предложение where. Это предложение применяется в качестве предиката фильтра при итерации.
Необязательное предложение order by.
Выражение return. Выражение в предложении return конструирует результат, возвращаемый инструкцией FLWOR.
XSLT – это расширяемый язык стилей для преобразований (от англ. eXtensible Stylesheet Language for Transformations), который используется для описания преобразований структуры документов. XSLT позволяет трансформировать одни документы в другие, пользуясь простыми наборами правил преобразования.
Технология XSLT – это технология, позволяющая преобразовывать (трансформировать) XML-документ в другой XML-документ; в HTML-документ для отображения Web-браузером; в документы иных форматов (WML, RTF, PDF, TEX и т.п.).
Таблица стилей – это XML-документ специального вида (обычно файл с расширением .xsl), содержащий набор правил преобразования исходного XML-документа, написанных на языке XSLT и предназначенных для XSLT-процессора. Когда XSLT-процессор подвергает преобразованию некоторый XML-документ в соответствии с некоторой таблицей стилей, говорят, что таблица стилей применяется к документу.
В первом приближении можно считать, что исходный документ, таблица стилей и конечный документ – все являются XML-документами. XSLT выполняет процесс преобразования, потому что вывод (конечный документ) и ввод (исходный документ) представляют собой объекты одного типа. Это дает прямые выгоды, например, сложное преобразование можно выполнить как ряд простых преобразований, кроме того, используя одну и ту же технологию, можно делать преобразования в любом направлении.
Таблица стилей – это корректный XML-документ. Его корневым элементом является элемент «stylesheet», естественно, принадлежащий пространству имен XSLT.
В корневом элементе объявляется пространство имен XSLT с помощью атрибута «xmlns:xsl», а также версия XSLT с помощью атрибута «version». Из так называемых элементов верхнего уровня, являющихся непосредственными потомками корневого элемента «stylesheet», обязателен хотя бы один элемент – шаблон. Роль шаблонов в преобразовании является ключевой. Таблица стилей должна содержать, по крайней мере, один шаблон; на самом деле их зачастую бывает много. В свою очередь, тело шаблона может содержать:
– поддеревья конечных литеральных элементов, которые непосредственно копируются в выходное дерево;
– элементы-инструкции, выполнение которых процессором приводит к формированию отдельных узлов или целых поддеревьев на основе узлов исходного дерева, которые также помещаются в выходное дерево.