Технология XSLT
Шрифт:
xmlns:rot="java:de.fzi.xslt.rot"
в Xalan — как:
xmlns:rot="xalan://de.fzi.xslt.rot"
в Oracle XSLT Processor — как:
xmlns:rot="http://www.oracle.com/XSL/Transform/java/de.fzi.xslt.rot"
При этом сами вызовы во всех трех случаях будут одинаковыми:
rot:X($x, $y, $angle)
для метода X или
rot:Y($x, $y, $angle)
для метода Y.
Функция function-available
При
java:de.fzi.xslt.rot
вместо xalan://de.fzi.xslt.rot
). Результатом обращения к неподдерживаемому расширению будет, естественно, ошибка. XSLT позволяет избежать подобного рода ошибок путем предварительной проверки наличия заданной функции расширения. Для этой цели служит стандартная функция
function-available
(от англ. function is available — функция доступна) boolean function-available(string)
Функция
function-available
принимает на вход строку, представляющую имя функции и возвращает true
, если эта функция может быть вызвана и false
— если нет. Строковый аргумент этой функции представляет расширенное имя функции, он должен соответствовать продукции
QName
, то есть иметь вид имя
или префикс:имя
. В первом случае function-available
проверяет, реализована ли в данном процессоре стандартная функция с таким именем, например function-available('concat')
скорее всего, возвратит true
. В случае, если аргумент
function-available
имеет вид префикс:имя
, функция function-available
проверяет доступность указанной функции расширения. Например, для того, чтобы проверить, может ли в данном контексте быть вызвана функция rot:X
, необходимо вычислить выражение function-available('rot:X')
В данном случае
true
будет означать, что функция rot:X
может быть вызвана, false
— что функция в силу каких-то причин недоступна. Функция
function-available
может помочь в создании преобразований, которые используют расширения, но при этом в некоторой степени сохраняют переносимость между различными процессорами. Достаточно написать несколько вариантов вызова функции расширения для каждого из процессоров, на которых преобразование должно работать, а затем
Пример
Для того чтобы обеспечить работоспособность расширения, реализованного классом
de.fzi.xslt.rot
в наиболее распространенных XSLT-процессорах, написанных на Java (как-то: Saxon, Xalan и Oracle XSLT Processor), прежде всего необходимо объявить соответствующие пространства имен: <xsl:stylesheet
version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns="http://www.w3.org/2000/svg"
xmlns:saxon="java:de.fzi.xslt.rot"
xmlns:xalan="xalan://de.fzi.xslt.rot"
xmlns:oracle="http://www.oracle.com/XSL/Transform/java/de.fzi.xslt.rot"
exclude-result-prefixes="saxon xalan oracle">
...
Префикс
saxon
соответствует интерфейсу расширений в XSLT-процессоре Saxon, префикс xalan
— процессору Xalan и префикс oracle
— Oracle XSLT Processor. Теперь осталось только найти поддерживаемый вариант расширения и произвести соответствующий вызов.
Листинг 10.9
<xsl:choose>
<xsl:when test="function-available('saxon:X') ">
<line
x1="{saxon:X($x1, $y1, $alpha) + 100}"
y1="{saxon:Y($x1, $y1, $alpha) + 100}"
x2="{saxon:X($x2, $y2, $alpha) + 100}"
y2="{saxon:Y($x2, $y2, $alpha) + 100}"/>
</xsl:when>
<xsl:when test="function-available('xalan:X')">
<line
x1="{xalan:X($x1, $y1, $alpha) + 100}"
y1="{xalan:Y($x1, $y1, $alpha) + 100}"
x2="{xalan:X($x2, $y2, $alpha) + 100}"
y2="{xalan:Y($x2, $y2, $alpha) + 100}"/>
</xsl:when>
<xsl:when test="function-available('oracle:X')">
<line
x1="{oracle:X($x1, $y1, $alpha) + 100}"
y1="{oracle:Y($x1, $y1, $alpha) + 100}"
x2="{oracle:X($x2, $y2, $alpha) + 100}"
y2="{oracle:Y($x2, $y2, $alpha) + 100}"/>
</xsl:when>
<xsl:otherwise>
<xsl:message terminate="yes">
<xsl:text>Necessary extension function is not available.</xsl:text>
<xsl:text>
Supported processors are:</xsl:text>
<xsl:text>
Saxon, Xalan, Oracle XSLT Processor.</xsl:text>
Поделиться:
Популярные книги
Я Гордый. Часть 4
4. Стальные яйца
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Купец из будущего 2
2. Третий Рим
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Крестоносец
7. Помещик
Фантастика:
героическая фантастика
попаданцы
альтернативная история
5.00
рейтинг книги
Ненаглядная жена его светлости
Любовные романы:
любовно-фантастические романы
6.23
рейтинг книги
Третий. Том 4
Вселенная EVE Online
Фантастика:
боевая фантастика
космическая фантастика
попаданцы
5.00
рейтинг книги
Как я строил магическую империю 5
5. Как я строил магическую империю
Фантастика:
попаданцы
аниме
фантастика: прочее
фэнтези
5.00
рейтинг книги
Князь Барсов
1. РОС. На мягких лапах
Фантастика:
попаданцы
аниме
5.00
рейтинг книги
Совершенный 2.0: Освобождение. Часть 2
7. Совершенный
Фантастика:
боевая фантастика
рпг
5.00
рейтинг книги
На границе империй. Том 9. Часть 4
17. Фортуна дама переменчивая
Фантастика:
космическая фантастика
попаданцы
5.00
рейтинг книги
Один на миллион. Трилогия
Один на миллион
Фантастика:
боевая фантастика
8.95
рейтинг книги
Тринадцатый V
5. Видящий смерть
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Личный аптекарь императора. Том 3
3. Личный аптекарь императора
Фантастика:
городское фэнтези
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Наследник
3. Династия
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Газлайтер. Том 14
14. История Телепата
Фантастика:
попаданцы
аниме
фэнтези
5.00