Чтение онлайн

на главную - закладки

Жанры

Технология XSLT

Валиков Алексей Н.

Шрифт:

 <chapter>Text 1</chapter>

 <chapter>Text 2</chapter>

 <chapter>Text 3</chapter>

</book>

мы можем выделить элементы

chapter
в отдельные файлы, а в самом выходящем документе создать оглавление со ссылками.

Листинг 12.1. Преобразование, использующее элемент xsl:document

<xsl:stylesheet

 version="1.1"

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

 <xsl:template match="book">

<xsl:copy>

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

</xsl:copy>

 </xsl:template>

 <xsl:template match="chapter">

<chapter href="#"/>

<xsl:document href="#">

<xsl:copy-of select="."/>

</xsl:document>

 </xsl:template>

</xsl:stylesheet>

Результатом

этого преобразования будут следующие четыре документа.

Листинг 12.2. Главный выходящий документ преобразования

<book>

 <chapter href="#"/>

 <chapter href="#"/>

 <chapter href="#"/>

</book>

Листинг 12.3. Документ chapter1.xml

<chapter>Text 1</chapter>

Листинг 12.4. Документ chapter2.xml

<chapter>Text 2</chapter>

Листинг 12.5. Документ chapter3.xml

<chapter>Text 3</chapter>

Дополнительные возможности по расширению

В XSLT 1.1 был введен элемент

xsl:script
, предоставляющий дополнительные возможности для создания и использования функций расширения. При помощи
xsl:script
функции расширения могут быть явным образом определены в самом преобразовании.

Пример

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

Листинг 12.6. Преобразование, включающее функцию расширения

<xsl:stylesheet

 version="1.1"

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

 xmlns:js="javascript:code">

 <xsl:script language="javascript" implements-prefix="js">

function iff(arg1, arg2, arg3) {

if (arg1) {

return arg2;

} else {

return arg3;

}

}

 </xsl:script>

 ...

</xsl:stylesheet>

Атрибут

implements-prefix
(англ. implements prefix —
реализует префикс) связывает определяемую функцию с некоторым пространством имен (как мы отмечали ранее, все функции расширения должны принадлежать ненулевым пространствам имен). При вызове функций из этого пространства имен в XPath-выражениях, процессор будет искать их определения в элементах
xsl:script
, которые реализуют соответствующий префикс.

Атрибут

language
определяет язык программирования, в котором написано расширение. Очевидно, язык влияет на то, как будет выполняться расширение — например, должен ли процессор интерпретировать содержимое
xsl:script
или следует загрузить внешний Java-класс. Естественно, не следует ожидать, что любой процессор сможет выполнять расширения, написанные на произвольных языках программирования — как правило, разработчики XSLT-средств в документации к своим продуктам оговаривают, какие языки расширения они поддерживают. Как следствие, преобразование, использующее расширения, написанные на "непонятном" процессору языке, либо не будут выполнены вообще, либо будут выполнены некорректно.

Помимо двух обязательных атрибутов

implements-prefix
и
language
, в элемент
xsl:script
могут быть включены атрибуты
src
и
archive
, которые указывают физическое местоположение кода расширения.

"Внешние" типы данных

Четыре основных типа данных языка XPath (булевый, численный, строковый типы и множества узлов) в первой версии XSLT были расширены типом результирующего фрагмента дерева. В некотором смысле, фрагменты деревьев были "внешним" типом по отношению к XPath, но, тем не менее, многие из функций базовой библиотеки с успехом с этим типом работали.

В XSLT 1.1 была впервые представлена поддержка произвольных внешних типов данных. Функции расширения могут возвращать и оперировать любыми типами данных. Например, в XSLT-процессорах, написанных на Java, в случае использования расширений в качестве значений часто используются произвольные классы.

Пример

Форматирование текущей даты и времени, которое было продемонстрировано в главе 10 элементом

ext:date
, может быть переписано при помощи функций расширения следующим образом.

Листинг 12.7. Использование внешних типов данных в преобразовании

<xsl:stylesheet

 version="1.1"

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

 xmlns:Date="java:java.util.Date"

 xmlns:SimpleDateFormat="java.text.SimpleDateFormat">

 <xsl:variable name="df" select="SimpleDateFormat:new('HH:mm')"/>

 <xsl:variable name="now" select="Date:new"/>

Поделиться:
Популярные книги

Я – Орк. Том 4

Лисицин Евгений
4. Я — Орк
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Я – Орк. Том 4

Бастард Императора. Том 8

Орлов Андрей Юрьевич
8. Бастард Императора
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Бастард Императора. Том 8

Дорога на юг

Коган Мстислав Константинович
8. Игра не для слабых
Фантастика:
попаданцы
рпг
фэнтези
5.00
рейтинг книги
Дорога на юг

Кодекс Охотника. Книга XVII

Винокуров Юрий
17. Кодекс Охотника
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Кодекс Охотника. Книга XVII

Мама для крошки-дракошки, или жена Хранителя Севера

Рыжехвост Светлана
Любовные романы:
любовно-фантастические романы
7.50
рейтинг книги
Мама для крошки-дракошки, или жена Хранителя Севера

Эволюционер из трущоб. Том 12

Панарин Антон
12. Эволюционер из трущоб
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Эволюционер из трущоб. Том 12

Законы Рода. Том 5

Андрей Мельник
5. Граф Берестьев
Фантастика:
юмористическое фэнтези
аниме
5.00
рейтинг книги
Законы Рода. Том 5

Темный Лекарь 11

Токсик Саша
11. Темный Лекарь
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Темный Лекарь 11

Барон Дубов 7

Карелин Сергей Витальевич
7. Его Дубейшество
Фантастика:
юмористическое фэнтези
аниме
сказочная фантастика
фэнтези
5.00
рейтинг книги
Барон Дубов 7

Ваше Сиятельство 3

Моури Эрли
3. Ваше Сиятельство
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Ваше Сиятельство 3

Инвестиго, из медика в маги

Рэд Илья
1. Инвестиго
Фантастика:
фэнтези
городское фэнтези
попаданцы
5.00
рейтинг книги
Инвестиго, из медика в маги

Бестужев. Служба Государевой Безопасности. Книга третья

Измайлов Сергей
3. Граф Бестужев
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Бестужев. Служба Государевой Безопасности. Книга третья

Попаданка в деле, или Ваш любимый доктор

Марей Соня
1. Попаданка в деле, или Ваш любимый доктор
Фантастика:
фэнтези
5.50
рейтинг книги
Попаданка в деле, или Ваш любимый доктор

Роза ветров

Кас Маркус
6. Артефактор
Фантастика:
городское фэнтези
аниме
фэнтези
5.00
рейтинг книги
Роза ветров