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

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

Жанры

Технология XSLT

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

Шрифт:

This page was generated on 08.10.01 12:11.

Естественно, семантика элементов расширения не ограничивается простым копированием в выходящий документ заданных значений. Элементы расширения могут выполнять гораздо более сложные функции, ограниченные, пожалуй, лишь только воображением разработчика. При этом элементы расширения на удивление удачно вписываются в структуру самого преобразования, ведь принцип их использования не сильно отличается от принципа использования самих элементов XSLT.

Функция element-available

boolean element-available(string)

Функция

element-available
совершенно аналогична функции
function-available
: она служит для проверки доступности в преобразовании того или иного элемента. Строковый параметр
element-available
задает расширенное имя элемента; функция возвращает
true
, если элемент с таким именем доступен,
false
— если нет.

Пример

Предположим, что преобразование, созданное нами для процессора Xalan с использованием элемента расширения

ext:date
, будет выполняться на каком-либо другом процессоре. В этом случае велика вероятность того, что вследствие несовместимости механизмов расширений это преобразование завершится ошибкой — "чужой" процессор просто не сможет выполнить элемент
ext:date.

Во избежание этого, мы можем использовать функцию

element-available
для проверки доступности элемента
ext:date
до его вызова.

Листинг 10.21. Преобразование, использующее функцию element-available

<xsl:stylesheet

 version="1.0"

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

 xmlns:ext="xalan://de.fzi.xslt.ext"

 extension-element-prefixes="ext">

 <xsl:template match="/">

<result>

<xsl:if test="element-available('ext:date')">

This page was generated at <ext:date pattern="HH:mm"/> on <ext:date pattern="dd/MM/yyyy"/>.

</xsl:if>

</result>

 </xsl:template>

</xsl:stylesheet>

Элемент xsl:fallback

Другим способом обработки исключительных ситуаций, связанных с невозможностью выполнить тот или иной элемент преобразования, является использование элемента

xsl:fallback
. Синтаксическая конструкция этого элемента следующая:

<xsl:fallback>

 <!-- Содержимое: шаблон -->

</xsl:fallback>

Элемент

xsl:fallback
включается в "критическую" инструкцию, то есть в элемент, который может быть неизвестен процессору. В случае, если критическая инструкция отрабатывается нормально, содержимое
xsl:fallback
попросту игнорируется. Иначе, если процессор в силу некоторых причин не может выполнить критическую инструкцию, вместо нее он будет выполнять содержимое дочернего элемента
xsl:fallback
.

Пример

На тот случай, если процессор не сможет выполнить наш элемент расширения

ext:date
, мы можем "подстраховать" его следующим образом:

<ext:date pattern="HH:mm">

 <xsl:fallback>unknown time</xsl:fallback>

</ext:date>

В этом случае шаблон

<xsl:template match="/">

 <!-- ...
– ->

 This page was generated at <ext:date pattern="HH:yy">

<xsl:fallback>unknown time</xsl:fallback>

 </ext:date>.

</xsl:template>

в случае невозможности выполнить

ext:date
выведет

This page was generated at unknown time.

Заметим, что

xsl:fallback
применим не только для обработки исключительных ситуаций, связанных с элементами расширения. Наборы доступных процессору элементов XSLT будут также меняться от версии к версии, и
xsl:fallback
вполне пригодится для обеспечения обратной совместимости. Например, если в версии XSLT 2.0 будет определен элемент
xsl:for-each-group
, то
xsl:fallback
можно использовать при создании альтернативного варианта для процессоров, которые еще не поддерживают новую версию:

<xsl:for-each-group select="item" group-by="@number">

 <!-- ...
– ->

 <xsl:fallback>

<xsl:for-each select="item[generate-id(.)=

generate-id(key('item', @number))]">

<!-- ...
– ->

</xsl:for-each>

 </xsl:fallback>

</xsl:for-each>

Инициатива EXSLT

Функции и элементы расширения с лихвой восполняют ограниченность языков XSLT и XPath, предоставляя возможности обычных императивных языков там, где они необходимы. Между тем, как показывает практика, задачи, которые приходится решать при помощи расширений, как правило, совершенно стандартны — например, разобранная выше функция nodeset, так или иначе реализована почти во всех XSLT-процессорах.

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

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

Сержант. Назад в СССР. Книга 4

Гаусс Максим
4. Второй шанс
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Сержант. Назад в СССР. Книга 4

Вернуть невесту. Ловушка для попаданки

Ардова Алиса
1. Вернуть невесту
Любовные романы:
любовно-фантастические романы
8.49
рейтинг книги
Вернуть невесту. Ловушка для попаданки

Сирота

Шмаков Алексей Семенович
1. Светлая Тьма
Фантастика:
юмористическое фэнтези
городское фэнтези
аниме
5.00
рейтинг книги
Сирота

Восход. Солнцев. Книга XI

Скабер Артемий
11. Голос Бога
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Восход. Солнцев. Книга XI

Кодекс Крови. Книга ХVII

Борзых М.
17. РОС: Кодекс Крови
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Кодекс Крови. Книга ХVII

Неправильный лекарь. Том 2

Измайлов Сергей
2. Неправильный лекарь
Фантастика:
городское фэнтези
аниме
фэнтези
попаданцы
5.00
рейтинг книги
Неправильный лекарь. Том 2

Держать удар

Иванов Дмитрий
11. Девяностые
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Держать удар

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

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

Некурящий. Трилогия

Федотов Антон Сергеевич
Некурящий
Фантастика:
фэнтези
боевая фантастика
попаданцы
5.00
рейтинг книги
Некурящий. Трилогия

Тайные поручения

Билик Дмитрий Александрович
6. Бедовый
Фантастика:
юмористическое фэнтези
городское фэнтези
мистика
5.00
рейтинг книги
Тайные поручения

Эволюционер из трущоб

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

Страж Кодекса. Книга VI

Романов Илья Николаевич
6. КО: Страж Кодекса
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Страж Кодекса. Книга VI

Ликвидатор на службе Империи. Том 2

Бор Жорж
2. Ликвидатор на службе Империи
Фантастика:
городское фэнтези
аниме
5.00
рейтинг книги
Ликвидатор на службе Империи. Том 2

Восход. Солнцев. Книга VII

Скабер Артемий
7. Голос Бога
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Восход. Солнцев. Книга VII