4.5.2 Шаблони xslt
XSLT-документ – це XML-документ із кореневим елементом stylesheet. Простором імен для XSLT-документа є http://www.w3.org/1999/XSL/Transform. При перетворенні XSL використовується два дерева. Перше дерево – вихідне. Його вузли відповідають вузлам вихідного XML-документа, що піддається перетворенню. Друге дерево є результатом перетворення. Воно містить вузли, отримані в процесі XSL-перетворення, і є документом, отриманим після перетворення.
Розглянемо перетворення наступного XML-документа в звичайний HTML-документ за допомогою XSLT:
<?xml version = “1.0” ?>
<myMessage>
<message>Welcome to XSLT!</message>
</myMessage>
Створюємо простий XSLT-документ, що містить шаблон для вирішення завдання:
<?xml version = “1.0”?>
<xsl:stylesheet version = “1.0” xmlns:xsl =
“http://www.w3.org/1999/XSL/Transform”>
<xsl:template match = “myMessage”>
<html>
<body><xsl:value-of select = “message”/> </body>
</html>
</xsl:template>
</xsl:stylesheet>
Рядок <xsl:stylesheet version = “1.0” xmlns:xsl =
“http://www.w3.org/1999/XSL/Transform”> містить кореневий елемент XSLT-документа xsl:stylesheet та його атрибути. Атрибут version визначає версію XSLT, що використовується. Визначено префікс простору імен xsl, якому призначений уніфікований ідентифікатор ресурсу “http://www.w3.org/1999/XSL/Transform”.
Рядок <xsl:template match = “myMessage”> містить елемент шаблона template. Цей елемент зіставляє певний вузол XML-документа, використовуючи вираз XPath, заданий в атрибуті match. У цьому випадку зіставляється будь-який елемент myMessage. Рядки
<html>
<body><xsl:value-of select = “message”/></body>
</html>
є вмістом елемента template. Коли у вихідному дереві зустрічається елемент myMessage, в результуюче дерево поміщається вміст елемента template. За допомогою атрибута select елемента value-of і виразу XPath текстовий вміст набору вузлів, повернутий виразом XPath, поміщається в результуюче дерево.
Для виконання перетворення необхідно підключити створений XSLT-документ до вхідного XML-документа:
<?xml version = “1.0” ?>
<?xml:stylesheet type = “text/xsl” href = “intro.xsl”?>
<myMessage>
<message>Welcome to XSLT!</message>
</myMessage>
У рядку <?xml:stylesheet type = “text/xsl” href = “intro.xsl”?> елемент stylesheet використовується для приєднання створеної таблиці стилів до XML-документа. Атрибут type визначає тип файла, що приєднується. Можливі лише два значення: text/xsl, що визначає XSL-документ, і text/css, що визначає CSS-документ. Атрибут href містить уніфікований ідентифікатор ресурсу для файла, що приєднується. Результат перетворення можна побачити на рис. 4.3.
Рисунок 4.3 – Internet Explorer відображує результат XSLT-перетворення
4.5.3 Створення елементів і атрибутів
Розглянемо наступний приклад. XML-документ потрібно перетворити в інший XML-документ.
<?xml version = "1.0"?>
<sports>
<game title = "cricket">
<id>243</id>
<para>
More popular among commonwealth nations.
</para>
</game>
<game title = "baseball">
<id>431</id>
<para>
More popular in America.
</para>
</game>
<game title = "soccer">
<id>123</id>
<para>
Most popular sport in the world.
</para>
</game>
</sports>
Це можна зробити за допомогою такого XSLT-документа:
<?xml version = "1.0"?>
<xsl:stylesheet version = "1.0"
xmlns:xsl = "http://www.w3.org/1999/XSL/Transform">
<xsl:template match = "/">
<xsl:apply-templates/>
</xsl:template>
<xsl:template match = "sports">
<sports>
<xsl:apply-templates/>
</sports>
</xsl:template>
<xsl:template match = "game">
<xsl:element name = "{@title}">
<xsl:attribute name = "id">
<xsl:value-of select = "id"/>
</xsl:attribute>
<comment>
<xsl:value-of select = "para"/>
</comment>
</xsl:element>
</xsl:template>
</xsl:stylesheet>
В рядках
<xsl:template match = “/”>
<xsl: apply-templates/>
</xsl:template>
атрибут match використовується для виділення кореневого елемента XML-документа. “/” зіставляється з кореневим елементом XML-документа. Елемент apply-templates використовується для застосування шаблона XSLT-документа до певних вузлів XML-документа. За замовчуванням елемент apply-templates зіставляє шаблону всі дочірні вузли елемента.
Рядки
<xsl:template match = "sports">
<sports>
<xsl:apply-templates/>
</sports>
</xsl:template>
зіставляються з елементом sports, який виводиться. Ми виводимо елемент sports, після чого шаблон застосовується до всіх дочірніх вузлів елемента sports.
Рядок <xsl:element name = “{@title}”> використовується для створення елемента з ім'ям, визначеним в атрибуті name.
Наступні рядки створюють атрибут:
<xsl:attribute name = “id”>
<xsl: value-of select = “id”/>
</xsl:attribute>
Елемент attribute може міститись лише всередині елемента element. Атрибут name визначає ім'я атрибута. Результатом буде створення атрибута id для нового елемента.
За допомогою розглянутого XSLT-документа вихідний XML-документ перетворюється в новий XML-документ з назвами видів спорту як елементи, а не атрибути:
<?xml version = "1.0"?>
<sports>
<cricket id="243">
<comment>
More popular among commonwealth nations.
</comment>
</cricket>
<baseball id="431">
<comment>
More popular in America.
</comment>
</baseball>
<soccer id="123">
<comment>
Most popular sport in the world.
</comment>
</game>
</sports>
4.5.4 Обхід набору вузлів і впорядкування
XSLT дозволяє обходити набір вузлів і впорядковувати вузли.
Елемент for-each застосовує вміст елемента до кожного вузла, який зіставляється зі значенням атрибута select. Наприклад, у рядку
<xsl: for-each select = “group/student”>
зіставлення здійснюється з усіма елементами student елемента group.
Рядок <xsl:sort select = “@num” order = “ascending”/>
визначає елемент sort, що впорядковує вузли, обрані елементом for-each за значенням атрибута select у порядку, заданому значенням атрибута order. Атрибут order може приймати значення ascending (за зростанням) і descending (за убуванням). У цьому прикладі відбувається впорядкування вузлів за значенням атрибута num за зростанням.
4.5.5 Умовна обробка
XSLT дозволяє також виконувати умовну обробку, використовуючи умовні вирази.
Елемент choose використовується для множинного вибору і може мати дочірні елементи when і otherwise.
Наприклад, у рядках
<xsl:choose>
<xsl:when test = “@time > '0700' and @time < '1200'”>
Ранок (<xsl: value-of select = “@time”/>) :
</xsl:when>
<xsl:otherwise>
Весь день:
</xsl:otherwise>
</xsl:choose>
є умова when в елементі choose. Атрибут test містить умову, яка підлягає перевірці (у цьому випадку час із 7 до 12). Перевірка в елементі when завершується після одержання першого значення true. Елемент otherwise є необов'язковим, але якщо є, то має бути єдиним, і розташовуватися після всіх елементів when. Цей елемент застосовується, якщо жодна з умов в елементах when не буде правдивою.
Для однократної перевірки умови використовується оператор if, наприклад:
<xsl:if test = “error”>
Помилка!!!
</xsl:if>
4.5.6 Змінні в XSLT
Для обробки інформації XSLT дозволяє використовувати змінні. У наступному прикладі
<xsl:variable name = “totalpages”
select = “sum(book/chapters/*/@pages)”/>
створюється елемент variable з атрибутом name, рівним totalpages, для зберігання числа сторінок у книзі. Атрибут select має значення sum(book/chapters/*/@pages), що є виразом, який підсумовує значення атрибута pages елемента chapters. Для виведення значення змінної totalpages використовується елемент value-of:
<xsl: value-of select = “$totalpages”/>.
Знак $ вказує на те, що використовується посилання на змінну. Елемент value-of може також використовувати значення елементів і атрибутів.
- Міністерство освіти і науки україни
- 61166 Харків, просп. Леніна, 14 зміст
- 1 Мета і задачі дисципліни
- 1.1 Мета дисципліни
- 1.2 Програма знань і вмінь
- 2 Робоча програма дисципліни
- 2.1 Лекційні заняття
- 2.2 Лабораторні роботи
- 2.3 Практичні заняття
- 2.4 Самостійна робота студента
- 2.5 Тематика контрольних робіт
- 2.6 Тематика розрахункових завдань
- 2.7 Рейтингова оцінка з дисципліни
- 2.8 Рекомендована література
- 3 Характеристика підручників і навчальних посібників
- 4 Методичні вказівки з вивчення дисципліни
- 4.1 Html (HyperText Markup Language)
- 4.2 Css (cascading style sheets)
- 4.2.2 Селектори
- 4.2.4 Властивості css
- 4.3 Xml (extensible markup language)
- 4.3.7 Простори імен
- 4.4 Dtd (Document Type Definition)
- 4.5 Xslt (Extensible Stylesheet Language Transformations)
- 4.5.2 Шаблони xslt
- 5 Контрольні запитання та завдання за основними темами
- Тема 1. Html (HyperText Markup Language)
- Тема 2. Css (cascading style sheets)
- Тема 3. Xml (extensible markup language)
- Тема 4. Dtd (Document Type Definition)
- Тема 5. Xslt (Extensible Stylesheet Language Transformations)
- 6 Основні рекомендації з організації самостійної роботи
- 8 Приклади розв'язання типових задач
- Атрибут background. Даний атрибут задає фонове зображення для таблиць. Застосуємо до тегів table і td. Його значенням є url файла з фоновим зображенням.