изучение возможностей XML-СУБД Sedna по созданию и

реклама
Лабораторная работа № 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.
1
Основным требованием к 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 является довольно простой – достаточно
скачать дистрибутив СУБД с официального сайта (в виде архива) и развернуть его на
локальной машине. По сути, вся структура СУБД представлена иерархией файлов и
2
директорий такого архива – здесь хранятся как конфигурационные файлы СУБД
(метаданные), так и информация, хранящаяся в базе данных (как правило, эти данные
представлены в директории 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, и может возвращать либо последовательность узлов,
либо последовательность атомарных значений. Последовательности атомарных значений
3
могут быть получены с помощью литералов или функций-конструкторов. В 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», обязателен хотя бы один элемент – шаблон. Роль шаблонов в преобразовании
является ключевой. Таблица стилей должна содержать, по крайней мере, один шаблон; на
самом деле их зачастую бывает много. В свою очередь, тело шаблона может содержать:
– поддеревья конечных литеральных элементов, которые непосредственно копируются в
выходное дерево;
– элементы-инструкции, выполнение которых процессором приводит к формированию
отдельных узлов или целых поддеревьев на основе узлов исходного дерева, которые также
помещаются в выходное дерево.
4. Порядок выполнения работы
А. Создание и заполнение XML-документа
1. Запустить Microsoft Visual Web Developer:
Пуск | Программы | Microsoft Visual Web Developer 2008 Express Edition ►
Start Page – Visual Web Developer 2008 Express Edition
2. Создать новый XML-документ:
File | New File… | Xml File ► ф. XmlFile1.xml
3. Создать корневой элемент Education:
4
– ввести открывающий тег:
<Education>
– ввести закрывающий тег:
</Education>
4. Создать XML-иерархию данных о студентах:
– ввести открывающий тег элемента Students:
<Students>
– ввести открывающий тег первого элемента Student:
<Student>
– до закрывающей угловой скобки в теге Student ввести атрибут stud_ID со значением
s1:
stud_ID="s1"
аналогичным образом создать
● атрибут no_zk со значением "111111";
● атрибут fam со значением "Иванов";
● атрибут im со значением "Иван";
● атрибут ot со значением "Иванович";
– ввести одиночный тег элемента Group с атрибутом grID="g1":
<Group grID="g1"/>
– ввести закрывающий тег первого элемента Student:
</Student>
аналогичным образом создать еще четыре элемента Student.
– ввести закрывающий тег элемента Students:
</Students>
– ввести открывающий тег элемента Groups:
<Groups>
– ввести открывающий тег первого элемента Group:
<Group>
– до закрывающей угловой скобки в теге Group ввести атрибут grID со значением g1:
grID="g1"
аналогичным образом создать атрибут kurs со значением "1" , атрибут gr со значением
"10" и атрибут specID со значением "sp1";
– ввести закрывающий тег первого элемента Group:
</Group>
аналогичным образом создать еще три элемента Group.
– ввести закрывающий тег элемента Groups:
</Groups>
5
– ввести открывающий тег элемента Specialities:
<Specialities>
– ввести открывающий тег первого элемента Spec:
<Spec>
– до закрывающей угловой скобки в теге Spec ввести атрибут specID со значением sp1.
аналогичным образом создать атрибут spec_name со значением "АСОИ":
– ввести закрывающий тег первого элемента Spec:
</Spec>
аналогичным образом создать еще три элемента Spec.
– ввести закрывающий тег элемента Specialities:
</Specialities>
– ввести открывающий тег элемента Subjects:
<Subjects>
– ввести открывающий тег первого элемента Subject:
<Subject>
– до закрывающей угловой скобки в теге Subject ввести атрибут predmID со значением
p1; аналогичным образом создать
● атрибут spec_name со значением "АСОИ";
● атрибут predm_name со значением "БД";
● атрибут cycle со значением "ОПД";
● атрибут hours со значением "80";
– ввести закрывающий тег первого элемента Subject:
</Subject>
аналогичным образом создать еще три элемента Subject.
– ввести закрывающий тег элемента Subjects:
</Subjects>
– ввести открывающий тег элемента Results:
<Results>
– ввести открывающий тег первого элемента Uspev:
<Uspev>
– до закрывающей угловой скобки в теге Uspev ввести атрибут stud со значением s1:
аналогичным образом создать атрибут predm со значением "p1" и атрибут ocenka со
значением "5"
– ввести закрывающий тег первого элемента Uspev:
</ Uspev>
Аналогичным образом создать еще десять элементов Uspev.
– ввести закрывающий тег элемента Results:
6
</Results>
5. Сохранить XML-документ как Edu.xml.
Б. Создание XML-базы данных в Sedna
1. Запустить СУБД Sedna
– открыть командную строку Windows:
Пуск | Выполнить → ф. Запуск программы; Открыть ← cmd
– изменить текущую директорию на D:\sedna\bin
ф. C:\Windows\system32\cmd.exe (далее – просто cmd);
ввести CD D:\sedna\bin; нажать кл. [Enter];
ввести D:; нажать кл. [Enter] → D:\sedna\bin>
– запустить СУБД:
ф. cmd; ввести код: se_gov; нажать кл. [Enter] →
GOVERNOR has been started in the background mode
2. Создать новую базу данных Education:
ф. cmd; ввести код: se_cdb Education нажать кл. [Enter] →
The database 'Education' has been created successfully
3. Запустить базу данных Education:
ф. cmd; ввести код: se_sm Education нажать кл. [Enter] →
SM has been created successfully
4. Создать файл load_data.xquery:
Проводник Windows | директория Sedna/BIN; создать текстовый документ
ввести код:
LOAD "Edu.xml" "education"
сохранить документ как load_data.xquery;
скопировать в эту же директорию файл Edu.xml.
5. Загрузить XML-файл в базу данных
ф. cmd; ввести код: se_term –file load_data.xquery Education;
нажать кл. [Enter] → Bulk load succeed
В. Программирование запросов XQuery в Sedna
1. Запустить инструментальное средство SednaAdmin:
Проводник | Локальный диск D | директория sednaadmin-bin-0.1.5 |
директория sednaadmin-bin; запустить файл SednaAdmin.jar → ф. SednaAdmin
2. Соединиться с базой данных Education
ф. SednaAdmin | localhost | education; панель управления |
кн. Connect to running database; ф. Connect to database | Host ← localhost;
Database Name ← education; кн. OK
3. Написать запрос XQuery для извлечения списка всех студентов:
ф. SednaAdmin | localhost | education; ф. Query1 (education); ввести код:
for $x in doc("Edu.xml")/Education/Students/Student
order by $x/@fam
return concat($x/@fam,' ', $x/@im,' ', $x/@ot)
7
кн. Execute → ф. Results | XML → результат на экране
аналогичным образом написать запрос на извлечение списков всего специальностей, групп,
предметов.
4. Написать запрос XQuery для извлечения списка всех студентов с указанием названий
их специальностей:
ф. SednaAdmin | localhost | education; ф. Query1 (education); ввести код:
for $x in doc("Edu.xml")/Education/Students/Student
let $gr:=$x/Group/@grID
let $specID:=for $y in doc("Edu.xml")/Education/Groups/Group[@grID=$gr]
return $y/@specID
let $spec_name:=for $z
in doc("Edu.xml")/Education/Specialities/Spec[@specID=$specID]
return $z/@spec_name
return concat($x/@fam,' ', $x/@im,' ', $x/@ot, ' ', $spec_name)
кн. Execute → ф. Results | XML → результат на экране
5. Написать запрос XQuery для извлечения списка всех студентов с указанием их групп в
формате ФИО (Фамилия, имя, отчество) + Группа (Название специальности – Курс Группа):
ф. SednaAdmin | localhost | education; ф. Query1 (education); ввести код:
for $x in doc("Edu.xml")/Education/Students/Student
let $gr:=$x/Group/@grID
let $specID:=for $y in doc("Edu.xml")/Education/Groups/Group[@grID=$gr]
return $y/@specID
let $kurs:=for $y in doc("Edu.xml")/Education/Groups/Group[@grID=$gr]
return $y/@kurs
let $gr:=for $y in doc("Edu.xml")/Education/Groups/Group[@grID=$gr]
return $y/@gr
let $spec_name:=for $z
in doc("Edu.xml")/Education/Specialities/Spec[@specID=$specID]
return $z/@spec_name
where $spec_name='АСОИ'
return concat('ФИО: ', $x/@fam,' ', $x/@im,' ', $x/@ot, ' Группа: ',
$spec_name,'-',$kurs,$gr)
кн. Execute → ф. Results | XML → результат на экране
5. Написать запрос XQuery для извлечения списка всех студентов определенной
специальности:
ф. SednaAdmin | localhost | education; ф. Query1 (education); ввести код:
for $x in doc("Edu.xml")/Education/Students/Student
let $gr:=$x/Group/@grID
let $specID:=for $y in doc("Edu.xml")/Education/Groups/Group[@grID=$gr]
return $y/@specID
let $spec_name:=for $z
in doc("Edu.xml")/Education/Specialities/Spec[@specID=$specID]
return $z/@spec_name
where $spec_name='название специальности'
return concat($x/@fam,' ', $x/@im,' ', $x/@ot, ' ', $spec_name)
кн. Execute → ф. Results | XML → результат на экране
аналогичным образом написать запрос для извлечения списка дисциплин заданной кафедры.
8
6. Написать запрос XQuery для извлечения количества студентов определенной
специальности:
ф. SednaAdmin | localhost | education; ф. Query1 (education); ввести код:
count(for $x in doc("Edu.xml")/Education/Students/Student
let $gr:=$x/Group/@grID
let $specID:=for $y in doc("Edu.xml")/Education/Groups/Group[@grID=$gr]
return $y/@specID
let $spec_name:=for $z
in doc("Edu.xml")/Education/Specialities/Spec[@specID=$specID]
return $z/@spec_name
where $spec_name='название специальности'
return concat($x/@fam,' ', $x/@im,' ', $x/@ot, ' ', $spec_name))
кн. Execute → ф. Results | XML → результат на экране
7. Написать запрос XQuery для извлечения списка всех студентов первого курса:
ф. SednaAdmin | localhost | education; ф. Query1 (education); ввести код:
ф. SednaAdmin | localhost | education; ф. Query1 (education); ввести код:
for $x in doc("Edu.xml")/Education/Students/Student
let $gr:=$x/Group/@grID
let $specID:=for $y in doc("Edu.xml")/Education/Groups/Group[@grID=$gr]
return $y/@specID
let $kurs:=for $y in doc("Edu.xml")/Education/Groups/Group[@grID=$gr]
return $y/@kurs
where $kurs='1'
кн. Execute → ф. Results | XML → результат на экране
8. Написать запрос XQuery для извлечения количества студентов первого курса:
ф. SednaAdmin | localhost | education; ф. Query1 (education); ввести код:
count(for $x in doc("Edu.xml")/Education/Students/Student
let $gr:=$x/Group/@grID
let $specID:=for $y in doc("Edu.xml")/Education/Groups/Group[@grID=$gr]
return $y/@specID
let $kurs:=for $y in doc("Edu.xml")/Education/Groups/Group[@grID=$gr]
return $y/@kurs
where $kurs='1')
кн. Execute → ф. Results | XML → результат на экране
9. Написать запрос XQuery для извлечения списка всех студентов, которые учатся только
на 4 и 5:
ф. SednaAdmin | localhost | education; ф. Query1 (education); ввести код:
for $x in doc("Edu.xml")/Education/Students/Student
let $st:=$x/@stud_ID
let $otl:=count(for $z
in doc("Edu.xml")/Education/Results/USpev[@stud=$st][@ocenka='5']
return $z/@stud)
let $hor:=count(for $z
in doc("Edu.xml")/Education/Results/USpev[@stud=$st][@ocenka='4']
return $z/@stud)
let $ud:=count(for $z
in doc("Edu.xml")/Education/Results/USpev[@stud=$st][@ocenka='3']
return $z/@stud)
9
let $neud:=count(for $z
in doc("Edu.xml")/Education/Results/USpev[@stud=$st][@ocenka='2']
return $z/@stud)
where ($otl > 0 or $hor > 0) and ($ud=0 and $neud=0)
return concat($x/@fam,' ', $x/@im,' ', $x/@ot, $otl)
кн. Execute → ф. Results | XML → результат на экране
10. Написать запрос XQuery для извлечения количества студентов, которые учатся
только на 4 и 5:
ф. SednaAdmin | localhost | education; ф. Query1 (education); ввести код:
count(for $x in doc("Edu.xml")/Education/Students/Student
let $st:=$x/@stud_ID
let $otl:=count(for $z
in doc("Edu.xml")/Education/Results/USpev[@stud=$st][@ocenka='5']
return $z/@stud)
let $hor:=count(for $z
in doc("Edu.xml")/Education/Results/USpev[@stud=$st][@ocenka='4']
return $z/@stud)
let $ud:=count(for $z
in doc("Edu.xml")/Education/Results/USpev[@stud=$st][@ocenka='3']
return $z/@stud)
let $neud:=count(for $z
in doc("Edu.xml")/Education/Results/USpev[@stud=$st][@ocenka='2']
return $z/@stud)
where ($otl > 0 or $hor > 0) and ($ud=0 and $neud=0)
return concat($x/@fam,' ', $x/@im,' ', $x/@ot, $otl))
кн. Execute → ф. Results | XML → результат на экране
11. Написать запрос XQuery для извлечения списка студентов, изучавших заданную
дисциплину:
ф. SednaAdmin | localhost | education; ф. Query1 (education); ввести код:
for $x in doc("Edu.xml")/Education/Students/Student
let $st:=$x/@stud_ID
let $predm:=for $y
in doc("Edu.xml")/Education/Subjects/Subject[@predm_name='дисциплина']
return $y/@predmID
let $count:=count(for $z
in doc("Edu.xml")/Education/Results/USpev[@stud=$st][@predm=$predm]
return $z)
where $count > 0
return concat($x/@fam,' ', $x/@im,' ', $x/@ot)
кн. Execute → ф. Results | XML → результат на экране
аналогичным образом написать запрос для извлечения списка студентов, не изучавших
заданную дисциплину.
Г. Программирование таблиц стилей XSL
1. Создать текстовый документ и внести в него код:
<?xml version="1.0" encoding="windows-1251"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<HTML><HEAD><TITLE>Лабораторная работа 7</TITLE></HEAD>
10
<BODY><H2>Информация о студентах</H2>
<TABLE border="1" width="60%">
<TR>
<TH width="10%">Код</TH>
<TH width="20%">Зачетная книжка</TH>
<TH width="40%">ФИО</TH>
<TH width="30%">Группа</TH>
</TR>
<xsl:for-each select="//Student">
<xsl:variable name="x" select="Group/@grID"/>
<xsl:variable
name="gr" select="../../Groups/Group[@grID=$x]/@gr"/>
<TR align="center"><TD width="10%">
<xsl:value-of select="@stud_ID"/>
</TD>
<TD width="20%">
<xsl:value-of select="@no_zk"/>
</TD><TD width="40%">
<xsl:value-of select="concat(@fam,' ',@im,'.'m@ot,'.')"/>
</TD>
<TD width="30%"><xsl:value-of select="$gr"/></TD>
</TR>
</xsl:for-each>
</TABLE></BODY></HTML>
</xsl:template></xsl:stylesheet>
2. Сохранить документ как stylesheet.xsl.
3. Подключить таблицу стилей к документу XML.
Открыть документ в текстовом редакторе; после строки
<?xml version="1.0" encoding="windows-1251"?>
ввести код
<?xml-stylesheet type="text/xsl" href="stylesheet.xsl"?>
4. Проверить работоспособность таблицы стилей открытием XML-файла в браузере.
5. Контрольные вопросы
1. К какому классу СУБД относится Sedna?
2. Каковы особенности Sedna?
3. Что такое XQuery?
4. Что такое XSLT?
5. Для чего используется Sedna Admin?
6. Содержание и оформление отчета
Отчет должен содержать:
– титульный лист, название и цель работы;
– скриншоты результатов работы с СУБД Sedna;
– выводы по работе.
11
Скачать