Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
BDlab / 7__sedna__1_.docx
Скачиваний:
69
Добавлен:
18.03.2015
Размер:
41 Кб
Скачать
☆

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:

– ввести открывающий тег:

<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>

– ввести открывающий тег элемента 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:

</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)

кн. 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 → результат на экране

аналогичным образом написать запрос для извлечения списка дисциплин заданной кафедры.

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)

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>

<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-файла в браузере.

Соседние файлы в папке BDlab