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