Расширения
В xt реализован стандартный метод вызова Java-функций расширения (если быть до конца откровенными, Кларк фактически и придумал этот "стандартный" способ). Функции реализуются в Java-классах, которые затем подключаются при помощи URI пространств имен.
Сверх этого, xt также реализует несколько дополнительных функций для операций над множествами (xt:node-set
, xt:intersection
и xt:difference
) и дополнительный элемент xt:document
, который позволяет выводить результат преобразования сразу в несколько выходящих файлов. Позже эта же концепция была реализована в некоторых других процессорах и перенесена в версию XSLT 1.1.
Библиотека libxslt
Основные характеристики.
□ Платформы: C/Gnome, Perl, Python.
□ Расширения: функции и элементы расширения.
□ Полнота реализации: практически полное соответствие XSLT 1.0.
□ Разработчик: Даниел Вейлард (Daniel Veillard).
□ URL: http://xmlsoft.org/XSLT/.
Наравне с Saxon и xt, библиотека libxslt является еще одним примером того, насколько сильным может быть open-source продукт, даже если он создается, в основном, одним человеком. Библиотека libxslt изначально создавалась для поддержки XSLT-преобразований в проекте Gnome. Для разбора XML, работы с древовидными структурами и вычисления XPath-выражений libxslt использует другую Gnome-библиотеку: libxml. Библиотека libxslt написана практически на чистом ANSI С (языке С стандарта ANSI) и работает на таких платформах, как Linux, Unix и Windows32.
Использование
Прежде всего, как C-библиотеку, libxslt можно подключать к собственным модулям посредством документированного API, а также при помощи разработанных врапперов использовать в Perl и Python-программах. Поскольку по степени совместимости и разработанности libxslt явно превосходит Sablotron, думается, что в скором времени он станет гораздо более популярным.
В libxslt также включена утилита xsltproc
, которая обеспечивает для libxslt интерфейс командной строки:
xsltproc -о result.xml stylesheet.xsl source.xml
В языках Perl и Python libxslt используется при помощи модулей XML::LibXSLT
и libxsltmod
соответственно.
Расширения
Другим преимуществом libxslt по сравнению с Sablotron является возможность использования расширений, причем как в виде функций, так и в виде элементов. Функции и элементы расширения в libxslt оформляются в виде C-функций, затем регистрируются в процессоре перед вызовом и используются в преобразованиях так же, как и в случае с Java — посредством пространств имен.
В дополнение к этому, в libxslt по умолчанию также реализовано множество общепринятых расширений — в частности, многие из функций, предложенных в процессоре Saxon и инициативе EXSLT.
Приложение 2
Краткий справочник элементов и атрибутов XSLT
Обозначения
Ниже перечислены обозначения, используемые в данной книге.
□ attribute
Обязательный атрибут.
□ attribute
Необязательный атрибут.
□ attribute="строка"
Атрибут со строковым параметром.
□ attribute="{строка}"
Атрибут со строковым параметром, значение которого является шаблоном значения атрибута.
□ attribute="yes" | "no"
Атрибут с вариантами значений.
□ attribute={ "yes" | "no" }
Атрибут с вариантами значений, которые могут быть заданы шаблонами значений атрибутов.
□ <!-- Содержимое: шаблон -->
Содержимым элемента является шаблон.
□ <!-- Содержимое: несколько элементов xsclass="underline" import ... -->
Элемент содержит последовательность из нуля или более элементов xsclass="underline" import
.
□ <!-- Содержимое: один или более элемент xsclass="underline" when ... -->
Элемент содержит последовательность из одного или более элементов xsclass="underline" when
.
□ <!-- Содержимое: ... опциональный элемент xsclass="underline" otherwise -->
Элемент содержит элемент xsclass="underline" otherwise
, который может быть пропущен.
Элементы
В табл. П2.1 приведены описания основных элементов XSLT.
Таблица П2.1. Описание основных элементов XSLT
Элемент | Описание |
---|---|
<xsclass="underline" apply-imports/> |
Инструкция. Применяет шаблонные правила, которые содержатся в импортированных преобразованиях |
<xsclass="underline" apply-templates select="выражение" mode="режим"> <!-- Содержимое: несколько элементов xsclass="underline" sort или xsclass="underline" with-param --> </xsclass="underline" apply-templates> |
Инструкция. Применяет шаблонные правила к множеству узлов, возвращаемому выражением, записанным в атрибуте select . • select — содержит выражение, возвращающее множество узлов для обработки; • mode — указывает режим, в котором должны применяться шаблоны |
<xsclass="underline" attribute name="{имя}" |
Инструкция. Создает в выходящем документе узел атрибута. • name — определяет имя атрибута; • namespace — URI пространства имен создаваемого атрибута |
namespace="{пространство имен}"> <!-- Содержимое: шаблон --> </xsclass="underline" attribute> |
|
<xsclass="underline" attribute-set name="имя" use-attribute-sets="имена"> <!-- Содержимое: несколько элементов xsclass="underline" attribute --> </xsclass="underline" attribute-set> |
Элемент верхнего уровня. Определяет именованный набор атрибутов. • name — содержит имя набора атрибутов; • use-attribute-sets — перечисляет через пробелы имена наборов атрибутов, которые следует включить в определяемый набор |
<xsclass="underline" call-template name="имя"> <!-- Содержимое: несколько элементов xsclass="underline" with-param --> </xsclass="underline" call-template> |
Инструкция. Вызов именованного шаблона. • name — имя вызываемого шаблона |
<xsclass="underline" choose> <!-- Содержимое: один или более элемент xsclass="underline" when, опциональный элемент xsclass="underline" otherwise --> </xsclass="underline" choose> |
Инструкция. Выполняет содержимое одного из субэлементов в зависимости от условий |
<xsclass="underline" comment> <!-- Содержимое: шаблон --> </xsclass="underline" comment> |
Инструкция. Создает в выходящем документе узел комментария |
<xsclass="underline" copy use-attribute-sets="имена"> <!-- Содержимое: шаблон --> </xsclass="underline" copy>
|