Выбрать главу

Расширения

В 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>