Лабораторна робота №2.3
«Розробка та трансформація XML-сторінок»
Мета лабораторної роботи: Навчитися розробляти XML-сторінки та задавати їх стиль представлення за допомогою XSL-сторінок.
Порядок виконання:
- За допомогою звичайного текстового редактора, або одного з популярних XML-редакторів створити XML-сторінку для віртуальної організації.
- Створити таблицю стилів XSLT для документу XML (знову ж таки, можна скористатися як звичайним текстовим редактором, так і спеціальним редактором).
- Забезпечити перетворення XML-документа на основі таблиці стилів XSLT в HTML-документ.
- Захистити роботу перед викладачем.
Приклад та інструкції до виконання:
1. Створення XML-сторінки.
Наведемо приклад XML-сторінки, яка може використовуватися на сайті брокера віртуальної організації з продажу авіаквитків — це сторінка для виведення інформації про авіарейси з певного аеропорту в певне місто, зформована на основі запиту інформації від різних авіакомпаній (у даному випадку про рейси з Києва в Цюрих). Текст XML-сторінки подано в табл. 2.4.
Таблиця 2.4
ТЕКСТ XML-СТОРІНКИ REISS.XML
<?xml version=«1.0» encoding=«ISO-8859-1»?> |
<spisok> |
<reis> |
<id>137</id> |
<icaofrom>KBP</icaofrom> |
<icaoto>ZRH</icaoto> |
<aкомpany>Юкraine International Airlines</aкомpany> |
<timefrom>20.30</timefrom> |
<timeto>21.45</timeto> |
<price>538.60</price> |
</reis> |
<reis> |
<id>4371</id> |
<icaofrom>KBP</icaofrom> |
<icaoto>ZRH</icaoto> |
<aкомpany>Swiss Airlines LTD</aкомpany> |
<timefrom>20.30</timefrom> |
<timeto>21.45</timeto> |
<price>678.70</price> |
</reis> |
<reis> |
<id>111</id> |
<icaofrom>KBP</icaofrom> |
<icaoprom>FHR</icaoprom> |
<icaoto>ZRH</icaoto> |
<aкомpany>Hungary Airlines</aкомpany> |
<timefrom>16.45</timefrom> |
<timeto>20.00</timeto> |
<price>704.80</price> |
</reis> |
</spisok> |
Зазначимо, що на XML може бути створений повністю весь сайт віртуальної організації, що надасть можливість за допомогою різних таблиць стилів XSL представляти його у різних форматах — XML, WAP тощо.
2. Створення таблиці стилів XSLT
Приклад XSL-сторінки подано в табл. 2.5.
Таблиця 2.5
ТЕКСТ XSL-СТОРІНКИ REISS.XSL
<?xml version=«1.0» encoding=«Windows-1251»?> |
<!DOCTYPE xsl:stylesheet> |
<xsl:stylesheet version=«1.0» |
xmlns:xsl=«HTPP://ввв.w3.org/1999/XSL/Transform»> |
<xsl:output method=«html» indent=«yes» encoding=«Windows-1251»/> |
|
<xsl:template match=«/»> |
<xsl:apply-templates/> |
</xsl:template> |
|
<xsl:template match=«spisok»> |
<html> |
<head> |
<title>Результати пошуку</title> |
</head> |
<body> |
<h1>Потрібні Вам рейси:</h1> |
<table cellpadding=«2» cellspacing=«2» border=«1»> |
<tr> <td>Код рейсу</td> |
<td>Авіакомпанія</td> |
<td>Час вильоту</td> |
<td>Час прильоту</td> |
<td>Ціна квитка</td> </tr> |
<xsl:apply-templates select=«reis»/> |
</table> |
</body> |
</html> |
</xsl:template> |
|
<xsl:template match=«reis»> |
<tr> <td><b><xsl:value-of select=«id»/></b></td> |
<td><xsl:value-of select=«aкомpany»/></td> <td> |
<xsl:value-of select=«timefrom»/></td> <td> |
<xsl:value-of select=«timeto»/></td> |
<td><xsl:value-of select=«price»/></td> </tr> |
</xsl:template> |
</xsl:stylesheet> |
Як бачимо, дана таблиця передбачає виведення кожного знайденого рейсу в окремому рядку таблички, текст заголовків клітинок таблиці виводився один раз.
Мова трансформацій XSLT є фактично мовою програмування. Вона має оператори — вибору окремих вузлів XML-документу, переупорядкування вузлів та виведення вузлів. Для інтерпретації операторів використовуються спеціальні процесори.
Для опису операторів мови (правил, шаблонів, патернів) XSLT використовується XML. Кореневим елементом XSLT-документа є або елемент stylesheet, або transform, що знаходяться в просторі імен HTPP://ввв.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-іnstруctіon і xsl:комment (усі вони будуть обговорюватися нижче) для вставки відповідних конструкцій. |