Главная Обратная связь

Дисциплины:

Архитектура (936)
Биология (6393)
География (744)
История (25)
Компьютеры (1497)
Кулинария (2184)
Культура (3938)
Литература (5778)
Математика (5918)
Медицина (9278)
Механика (2776)
Образование (13883)
Политика (26404)
Правоведение (321)
Психология (56518)
Религия (1833)
Социология (23400)
Спорт (2350)
Строительство (17942)
Технология (5741)
Транспорт (14634)
Физика (1043)
Философия (440)
Финансы (17336)
Химия (4931)
Экология (6055)
Экономика (9200)
Электроника (7621)






Результат выполнения запроса



Использование технологии XML при работе с базами данных

 

ОБЩИЕ СВЕДЕНИЯ

Часть №1. Разработка объектной модели XML-документа. Работа с XML-документами, как источниками данных.

 

ПРИМЕРЫ ВЫПОЛНЕНИЯ ЗАДАНИЙ

а) Пример XML-документа, содержащего данные о подразделениях организации.

Dept.xml

<?xml version="1.0" encoding="windows-1251" ?>

<DEPTS>

<DEPT>

<DEPTNO>10</DEPTNO>

<DNAME>ACCOUNTING</DNAME>

<LOC>NEW YORK</LOC>

</DEPT>

<DEPT>

<DEPTNO>20</DEPTNO>

<DNAME>RESEARCH</DNAME>

<LOC>DALLAS</LOC>

</DEPT>

<DEPT>

<DEPTNO>30</DEPTNO>

<DNAME>SALES</DNAME>

<LOC>CHICAGO</LOC>

</DEPT>

<DEPT>

<DEPTNO>40</DEPTNO>

<DNAME>OPERATIONS</DNAME>

<LOC>BOSTON</LOC>

</DEPT>

</DEPTS>

б) Пример документа XML Schema, описывающего ограничения на структуру XML-документа.

Dept.xsd

<?xml version="1.0" encoding="UTF-8"?>

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"

elementFormDefault="qualified">

 

<xsd:element name="DEPTNO" type="xsd:string"/>

<xsd:element name="DNAME" type="xsd:string"/>

<xsd:element name="LOC" type="xsd:string"/>

<xsd:element name="DEPT" type="dept"/>

<xsd:complexType name="dept">

<xsd:sequence>

<xsd:element ref="DEPTNO" minOccurs="1" maxOccurs="1"/>

<xsd:element ref="DNAME" minOccurs="1" maxOccurs="1"/>

<xsd:element ref="LOC" minOccurs="1" maxOccurs="1"/>

</xsd:sequence>

</xsd:complexType>

<xsd:element name="DEPTS" type="depts"/>

<xsd:complexType name="depts">

<xsd:sequence>

<xsd:element ref="DEPT" minOccurs="1" maxOccurs="unbounded"/>

</xsd:sequence>

</xsd:complexType>

</xsd:schema>

 

в) Подключение XML Schema к XML-документу.

Dept.xml

<?xml version="1.0" encoding="windows-1251" ?>



<DEPTS xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:noNamespaceSchemaLocation="dept.xsd">

<DEPT>

<DEPTNO>10</DEPTNO>

...

 

г) Пример XSL-преобразователя данного XML-документа в HTML-страницу.

Dept.xsl

<?xml version="1.0" encoding="UTF-8"?>

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

 

<xsl:template match="/">

<HTML>

<body>

<h1 align="center">Dept list</h1>

<xsl:apply-templates />

</body>

</HTML>

</xsl:template>

 

<xsl:template match="DEPTS">

<table align="center" border="1" cellspacing="0" cellpadding="0">

<tr>

<td align="center">

<b>DEPTNO</b>

</td>

<td align="center">

<b>DNAME</b>

</td>

<td align="center">

<b>LOC</b>

</td>

</tr>

<xsl:apply-templates select="DEPT" />

</table>

</xsl:template>

 

<xsl:template match="DEPT">

<tr>

<xsl:apply-templates />

</tr>

</xsl:template>

 

<xsl:template match="DEPTNO">

<td>

<xsl:apply-templates />

</td>

</xsl:template>

 

<xsl:template match="DNAME">

<td>

<xsl:apply-templates />

</td>

</xsl:template>

 

<xsl:template match="LOC">

<td>

<xsl:apply-templates />

</td>

</xsl:template>



 

</xsl:stylesheet>

 

д) Объявление XSL-преобразователя в XML-документе.

Dept.xml

<?xml version="1.0" encoding="windows-1251"?>

<?xml-stylesheet type="text/xsl" href="depts.xsl"?>

<DEPTS>

<DEPT>

<DEPTNO>10</DEPTNO>

<DNAME>ACCOUNTING</DNAME>

<LOC>NEW YORK</LOC>

</DEPT>

...

 

е) Результат визуализации XML-документа.

Dept.xml

Часть №2. Формирование XML на основе реляционных данных с использованием функций языка SQL/XML. Хранение XML-документов в базе данных.

 

ТЕОРЕТИЧЕСКИЕ СВЕДЕНИЯ

2.1 Преобразование из табличной реляционной формы в XMLTYPE

Формирование XML-документов на основе реляционных данных осуществляется с использованием следующих функций СУБД Oracle:

- XMLElement;

- XMLAttributes;

- XMLAgg;

- XMLConcat;

- XMLForest;

- XMLPI;

- XMLRoot.

//----------------------------------------------------------------------------------------------------

В данных функциях название элемента XML-документа всегда задается в двойных кавычках.

//----------------------------------------------------------------------------------------------------

 

Функция XMLElement преобразует реляционные данные (например, значение столбца таблицы БД) в элемент XML-документа (для работы с XML-документом используется тип данных XMLType).

 

Функция XMLAttributes используется внутри функции XMLElement и преобразует реляционные данные в атрибут элемента XML-документа.

 

Функция XMLAgg объединяет несколько значений РАЗЛИЧНЫХ ОБЪЕКТОВ, имеющих тип данных XMLType в один экземпляр (применительно к нескольким строкам SELECT-запроса). Применяется в запросах, содержащих групповые и аналитические функции.

 

Функция XMLConcat объединяет несколько значений РАЗЛИЧНЫХ СТОЛБЦОВ, имеющих тип данных XMLType в один экземпляр.

 

Функция XMLForest формирует набор («лес») XML-элементов из заданного набора аргументов.

 

Функция XMLPI генерирует набор инструкций обработки XML-документа (теги

<? … ?>).

 

 

Функция XMLROOT генерирует корневой элемент XML-документа и (тег <? xml ?>).

 

Примеры использования данных функций:

а) генерация элемента XML-документа, значением которого является фамилия сотрудника (для каждого сотрудника отдельный элемент. Элементы относятся к разным объектам XMLType).

SELECT XMLELEMENT("Employee", ename) FROMemp;

 

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

SELECT XMLELEMENT("Employee",

XMLATTRIBUTES(ename AS"Name", empno AS"Number"))

FROMemp;

 

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

SELECT XMLELEMENT("Employee",

XMLATTRIBUTES(empno AS"EMPNO", deptno AS"DEPTNO"), ename)

FROMemp;

 

г) генерация XML-документа, состоящего из двух элементов – имени сотрудника и его зарплаты, для каждого сотрудника, зарплата которого превышает 1900. Два элемента объединены в один документ с использованием функции XMLCONCAT. Для каждого сотрудника генерируется отдельный XML-документ.

SELECT XMLCONCAT(

XMLELEMENT("ename", e.ename),

XMLELEMENT("sal", e.sal)

) AS"Result"

FROMemp e

WHEREe.sal>1900;

 

д) генерация XML-документа, состоящего из 3-х элементов, для каждого из сотрудников. Функция XMLFOREST используется для генерации и объединения сразу нескольких элементов документа.

select XMLFOREST (ename as"Name", sal as"Sal", 'просто текст' as"sss", comm)

fromEmp;

 

е) генерация XML-документа с прологом, в котором указана версия языка XML

SELECT XMLRoot(

XMLFOREST (ename as"Name", sal as"Sal", comm),

VERSION '1.0'

)

fromemp

ж) генерация двух элементов XML-документа для каждого отдела. Каждый из этих элементов относится к разным объектам XMLType. Значением первого элемента является название отдела, атрибутом – номер отдела. Второй элемент представляет собой список сотрудников данного отдела (несколько элементов XML-документа, объединённых в 1 с использованием функции XMLAGG).

В таблице emp 14 строк, но в результате будет выведено только 3 – по одной для каждого отдела. Использование функции XMLAGG позволило объединить строки, относящиеся к одному отделу в одну.

 

SELECT XMLELEMENT("department", XMLATTRIBUTES(deptno AS"no")) dept,

XMLAGG(XMLELEMENT("employee", ename)) employers

FROMemp

GROUP BYdeptno;

 

з) генерация одного XML-документа, содержащего информацию обо всех отделах и их сотрудниках.

В элемент "department" вкладывается несколько объединённых элементов, соответствующих работающим в отделе сотрудникам.

Использование внешней функции XMLAGG позволяет объединить элементы, соответствующие нескольким отделов в один XML-документ.

 

SELECT XMLAGG(

XMLELEMENT("department", XMLATTRIBUTES(deptno AS"no"),

XMLAGG(

XMLELEMENT("employee", ename)

)

)

) depts

FROMemp

GROUP BYdeptno;

 

2.2 Хранение XML-документов

Для отображения XML-документов, на схему базы данных (т.е. для их хранения в БД) существуют следующие стратегии:

– Отображение XML-документа как единого объекта, хранимого в БД (например, большой символьный объект CLOB);

– Отображение XML-документа как единого внешнего объекта, хранимого в файловой системе ОС (с использованием типа данных BFILE, который содержит локаторы внешних объектов в виде пути к файлу);

– Отображение XML-документа как единого объекта, хранимого в БД с использованием специализированного типа данных XMLType. Возможно создание атрибута таблицы, имеющего этот тип данных (объект XMLType является столбцом таблицы) и создание объектной таблицы (таблица содержит только объекты XMLType);

– Отображение элементов XML-документов на объектно-реляционные таблицы и колонки в схеме базы данных.

 

 

ПРИМЕРЫ ВЫПОЛНЕНИЯ ЗАДАНИЙ

 

а) Сгенерировать один XML-документ, содержащий информацию обо всех отделах и их сотрудниках. Документ должен иметь пролог; описание документа (XML Schema), которое будет использовано для его валидации; описание XSLT-преобразователя, используемого для его визуализации (преобразования в HTML).

 

SELECTXMLRoot(

XMLCONCAT(

XMLPI(NAME"xml-stylesheet", 'type="text/xsl" href="dept.xsl"'),

XMLElement("departments",

XMLAttributes('http://www.w3.org/2001/XMLSchema' AS"xmlns:xsi",

'dept.xsd' AS"xsi:nonamespaceSchemaLocation"),

XMLAGG(

XMLELEMENT("department", XMLATTRIBUTES(deptno AS"no"),

XMLAGG(XMLELEMENT("employee", ename))

)

)

)

), VERSION '1.0') as"test"

FROMemp

GROUP BYdeptno;

 

Результат выполнения запроса

<?xml version="1.0"?>

<?xml-stylesheet type="text/xsl" href="dept.xsl"?>

<departments xmlns:xsi="http://www.w3.org/2001/XMLSchema"

xsi:nonamespaceSchemaLocation="dept.xsd">

<department no="10">

<employee>CLARK</employee>

<employee>KING</employee>

<employee>MILLER</employee>

</department>

<department no="20">

<employee>SMITH</employee>

<employee>FORD</employee>

<employee>ADAMS</employee>

<employee>SCOTT</employee>

<employee>JONES</employee>

</department>

<department no="30">

<employee>ALLEN</employee>

<employee>BLAKE</employee>

<employee>MARTIN</employee>

<employee>TURNER</employee>

<employee>JAMES</employee>

<employee>WARD</employee>

</department>

</departments>

ПОРЯДОК ВЫПОЛНЕНИЯ РАБОТЫ

 

Задания к лабораторной работе выполняется применительно к определённой предметной области.


Эта страница нарушает авторские права

allrefrs.ru - 2019 год. Все права принадлежат их авторам!