XSLT
Шрифт:
Функции расширения
В XSLT 1.0 W3C определил способ отделения функций расширения от встроенных функций, установив требование, чтобы для обращения к функциям расширения использовались имена с заданным пространством имен, как в
В рабочем проекту XSLT 1.1 на функции расширения были наложены некоторые дополнительные ограничения:
• функции расширения должны работать как встроенные функции;
• для Java и ECMAScript
• механизм должен позволять естественное расширение для поддержки других языков в будущем;
• для реализации переносимой привязки функции расширения для любого конкретного языка не должен быть нужен процессор;
• процессор, реализующий функции расширения для любого языка, чья привязка обеспечивается спецификацией XSLT, должен соответствовать этим языкам;
• должны быть разрешены как встроенные реализации функций расширения, так и внешние;
• в функции расширения должно быть возможно передавать аргументы всех типов данных XPath;
• функции расширения должны иметь возможность возвращать в качестве результата все типы данных XPath;
• функции расширения должны иметь возможность создавать и возвращать наборы узлов фрагментов XML;
• должна иметься возможность включать или импортировать функции расширения из другой таблицы стилей;
• при неоднозначности выбора реализации функции расширения процессор должен выдать ошибку и прекратить работу;
• процессор должен преобразовывать аргументы способом, согласованным со встроенными функциями;
• функции расширения должны быть способны вернуть объект любого типа основного языка;
• должна существовать возможность передать в функцию расширения объект любого типа основного языка.
Вплоть до недавнего времени процессоры XSLT полностью самостоятельно определяли способ реализации функций расширения. Например, в Saxon и Xalan существует возможность непосредственно выполнять код Java, если определить пространство имен, задающее класс Java в качестве последней части URI. Я поступил так в следующем случае, определив пространство имен
После этого я могу воспользоваться такими функциями класса
Результат
применения этой функции приведён на рис. 5.3.Рис. 5.3. Применение функции расширения
Вот работоспособная схема и заодно веский повод включить Java в XSLT. Тем не менее, в XSLT 1.1 был представлен элемент
Элемент <xsl:script>
Элемент