Распечатать страницу
Главная \ База готовых работ \ Готовые работы по компьютерным дисциплинам \ Современные интернет-технологии \ 1676. Лабораторна робота №4, Розробка та трансформація XML-сторінок

Лабораторна робота №4, Розробка та трансформація XML-сторінок

« Назад

Код роботи: 1676

Вид роботи: Лабораторна робота

Предмет: Сучасні інтернет-технології

Тема: №4, Розробка та трансформація XML-сторінок

Кількість сторінок: 1

Дата виконання: 2016

Мова написання: українська

Ціна: 200 грн (за програму)

Мета лабораторної роботи: Навчитися розробляти XML-сторін­ки та задавати їх стиль представлення за допомогою XSL-сторінок.

Порядок виконання:

1. За допомогою звичайного текстового редактора, або одного з популярних XML-редакторів створити XML-сторінку для віртуальної організації.

2. Створити таблицю стилів XSLT для документу XML (знову ж таки, можна скористатися як звичайним текстовим редактором, так і спеціальним редактором).

3. Забезпечити перетворення XML-документа на основі таблиці стилів XSLT в HTML-документ.

4. Захистити роботу перед викладачем.

Приклад та інструкції до виконання:

1. Створення XML-сторінки.

Наведемо приклад XML-сторінки, яка може використовуватися на сайті брокера віртуальної організації з продажу авіаквитків — це сторінка для виведення інформації про авіарейси з певного аеропорту в певне місто, зформована на основі запиту інформації від різних авіакомпаній (у даному випадку про рейси з Києва в Цюрих). Текст XML-сторінки подано в табл. 2.4.

Таблиця 2.4

ТЕКСТ XML-СТОРІНКИ REISS.XML

Б1676, 1

Зазначимо, що на XML може бути створений повністю весь сайт віртуальної організації, що надасть можливість за допомогою різних таблиць стилів XSL представляти його у різних форматах — XML, WAP тощо.

2. Створення таблиці стилів XSLT

Приклад XSL-сторінки подано в табл. 2.5.

Таблиця 2.5

ТЕКСТ XSL-СТОРІНКИ REISS.XSL

Б1676, 2

Як бачимо, дана таблиця передбачає виведення кожного знайденого рейсу в окремому рядку таблички, текст заголовків клітинок таблиці виводився один раз.

Мова трансформацій XSLT є фактично мовою програмування. Вона має оператори — вибору окремих вузлів XML-документу, переупорядкування вузлів та виведення вузлів. Для інтерпретації операторів використовуються спеціальні процесори.

Для опису операторів мови (правил, шаблонів, патернів) XSLT використовується XML. Кореневим елементом XSLT-документа є або елемент stylesheet, або transform, що знаходяться в просторі імен http://www.w3.org/1999/XSL/Transform. За домовленістю, цей простір імен відображається в префіксі xsl, але можна вибрати й інший префікс на свій розсуд.

Розглянемо деякі основні оператори мови XSLT.

xsl:template — правила-шаблони — найважливіша частина таблиць стилів XSLT. Саме вони зв’язують визначений вихід з визначеним входом. Кожен елемент xsl:template має атрибут match, він виділяє набір вузлів вихідного документа, на котрі діє даний шаблон.

Шаблон може містити текст, що у незмінному виді виводиться у вихідний документ, а також XSLT-інструкції, що копіюють дані з вхідного XML-документа у вихідний. Наведемо для прикладу шаблон, що діє на кореневий вузол вихідного дерева:

<xsl:template match=«/»>

<html>

<head>

</head>

<body>

</body>

</html>

</xsl:template>

Коли XSLT-процесор починає зчитувати вихідний документ, перший вузол, з яким він зіштовхується — це кореневий вузол. Наведене правило відноситься до кореневого вузла й у ньому XSLT-процесору дається вказівка вивести текст, що відповідає структурі HTML-документа.

Іноді потрібно застосувати шаблон одночасно до декількох типів елементів. За допомогою зірочки (*) замість імені елемента в атрибуті match можна вказати відповідність всім елементам. Наприклад: <xsl:template match=«*»>.

Подвійний слеш // вказує на всіх нащадків елемента, незалежно від їхньої глибини.

Селектор іd() використовується, щоб застосувати визначений стиль до окремого елемента, не торкаючись всіх інших елементів цього типу. Значення ІD вказується в одинарних лапках.

Знак @ вказує на атрибути і відбирає вузли по іменах атрибутів: потрібно просто перед ім’ям атрибута, який потрібно відібрати, поставити знак @.

Існують також інші шаблони, детально з якими можна ознайомитись у специфікації.

xsl:apply-templates — дає вказівку процесору обробляти дочір­ні вузли кореневого вузла (порівнювати кожен дочірній елемент вихідного елемента з іншими шаблонами в таблиці стилів і, якщо відповідність виявлена, виводити шаблон для відповідного вузла). Шаблон вузла, відповідність з яким виявлено, теж може містити елементи xsl:apply-templates для пошуку відповідностей з дочірніми вузлами вже цього вузла.

Щоб відібрати не всі дочірні вузли, а лише деякий їх набір, необхідно використовувати атрибут select = «патерн».

xsl:value-of — виявляє значення деякого елемента (зазвичай, на основі даних вихідного документа) і копіює отриманий результат у вихідний документ. Атрибут select елемента xsl:value-of визначає, яке саме значення береться. Елемент xsl:value-of варто використовувати тільки в тих випадках, коли відомо, значення якого саме вузла береться. Якщо ж може бути обрана множина пунктів, тоді буде обраний лише перший з них.

xsl:for-each — обробляє по черзі кожен елемент, обраний атрибутом select. Додаткові шаблони в даному випадку не вимагаються.

xsl:element — вставляє у вихідний документ елемент. Ім’я елемента задається шаблоном значення атрибута в атрибуті name елемента xsl:element. Вміст елемента виводиться із вмісту елемента xsl:element, що може включати в себе додаткові інструкції xsl:attrіbute, xsl:processіng-іnstructіon і xsl:comment (усі вони будуть обговорюватися нижче) для вставки відповідних конструкцій.

xsl:attrіbute — визначає ім’я і значення атрибута і вставляє їх у вихідний потік. Кожен елемент xsl:attrіbute є дочірнім елементом елемента xsl:element чи буквального елемента.

xsl:attrіbute-set — дає можливість задати один чи кілька атрибутів як членів набору атрибутів — це робиться на верхньому рівні таблиці стилів, а потім можна включати в елементи цей набір атрибутів за допомогою атрибута xsl:use-attrіbute-sets.

xsl:processіng-іnstructіon — поміщає у вихідному документі процесуальну інструкцію. Ціль (target) процесуальної інструкції задається необхідним атрибутом name.

xsl:comment — вставляє у вихідний документ коментар. У ньо­го немає атрибутів, а міститься текст потрібного коментаря.

xsl:sort —сортує вихідні елементи в порядку, що відрізняється від того, у якому вони йдуть у вихідному документі. Елемент xsl:sort повинний бути дочірнім елементом елементів xsl:apply-templates чи xsl:for-each. Атрибут select елемента xsl:sort задає ключ, використовуваний для сортування елементів, що виходять у результаті роботи інструкцій xsl:apply-templates чи xsl:for-each. За замовчуванням сортування ведеться в алфавітному порядку ключів. Якщо в даному елементі xsl:apply-templates чи xsl:for-each присутні кілька елементів xsl:sort, тоді елементи сортуються спочатку по першому ключу, потім по другому ключу і так далі. Якщо два елементи при цих обставинах виявляються еквівалентними, вони виводяться в тому порядку, у якому йдуть у вихідному документі.

xsl:call-template — входить у вміст правила-шаблона. У ньому необхідний аргумент name, що визначає ім’я визиваного шаблона. При обробці елемент xsl:call-template заміняється вмістом елемента xsl:template з тим же ім’ям.

xsl:іf — надає простий механізм для зміни виходу на основі патерна. Атрибут test цього елемента містить вираз, що оцінюється як булівське значення. Якщо вираз має значення true, виводиться вміст елемента xsl:іf.

xsl:choose — вибирає один з декількох можливих виходів залежно від певних умов. Кожна умова і зв’язаний з ним шаблон виходу задається дочірнім елементом xsl:when. Атрибут test елементів xsl:when містить XPath-вираз, що має булівське значення. Якщо виконується багато умов відразу, активується тільки перший варіант, для якого умова виконується. Якщо не виконується жодна умова, активується шаблон у дочірньому елементі xsl: otherwіse.

xsl:іmport — це елемент верхнього рівня, його атрибут href задає URІ імпортованої таблиці стилів. Елементи xsl:іmport повинні йти до будь-яких інших елементів верхнього рівня в кореневому елементі xsl:stylesheet.

xsl:іnclude — це елемент верхнього рівня, що копіює в поточну таблицю стилів іншу таблицю стилів на те місце, де він сам знаходиться. (Точніше кажучи, він копіює в поточний документ зміст елементів xsl-stylesheet чи xsl:transform зовнішньої таблиці стилів.) Його атрибут href задає URІ таблиці стилів, що включається. Елемент xsl:іnclude може розташовуватися на будь-якому місці верхнього рівня після останнього наявного в таблиці стилів елемента xsl:іmport. На відміну від правил, імпортованих елементом xsl:іmport, правила, що включаються елементом xsl:іnclude, не мають переваги над правилами основної таблиці стилів. З погляду XSLT-процесора між правилами основної таблиці стилів і включених правил немає ніякої різниці.

xsl:output — дозволяє змінити метод виведення (за замовчуванням XSLT-процесор використовує метод виведення XML, якщо він не знайде, що кореневим елементом вихідного документа є елемент HTML — у цьому випадку буде використовуватися метод HTML). Атрибут method цього елемента xsl:output задає метод виведення і зазвичай має одне з трьох значень:

- xml

- html

- text

Перетворювачі можуть підтримувати й інші значення, але поки підтримуються тільки ці три. Наприклад, щоб на виході одержувати чистий правильний HTML, у якому порожні теги закриті, знак «менше» замінений посиланням на сутність, і так далі, на верхньому рівні таблиці стилів потрібно використовувати наступ­ний елемент xsl:output:

<xsl:output method=«xml»/>

Щоб одержати на виході звичайний HTML, навіть якщо не використовується кореневий елемент html, вам потрібно помістити на верхній рівень таблиці стилів інший елемент xsl:output:

<xsl:output method=«html»/>.

3. Перетворення XML-документа на основі таблиці стилів XSLT у HTML-документ

Слід відмітити, що існує три основних підходи до перетворення XML-документів на основі XSLT в інші формати (наприклад, в HTML):

1) Перетворення в броузері — для цього XML-документ та зв’язана з ним таблиця XSLT відправляється в броузер, який фор­мує вигляд документу відповідно із таблицею стилів та відображає користувачеві. Такий підхід можливий, наприклад, на основі використання броузера Internet Explorer 5.0/6.0. Проте в даному броузері використані ранні пропозиції по XSLT, які не співпадають з версією, затвердженою в якості стандарту.

2) Перетворення на Web-сервері — сервер зі встановленим спеціальним програмним забезпеченням типу IBM AlphaWorks XML Enabler та ін. перетворює XML-документ на основі таблиці стилів XSLТ у потрібний формат і лише після цього відправляє його користувачеві. Такий підхід є досконалішим ніж перший, оскільки не орієнтований лише на певні типи броузерів. Проте він вимагає купівлі спеціального програмного забезпечення, тому ми його розглядати не будемо.

3) Перетворення спеціальною програмою (типу SAXON, Xalan, Sablotron) — XML-документ перетворюється у потрібний вигляд і лише після цього передається серверу. З огляду на безкоштовність таких програм і сумісність з популярними броузерами і серверами даний підхід уявляється найбільш доцільним.

Наведемо приклад реалізації першого підходу. Для того, щоб відобразити в Internet Explorer 5.0 сторінку reiss.xml, подану в табл. 2.4, XSLT-таблиця reiss1.xsl повинна мати вигляд, як у табл. 2.6. А в сам файл reiss.xml необхідно додати такий другий рядок:

<?xml-stylesheet type=«text/xsl» href=«reiss1.xsl»?>

Таблиця 2.6

REISS1.XSL — ТАБЛИЦЯ СТИЛІВ ЛИШЕ ДЛЯ INTERNET EXPLORER 5.0

Б1676, 3

Обидві сторінки розміщуємо на сервері. Після виклику у броузері Internet Explorer 5.0 сторінки reiss.xml отримаємо результат, представлений на рис. 1.

Б1676, Рис. 1 - Результат відображення XML-сторінки в IE5.0

Рис. 1 - Результат відображення XML-сторінки в IE5.0

Для того, щоб замінити стару версію XML-парсеру та XSLT-процесора, необхідно скачати з сайту Microsoft та запустити програму xmllinst.exe. (Але, звичайно ж, не всі клієнти-відвідувачі сайту будуть це робити).

Є надія, що в недалекому майбутньому броузери будуть «розуміти» мову стилів краще, ніж IE на сьогодні.

Третій підхід легко реалізувати, наприклад, за допомогою програми Instant SAXON, яку можна безкоштовно переписати з http://saxon.sourceforge.net/.

Для того, щоб відобразити файл reiss.xml за допомогою таблиці стилів, досить набрати reiss.xsl у командному рядку:

Saxon-o reiss.html reis.xml reis.xsl

Запустити програму можна також з Java-аплета. Для цього необхідно включити в текст html-сторінки аплет:

<applet

name=«xslControl»

code=«com.icl.saxon.XSLTProcessorApplet.class»

archive=«../../saxon.jar»

height=«0»

width»0»>

<param name=«documentURL» value=«reiss.xml»/>

<param name=«styleURL» value=«reiss.xsl»/>

</applet>

А також запустити трансформацію в тілі документу, наприклад:

<body onLoad=«target.innerHTML=document.xslControl.getHTMLText()»>

<div id=«target»></div>

</body>

За допомогою методів xslControl.setDocumentURL(string) та xslControl.setStyleURL(string) можна задавати джерело та таблицю стилів динамічно.

Можна реалізувати також третій підхід, використовуючи процесор Sablotron в PHP.

При цьому, якщо використовується програмний комплекс «Денвер-2», необхідно переписати з сайту http://www.denwer.ru/dis/PHP4 пакет розширення програмного комплексу, до складу якого входять всі необхідні для виконання лабораторної роботи бібліотеки.

Після встановлення пакету розширення необхідно розкоментувати розширення php_xslt.dll у файлі /usr/local/php/php.ini. А також переконатися в наявності необхідних бібліотек: expat.dll, sablot.dll, iconv.dll.

Для прикладу, наведемо програму, яка аналізує тип пристрою, що запитує інформацію — комп’ютер чи мобільний телефон — і відповідно обирає таблицю XSL для представлення інформації — табл. 2.8. Програмою використовуються файли reiss.xml (табл. 2.4), reiss.xsl (табл. 2.5), reissw.xsl (табл. 2.7). Результат роботи програми подано на рис. 2.

Таблиця 2.7

REISSW.XSL — ТАБЛИЦЯ СТИЛІВ ДЛЯ МОБІЛЬНИХ ТЕЛЕФОНІВ

Б1676, 4

Закінчення табл. 2.7

Б1676, 5

Таблиця 2.8

TRANSFORM.PHP — ПРОГРАМА ВИБОРУ ТАБЛИЦЬ СТИЛІВ І ПЕРЕТВОРЕННЯ XML-ФАЙЛУ

Б1676, 6

Закінчення табл. 2.8

Б1676, 7  

Б1676, Рис. 2 - Результат обробки reiss.xml за допомогою бібліотеки PHP

Рис. 2 - Результат обробки reiss.xml за допомогою бібліотеки PHP