В рабочем проекте XSLT 1.1 для поддержки функций расширения появился новый тип данных — внешний объект (external object). Переменной XSLT, о которой пойдет речь в главе 9, может быть присвоен внешний объект — так же, как и один из четырех типов данных XPath, поддерживаемых в XSLT (строка, число, логическое значение, набор узлов). Внешний объект представляет объект, который создается внешним языком программирования, возвращается функцией расширения и не может быть преобразован
в один из четырех типов данных XPath. Тип данных «
external object
» был добавлен в XSLT для того, чтобы предоставить вам безопасную «оболочку» для таких данных. Пока еще никто не реализовал поддержку внешних объектов, но это ожидается в скором времени.
Элементы расширения
Элементы расширения — это элементы, добавленные в XSLT пользователем или производителем. В рабочем проекте XSLT 1.1 для элементов расширения был установлен ряд правил, и в XSLT 2.0 предполагается более широкая их поддержка.
В рабочем проекте XSLT 1.1 правила определяли, что элементами расширения должны быть определенные пользователем или производителем элементы, не являющиеся элементами верхнего уровня. Они должны принадлежать к пространству имен, которое было определено как пространство имен расширений.
Для определения пространства имен расширений применяется атрибут
extension-element-prefixes
в элементе
<xsl:stylesheet>
, или атрибут
xsl:extension-element-prefixes
в элементе буквального результата или элементе расширения.
Ниже приведен пример. Xalan позволяет вам создать несколько выходных документов при помощи своего элемента расширения
<redirect:write>
. Для того чтобы применить этот элемент, я могу добавить в
planets.xml
элементу документа атрибут
file
, задав имя файла, в который будет отправлен вывод, как
этот момент мне ничто не мешает применить элемент расширения
<redirect:write>
для записи вывода в новый файл (в отличие от указанного в командной строке). Например, для того, чтобы отправить в другой файл отформатированное содержимое элемента
<PLANET>
, я могу получить имя создаваемого файла из атрибута