Вход/Регистрация
Технология 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

При использовании функций расширения всегда есть вероятность того, что это расширение в силу каких-либо причин поддерживаться данным процессором не будет. Чаще всего это случается, во-первых, когда процессор просто физически не в состоянии вызвать эту функцию (например, процессор, написанный на C++, вряд ли будет содержать средства для выполнения Java-кода), во-вторых, когда расширение недоступно (например, процессор не в состоянии найти указанный Java-класс или динамическую библиотеку), и в-третьих, когда пространство имен объявлено неверно (например, с URI

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')">

  • Читать дальше
  • 1
  • ...
  • 206
  • 207
  • 208
  • 209
  • 210
  • 211
  • 212
  • 213
  • 214
  • 215
  • 216
  • ...

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

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