Лабораторная работа 2 xsl-трансформация xml-данных в web-приложениях



Скачать 345.86 Kb.
Дата06.08.2016
Размер345.86 Kb.
ТипЛабораторная работа
ЛАБОРАТОРНАЯ РАБОТА 2

XSL-ТРАНСФОРМАЦИЯ XML-ДАННЫХ

В WEB-ПРИЛОЖЕНИЯХ
1. Цель работы

Целью работы является изучение технологий XSL-трансформации XML-данных, полученных из базы данных, в HTML-страницы Web-приложений.



2. Задачи

Задачами лабораторной работы являются овладение навыками извлечения информации из базы данных в XML-формате, построения XSL-таблиц стилей трансформации, программной реализации XSL-трансформации на основе классов серверных сценариев Web-приложений.



3. Теоретическая часть

Данные в формате XML. Технология XML – простой, стандартный способ взаимообмена структурированными текстовыми данными между компьютерными программами. Рост ее популярности связан отчасти с тем, что для прочтения XML-документов или для их создания достаточно простого текстового редактора, но это никак не умаляет основного назначения XML – служить средством связи между программными системами. В этом плане XML характеризуется следующими преимуществами:

– отделение данных от их представления. Это возможность отделять информацию от деталей способа ее отображения на конкретном устройстве.

– передача данных между приложениями. Возможность передавать информацию между платформами и программами, не тратя при этом средства на интеграцию специально заказываемого программного обеспечения.

– независимость от платформы. Возможность однозначно интерпретировать XML-данные на разных программных и аппаратных платформах.



XSL-трансформация. XML-данные, получаемые в итоге людьми или приложением, очень редко будут использоваться прямо в том виде, в каком они поступают: они сначала должны быть преобразованы в нечто другое.

Если данные предназначены для человека, то это «нечто» может быть документом, который можно отобразить или напечатать: например, HTML-файлом, PDF-файлом или даже звуковым файлом. Конвертирование данных XML в HTML для отображения – вероятно, наиболее частое применение XSLT сегодня. Получив данные в формате HTML их легко отобразить с помощью любого браузера.

Для передачи данных между разными приложениями необходимо преобразовать их из модели, используемой одним приложением, в модель, используемую другим. Для преобразования XML-данных чаще всего используется технология XSLT (eXtensible Stylesheet Language for Transformations, расширяемый язык стилей для преобразований).

XSLT представляет собой мощную прикладную XML-технологию, которая может применяться везде, где есть два документа разной структуры. XSLT предоставляет высокоуровневые средства для манипуляции данными, которые хранятся в виде XML. Хотя XSLT не позиционируется как язык запросов для XML, можно смело сравнить его с языком SQL, в котором определяются запросы к реляционным базам данных.

XSLT-обработка включает обычно две стадии:

– первая стадия – структурное преобразование, при котором структура данных исходного XML-документа конвертируется в структуру, отражающую желаемый вывод;

– вторая стадия – форматирование, при котором новая структура выводится в желаемом формате, например, HTML или PDF.

XSL-таблицы стилей. Название «таблица стилей» присвоено документу, который определяет преобразование. Название отражает сущность процесса, который происходит при самом общем типе преобразования, выполняемого с помощью XSLT, а именно: определить стиль отображения информации в исходном документе, причем так, чтобы конечный документ содержал информацию исходного документа, дополненную информацией, которая управляет способом его отображения на некотором устройстве вывода.

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



Структура таблицы стилей. Таблица стилей представляет собой корректный XML-документ, дерево XML-элементов. Корнем XSL-дерева является элемент stylesheet, также принадлежащий пространству имен XSLT.

В таблице стилей должен быть представлен хотя бы один шаблон (элемент template). В простейшем случае – это шаблон обработки корневого элемента, который «сработает» всегда, независимо от структуры исходных XML-данных.

Каждый шаблон содержит инструкции преобразования (XSL-инструкции) и разметку, которая должна быть без изменения скопирована в результирующий документ (конечные литеральные элементы).

В лабораторной работе используются два вида XSL-инструкций:

– xsl:value-of. Это XSL-инструкция, позволяющая получить значение элемента или атрибута исходного XML-документа. Элемент xsl:value-of содержит атрибут select, значение которого ­– это XPath-адрес элемента или атрибута, значение которого нужно получить.

– xsl:for-each. Это XSL-инструкция, формирующая цикл по множеству элементов исходного XML-документа. В качестве значения атрибута select элемента xsl:for-each указывается XPath-адрес множества XML-элементов исходного XML-документа.

В качестве конечных литеральных элементов чаще всего используется HTML-разметка, на основе которой формируется полученный в результате трансформации документ, отображаемый в окне браузера пользователя.

Базы данных и XML. На практике часто возникает задача извлечения информации из базы данных в формате XML. Проще всего эта задача решается в СУБД корпорации Microsoft (например, SQL Server). Здесь для получения данных в формате XML традиционный Transact-SQL запрос SELECT дополняется опцией FOR XML. В других СУБД такие запросы обычно не поддерживаются. Для получения XML-данных используются либо дополнительные библиотеки, либо формирование DOM-объектов «вручную». Так или иначе получение XML-данных выполняется на уровне сценариев.

Запросы SELECTFOR XML. В Microsoft SQL Server для получения данных в формате XML используется инструкция SELECT…FOR XML. С помощью этой инструкции возвращаемый набор данных можно было отформатировать в XML в трех различных режимах – RAW, AUTO и EXPLICIT.

Самый простой режим выборки данных в XML-формате – использование опции RAW. Для каждой строки результата создается элемент с именем row по умолчанию. Этот элемент можно переименовать, к результату выборки можно добавить корневой элемент и т. д.

В качестве примера рассмотрим использование инструкции SELECT…FOR XML RAW для получения информации о факультетах из таблицы «Факультет»:

SELECT ID, name

FROM Faculty

FOR XML RAW

Результат выборки представляет собой следующие XML-элементы:



Добавим корневой элемент Факультеты и переименуем каждый элемент row в элемент Факультет:

SELECT ID, name

FROM Faculty

FOR XML RAW('Факультет'), root('Факультет')

Результат выборки будет иметь следующий вид:



<Факультеты>

<Факультет ID="ФИРТ" name="информатики и робототехники"/>

<Факультет ID="ФАД" name="авиационных двигателей"/>

Режим FOR XML AUTO позволяет формировать простейший XML-фрагмент с вложенными элементами. Имена элементов и уровень вложенности генерируется на основе названия строк и столбцов таблиц и их связей в базах данных.

Для задания корневого элемента результата (независимо от используемой опции SELECT…FOR XML) используется конструкция ROOT, в качестве параметра передается имя корневого элемента.

В качестве примера рассмотрим предыдущий запрос на выборку данных о факультетах, но воспользуемся режимом FOR XML AUTO:

SELECT ID, name

FROM Faculty

FOR XML AUTO

Результат запроса будет иметь следующий вид:





Усложним запрос, добавив в него данные о специальностях в составе факультетов:

SELECT Faculty.ID, Faculty.name, Speciality.ID, Speciality.name

FROM Faculty, Speciality

WHERE Faculty.ID = Speciality.faculty

FOR XML AUTO

В результате выполнения запроса получим следующий результат:















Для формирования простых вложенных выборок в режиме FOR XML используется опция TYPE. Например, тот же результат, что и в предыдущем примере можно получить с помощью следующего запроса:

select

(select


rtrim(Speciality.ID) as ID, rtrim(Speciality.name) as name from Speciality

where Faculty.ID=Speciality.faculty for xml auto, type), rtrim(Faculty.ID) as ID,

rtrim(Faculty.name) as name from Faculty for xml auto, type, root('University')

Запрос SELECT содержит вложенный запрос на извлечение данных о специальностях для каждого отдельного результата по запросу о факультетах. И сам запрос, и подзапрос в нем возвращают XML-данные. При этом результат вложенного запроса (специальности) становится вложенным элементом результата основного запроса (факультеты).

В некоторых ситуациях возможностей форматов FOR XML RAW и FOR XML AUTO недостаточно. Обычно такие ситуации возникают тогда, когда необходимо создать документ XML в заранее определенном формате. В этом случае можно использовать формат FOR XML EXPLICIT, который обладает наибольшей гибкостью при формировании XML-результата.

Например, чтобы получить такой результат



<Факультет ID = 'ФИРТ'>

     <Название>информатики и робототехники

     <Специальность ID = 'АСОИ'>автом. сист. обр. инф. и упр.

     <Специальность ID = 'ПИЭ'>прикл. инф. в эк.



можно использовать следующий EXPLICIT-запрос:

SELECT 1 as Tag,

NULL as Parent,

Faculty.ID as [Факультьет!1!ID],

NULL as [Специальность!2!ID],

NULL as [Специальность!2!Назв]

FROM Faculty

UNION ALL

SELECT 2 as Tag,

1 as Parent,

Faculty.ID,

Speciality.ID,

Speciality.name

FROM Faculty, Speciality

WHERE Faculty.ID = Speciality.faculty

ORDER BY [Факультет!1!ID],[Специальность!2!Название]

FOR XML EXPLICIT

Подробное рассмотрение запросов SELECT…FOR XML выходит за пределы рассмотрения в данной лабораторной работе.

DOM-объекты. Технология XML DOM предоставляет простой и эффективный способ для работы с XML-данными. В основе DOM лежит одноименная спецификация консорциума W3C (Word Wide Web Consortium), в которой определены основные классы DOM-объектов, их свойства и методы. Наличие таких единых правил позволяет использовать XML DOM любым языком программирования и любой операционной системой.

DOM представляет собой дерево, отображающее структуру XML-документа (рис. 1). Программист может выполнять любые манипуляции с таким деревом – реализовывать навигацию по его структуре, добавлять, модифицировать или удалять определенные элементы. Все изменения, выполняемые в DOM-дереве, отражаются в XML-документе.



Рисунок 1 – Структура дерева DOM-объектов

Корневым элементом DOM-дерева является элемент documentElement. Он содержит один или несколько дочерних элементов (узлов), представляющих ветви дерева. Выделяют следующие виды DOM-узлов: элементы (element), атрибуты (attribute), текстовые узлы (text), комментарии (comment), инструкции по обработке (processing instruction).



XSL-трансформация в клиентских и серверных сценариях. На уровне сценариев (независимо от того, клиентские они или серверные) Web-приложений XSL-трансформация представляет собой применение XSL-таблиц стилей к экземплярам объектов XML DOM (рис. 2). Использование DOM-объектов обусловлено тем, что XSL-преобразование ориентировано на трансформацию данных в XML-формате.

Рисунок 2 – Схема применения XSL-трансформации в Web-сценариях
Использование DOM позволит выполнять ее независимо от того, как эти данные были получены – из файла, в виде потока данных, в результате запроса к базе данных и пр. Результат преобразования можно также представить разными способами – вывести на экран клиентского браузера (при трансформации XML → HTML), использовать для дальнейшей обработки (если используется трансформация вида XML → XML) или сохранить в файл.

XSL-трансформация в ASP.NET-сценариях. Для выполнения XSL-трансформации в сценариях ASP.NET используются два основных класса. Класс XmlDocument предоставляет программную реализацию DOM-объектов. В коде сценария экземпляр класса XmlDocument создается с помощью соответствующего конструктора:

XmlDocument dom = new XmlDocument();

Для того чтобы загрузить в экземпляр DOM-объекта XML-данные используются методы Load (при заполнении объекта данными из потока) и LoadXML (когда источником XML-данных является физический файл):

dom.Load(название потока данных);

dom.LoadXML(имя XML-файла);

Второй базовый класс трансформации в ASP.NET – XslTransform. Для задания его экземпляра также используется одноименный конструктор:

XslTransform xsl = new XslTransform();

Загрузка XSL-стилей в экземпляр класса XslTransform выполняется, как правило, из XSL-файла, физически размещенного на сервере. Для этого в ASP.NET используется метод Load, в качестве параметра которому передается путь к соответствующему файлу:

xsl.Load(Путь к файлу);

Собственно трансформация выполняется с помощью метода Transform класса XslTransform. В качестве параметров этому методу передаются DOM-объект, к которому применяется преобразование, дополнительные настройки трансформации и форма представления результата преобразования:

xsl.Transform(dom, null, Response.Output);

XSL-трансформация в PHP-сценариях. В PHP-сценариях базовыми классами XSL-трансформации являются классы DOM-объектов и XSL-спецификаций.

Для создания нового DOM-объекта в PHP используется класс DomDocument. При вызове конструктора этого класса ему можно передать два параметра – версию используемой XML-спецификации и кодировку XML-данных, например,

$xml = new DOMDocument('1.0');

Для создания нового элемента в дереве DOM используется метод createElement класса DomDocument. В качестве параметра этой функции передается имя соответствующего элемента. Так, к примеру, чтобы создать новый элемент с именем Root в экземпляре DOM-объекта с именем xml можно использовать следующий код:

$root = $xml->createElement('Root');

Однако элемент недостаточно просто создать – нужно еще добавить его в дерево элементов DOM-объекта. Для этого в PHP (как, впрочем, и в других языках программирования сценариев) используется метод appendChild класса DomDocument:

$xml->appendChild($root);

Для дополнения созданного XML-элемента атрибутами используется метод setAttributes класса Element. В качестве параметров этому методу передаются название и значение атрибута:

$elem->setAttribute($name,$value);

Для применения трансформации в PHP используется класс XSLTProcessor:

$xslt = new XSLTProcessor();

Для представления таблицы стилей используется DOM-объект (класс DomDocument), в который с помощью метода Load подгружается XSL-файл спецификации:

$xsl = new DomDocument;

$xsl->load(XSL-файл);

В класс XSLTProcessor таблица стилей передается из DOM-объекта с помощью функции importStylesheet:

$xslt->importStylesheet($xsl);

Для представления результатов трансформации используются либо метод transformToXML (для представления XML или HTML-результата), либо transformToDoc (для сохранения результата трансформации в файл). Например, для отображения в окне браузера результата трансформации используется метод transformToXML, в качестве параметра которому передается DOM-объект, к которому применяется преобразование:

echo $xslt->transformToXML($xml);



XSL-трансформация в JSP-сценариях. В JSP основной библиотекой для работы с XML-данными является библиотека javax.xml.parsers. В состав этого пакета входит несколько классов, два из которых в лабораторной работе используются:

– DocumentBuilder – это DOM-парсер, который создает объект класса org.w3c.dom.Document;

– DocumentBuilderFactory – класс, который создает DOM-парсеры.

Для того, чтобы создать DOM-объект, нужно воспользоваться классом Document, экземпляр которого можно получить следующим образом:

DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();

DocumentBuilder db = dbf.newDocumentBuilder();

Document doc = db.newDocument();

Создание XML-элемента можно выполнить так:

Element elem = doc.createElement("elem");

Для создания XML-атрибута можно использовать такую программную конструкцию:

elem.setAttribute("name", "value");

С помощью метода appendChild можно добавить узел в элемент, например, так:

elem.appendChild(elem2);

doc.appendChild(elem);

Для выполнения XSL-трансформации используется класс TransformerFactory. С его помощью создается экземпляр класса transformer, в который загружается XSL-таблица стилей:

TransformerFactory tFactory = TransformerFactory.newInstance();

Transformer transformer = tFactory.newTransformer(xsl);

Непосредственно преобразование выполняется с помощью метода transform с двумя параметрами – DOM-объект, к которому применяется преобразование, и объект или поток, куда должен быть записан результат трансформации:

transformer.transform(new DOMSource(doc), result);
4. Порядок выполнения работы

Предварительные замечания

В рамках лабораторной работы должно быть разработано Web-приложение «Успеваемость студентов», состоящее из двух Web-страниц (аналогичное тому, что было разработано в первой лабораторной работе). Каждая страница генерируется с помощью применения XSL-трансформации к XML-данным, полученным из базы данных «University».

Выполнение лабораторной работы должно быть осуществлено в два этапа:

– программирование XSL-таблиц стилей для генерации страниц Web-приложения;

– программирование серверных сценариев для получения XML-данных из базы данных и применения к ним стилей XSL-трансформации.
4.1. Программирование XSL-таблиц стилей
1. Создание XSL-спецификации трансформации Default.xsl

1.1.Создать новый файл в текстовом редакторе «Блокнот»

1.2. Сохранить файл под именем Default.xsl

2. Открыть файл Default.xsl в текстовом редакторе (или в любом другом редакторе)

3. Создать инструкцию по обработке XML:

4. Создать корневой элемент stylesheet

4.1. Создать открывающий тег stylesheet

4.2. Задать используемую версию XSL-спецификации. Для этого в открывающем теге xsl:stylesheet создать атрибут version со значением «1.0»:

version="1.0"

4.3. Задать пространство имен с URL «http://www.w3.org/1999/XSL/Transform» и префиксом xsl. Для этого создать в открывающем теге xsl:stylesheet следующий атрибут:

xmlns:xsl="http://www.w3.org/1999/XSL/Transform"

4.4. Создать закрывающий тег элемента stylesheet:



5. Создать шаблон обработки корневого элемента.

5.1. Внутри элемента xsl:stylesheet (между его открывающим и закрывающим тегами) ввести открывающий тег элемента template с префиксом xsl:

5.2. Указать, что шаблон обрабатывает корень XML-дерева. Для этого ввести в открывающий тег элемента template атрибут match со значением «/»:

match="/"

5.3. Создать закрывающий тег элемента template:



6. Задать конечные литеральные элементы HTML-разметки XSL-спецификации. Для этого скопировать все HTML-разметку страницы Default.aspx из лабораторной работы 1 (без подстановки значений из базы данных) между открывающим и закрывающим тегами элемента xsl:template:







Успеваемость студентов































Успеваемость
            студентов






Выбор  

Просмотр






























Факультет



Специальность



Группа










Поделитесь с Вашими друзьями:


База данных защищена авторским правом ©uverenniy.ru 2019
обратиться к администрации

    Главная страница