Технология XSLT

Валиков Алексей Н.

Приложение 1

Обзор XSLT-процессоров

 

 

Здесь даны необходимые сведения по всем существующим XSLT-процессорам, достаточные для того, чтобы сориентировать разработчика и помочь ему выбрать наиболее подходящий инструмент. Перечислим основные факторы, которые мы будем учитывать для каждого из рассматриваемых процессоров:

□ поддерживаемые программные или языковые платформы;

□ поддержка расширений;

□ полнота реализации;

□ популярность;

□ скорость.

Несмотря на то, что XSLT-процессоры являются довольно сложными программами, в подавляющем большинстве они распространяются по бесплатным лицензиям. Как следствие, ценовой показатель не является в данном случае определяющим.

 

Популярность XSLT-процессоров

Немаловажным фактором при выборе XSLT-процессора является его популярность: ведь чем более распространен процессор, тем больше возможность учитывать опыт предыдущих разработок и тем меньше вероятность найти грабли, на которые до этого еще не наступили другие.

На рис. П1.1 представлены результаты опросов, проведенных нами среди русскоязычных XML-разработчиков. В опросе принимали участие посетители сайта http://www.xmlhack.ru и подписчики конференции fido7.ru.xml. Параметр, приведенный в процентах, показывает, какая часть опрошенных использует этот процессор.

Рис. П1.1. Популярность основных XSLT-процессоров

Как и следовало ожидать, что наиболее популярным XSLT-процессором для решений на платформе Win32 является собственная разработка Microsoft — процессор MSXML. На Java-платформах самым популярным средством является Xalan, который разрабатывался в Apache XML Project.

 

Производительность XSLT-процессоров

Другим важным параметром, который следует учитывать при выборе процессора, является производительность или скорость выполнения преобразований. От производительности процессора зависит реальность использования XSLT в решениях, требующих быстрого времени реакции (например, на Web-серверах).

Производительность процессоров очень нелегко оценить. Во-первых, дело приходится иметь с различными программными и языковыми платформами, производительность которых различается уже сама по себе. Во-вторых, вследствие применения различных алгоритмов, эффективность процессоров может неодинаково проявляться на различных типах преобразований (например, на преобразовании А процессор I может быть быстрее процессора II, а на преобразовании В — медленнее). В-третьих, не все процессоры полностью и правильно реализуют возможности XSLT, то есть далеко не все преобразования будут выполняться на всех процессорах одинаково. Наконец, из всего времени обработки сложно выделить время, потраченное собственно на преобразование (а не на разбор и сериализацию XML).

Вследствие этого ни одна из оценок производительности не может претендовать на абсолютную достоверность. Впрочем, этого и не требуется — нам важно сориентироваться среди существующих процессоров по скорости, а для этого будет достаточно и приблизительных данных.

С любезного разрешения Кевина Джонса (Kevin Jones) и DataPower, Inc, мы опубликуем результаты двух исследований производительности XSLT-процессоров, основанных на сравнительном анализе времени выполнения контрольного набора примеров. Сами примеры и исходную статистическую информацию можно найти на следующих Web-сайтах:

□ http://www.datapower.com/XSLTMark

□ http://www.tfi-technology.com/xml/xslbench.html

Мы приведем результаты этих исследований, выразив их в процентах (рис. П1.2 и П1.3). Относительную оценку в 100% имеет процессор с наивысшей скоростью, 50% — процессор, который оказался в два раза медленнее и так далее.

Рис. П1.2. Оценка производительности XSLT-процессоров в соответствии с XSLBench

Рис. П1.3. Оценка производительности XSLT-процессоров в соответствии с XSLTMark

Замечание

К моменту выхода книги в свет эта информация, скорее всего, потеряет свою актуальность — появятся новые процессоры, а старые будут переработаны. Несмотря на это, в глобальной перспективе расстановка сил вряд ли изменится, и поэтому приведенные данные могут быть полезны при выборе процессора и в будущем.

 

Библиотека Microsoft XML Parser

 

Основные характеристики. □ Платформы: MS Windows.

□ Расширения: функции расширения на JavaScript и VBScript.

□ Полнота реализации: один из наиболее проработанных процессоров.

□ Разработчик: Microsoft Corporation.

□ URL: http://msdn.microsoft.com/xml.

Продукт, названный Microsoft XML Parser, на самом деле далеко не только парсер. MSXML — это базовый компонент, объединяющий DOM/SAX-парсер, XSLT-процессор и некоторые другие инструменты. Мы будем рассматривать только XSLT-функциональность.

Компания Microsoft начала проявлять интерес к XSLT уже на самых ранних этапах разработки языка - когда он еще не был выделен из родительской технологии XSLT. Прототип процессора, предложенный Microsoft, был одной из первых рабочих реализаций XSLT. К сожалению, в этом прототипе был реализован ранний диалект языка, не совместимый со стандартной версией XSLT. Он получил большое распространение вместе с браузерами Internet Explorer 4.0, 5.0 и 5.5, и, как результат, множество программистов и по сей день работают с нестандартной версией XSLT, которая описывается пространством имен "http://www.w3.org/TR/WD-xsl". Поддержка стандартного XSLT была реализована в версии MSXML 3.0, которая вышла в марте 2000 года (более полная, production-версия появилась чуть позже, осенью).

Ранний вариант XSLT, реализованный в MSXML 2.0 и ниже, имеет схожие с XSLT 1.0 принципы, но также и целый ряд несовместимых отличий. Следует скорее сказать, что WD-xsl — это другой язык и программировать на нем тоже следует по-другому. Для того чтобы использовать стандартный XSLT в MSXML, следует обновить этот компонент, загрузив новую версию с Web-сайта Microsoft. Однако, и это еще не все. Дело в том, что Microsoft не отказалась от старой нестандартной версии и MSXML 3.0 поддерживает ее наравне с XSLT 1.0. Более того, по умолчанию, MSXML устанавливается в так называемом side-by-side режиме (англ. side-by-side - бок о бок). Это означает, что вновь установленный компонент не замещает предыдущую версию полностью. Поэтому устанавливать MSXML следует в режиме замены — по окончанию установки следует воспользоваться утилитой xmlinst.exe, также доступной с Web-сайта Microsoft для того, чтобы полностью заменить старую версию.

Типичными симптомами не до конца обновленной версии MSXML является следующее:

□ при попытке выполнить корректные преобразования, определенные в пространстве имен с URI "http://www.w3.org/1999/XSL/Transform", не происходит ничего или выдается ошибка;

□ при попытке выполнить те же преобразования, исправив URI на "http://www.w3.org/TR/WD-xsl", процессор пытается выполнить преобразование, но выдает ошибку о некорректности преобразования (в то время как оно работает на других процессорах);

□ в преобразованиях не работают переменные, именованные шаблоны, шаблоны значений атрибутов, ключи и импортирование.

В случае обнаружения подобных признаков единственным советом является обновление версии MSXML в режиме замены.

Предупреждение

Перед установкой MSXML3 рекомендуется внимательно ознакомиться с документацией на предмет возможности установки в режиме замены. Некоторые программные продукты (такие, как SQL Server и Biztalk Server) используют старую версию XSLT-процессора, и обновление в режиме замены приведет к нестабильности их работы.

 

Использование

Так как MSXML уже давно превратился в стандартный компонент Windows, использовать его можно разными способами - например, в собственных приложениях или как ISAPI-расширение. При разработке XSLT-преобразований MSXML, как правило, применяется либо совместно с браузером Internet Explorer, либо как самостоятельная утилита командной строки.

Первый способ заключается в том, что с XML-документом посредством инструкции xml-stylesheet ассоциируется преобразование и Internet Explorer отображает результат преобразования.

Пример

Листинг П1.1. Входящий документ source.xml

18.10.2001

Листинг П1.2. Преобразование stylesheet.xsl

 version="1.0"

 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

 

 

  

    Today is page

  

  

   

  

 

 

 

 

   Сегодня

  

 

 

Документ source.xml будет отображен в браузере Internet Explorer следующим образом (рис. П1.4).

Рис. П1.4. Документ source.xml, отображенный браузером Internet Explorer

Другим, вариантом является использование утилиты командной строки msxsl.exe, которая также доступна на Web-сайте MSDN. Эта утилита есть не более чем оболочка для MSXML, позволяющая вызывать основной компонент из командной строки.

Использование msxsl.exe совершенно стандартно: для применения преобразования stylesheet.xsl к документу source.xml и вывода результата в файле result.xml нужно выполнить следующую команду:

msxsl.exe source.xml stylesheet.xsl -о result.xml

 

Расширения

MSXML поддерживает пользовательские функции расширения, которые могут быть написаны на скриптовых языках VBScript и JScript и включены непосредственно в сами преобразования.

Пример

Листинг П1.3. Входящий документ

Сегодня .

Листинг П1.4. Преобразование

 xmlns:xsl="http://www.w3.org/1999/XSL/Transform"

 xmlns:msxsl="urn:schemas-microsoft-com:xslt"

 xmlns:ext="urn:extension-functions"

 exclude-result-prefixes="msxsl ext">

 

 

  language="JavaScript"

  implements-prefix="ext">

  function date() {

   now = new Date;

   return now.getDate() + '.' +

    (now.getMonth() + 1) + '.' +

    now.getYear();

  }

 

 

 

  

    Today is page

  

  

   

   

 

 

 

 

 

Листинг П1.5. Выходящий документ

 

 

   http-equiv="Content-Type"

   content="text/html;

   charset=windows-1251">

  Today is page

 

 Сегодня 18.10.2001.

Как и во многих других процессорах, в MSXML предусмотрена функция расширения node-set, которая преобразует результирующий фрагмент дерева во множество узлов. Функция node-set принадлежит пространству имен с URI "urn:schemas-microsoft-com:xslt", и стандартным сценарием ее использования будет примерно следующий:

 version="1.0"

 xmlns:xsl="http://www.w3.org/1999/XSL/Transform"

 xmlns:msxsl="urn:schemas-microsoft-com:xslt"

 exclude-result-prefixes="msxsl ">

 

 

 

  A

  B

 

 

 

 

 

 

К сожалению, текущая версия MSXML не поддерживает расширение пользовательскими элементами.

 

Процессор Xalan

 

Основные характеристики.

□ Платформы: Java, С++.

□ Расширения: функции и элементы расширения.

□ Полнота реализации: один из наиболее проработанных процессоров. □ Разработчик: Apache XML Project.

□ URL: http://xml.apache.org.

Xalan — это очень известный XSLT-процессор, созданный в рамках Apache XML Project для языковых платформ Java и С++. Xalan, как и остальные продукты Apache XML Project, поставляется с открытым исходным кодом и открытым API, что делает его очень привлекательным для интеграции в другие приложения.

 

Использование

По сути дела, Xalan Java и Xalan C++ — это библиотеки, позволяющие использовать XSLT-преобразования в собственных проектах. Xalan Java поддерживает набор интерфейсов TrAX (от англ. transformation API for XML — программный интерфейс преобразований для XML), определяющий стандартные модели и методы преобразования XML-документов в Java-программах.

Помимо этого, и Xalan Java и Xalan С++ предусматривают возможность выполнения преобразований из командной строки. Для Xalan Java стандартный вызов будет выглядеть так:

java org.apache.xalan.xslt.Process -in source.xml -xsl stylesheet.xsl -OUT result.xml

Если при попытке выполнения этой команды выдается сообщение вида:

Exception in thread "main" java.lang.NoClassDefFoundError:

org/apache/xalan/xslt/Process

это означает, что библиотека xalan.jar не прописана в переменной окружения CLASSPATH, запустить Xalan в этом случае можно, указав xalan.jar в параметрах явным образом:

java -cp xalan.jar org.apache.xalan.xslt.Process -in source.xml -xsl stylesheet.xsl -out result.xml

Библиотека Xalan С++ имеет несколько вариантов для платформ Windows 32, Linux, AIX, HP-UX и Solaris, каждый из которых включает также скомпилированную утилиту TestXSLT, позволяющую выполнять преобразования из командной строки:

TestXSLT -in source.xml -xsl stylesheet.xsl -out result.xml

 

Расширения

Xalan С++ позволяет вызывать в XSLT-преобразовании пользовательские функции расширения, написанные на языке С. Кроме того, в дополнение к базовым функциям XSLT, Xalan С++ реализует несколько наиболее часто используемых функций, например, функцию nodeset. В текущей версии (1.2) Xalan С++ не поддерживает элементы расширения.

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

Остановимся на последнем пункте более подробно. Xalan позволяет использовать библиотеку BSF (от англ. bean scripting framework — система скриптовых языков для bean-компонент). BSF — это библиотека, которая позволяет использовать скриптовые языки в Java-приложениях и апплетах. На данный момент BSF позволяет реализовывать в Xalan Java расширения на следующих скриптовых языках:

□ Mozilla Rhino (фактически, еще один вариант JavaScript);

□ NetRexx;

□ BML;

□ JPython;

□ Jacl;

□ PerlScript;

□ VBScript;

□ JavaScript.

 

Процессор Saxon

 

Основные характеристики.

□ Платформы: Java.

□ Расширения: функции и элементы расширения на Java.

□ Полнота реализации: практически идеальная.

□ Разработчик: Майкл Кей.

□ URL: http://saxon.sourceforge.net.

XSLT-процессор Saxon был разработан и до сих пор поддерживается единственным человеком — Майклом Кеем (Michael Kay), который в настоящий момент является редактором спецификации XSLT 2.0. Процессор Saxon, так же как и Xalan, является бесплатным open-source продуктом.

На Web-сайте Saxon доступны два варианта процессора — полный Saxon и облегченная версия, скомпилированная для Windows — Instant Saxon, которая занимает всего 400 килобайт в архиве, но практически не уступает полной версии по функциональности.

Следует особым образом подчеркнуть полноту реализации Saxon. Майкл Кей является известным специалистом по XSLT, который много времени уделяет консультированию разработчиков в списке-рассылке XSL List. Столь плотная работа с конечными пользователями позволяет ему быстро реагировать на информацию о допущенных ошибках и несоответствиях. Как результат, разработанный и поддерживаемый им процессор считается образцом соответствия стандарту XSLT. В целом, Saxon можно описать как выдающийся продукт от выдающегося человека.

 

Использование

Легкий вариант, Instant Saxon представляет собой утилиту командной строки saxon.exe, с помощью которой можно применять преобразования к XML-документам:

saxon.exe -о result.xml source.xml stylesheet.xsl

Полная версия Saxon (включающая также исходный код) тоже может использоваться как утилита командной строки:

java com.icl.saxon.stylesheet -о result.xml source.xml stylesheet.xsl

Как и в случае с Xalan, библиотеку saxon.jar придется либо включить в переменную окружения CLASSPATH, либо указывать явным образом

java -cp saxon.jar com.icl.saxon.StyleSheet -o result.xml source.xml stylesheet.xsl

Между тем, Saxon — это далеко не только процессор командной строки. Saxon предоставляет очень мощные возможности для использования в собственных проектах. В частности, Saxon поддерживает TrAX (Transformation API for XML), о котором мы говорили чуть выше, позволяет применять пользовательские парсеры и сериализаторы, предоставляет API для Java и многое другое.

 

Расширения

Расширения для Saxon могут быть созданы на языке Java в виде функций и элементов. Saxon отличает возможность использования Java-функций расширения, написанных для других Java-процессоров (в частности Xalan и Oracle XSLT Processor).

Для программирования элементов расширения Saxon предоставляет интерфейс com.icl.saxon.style.ExtensionElementFactory, который несколько отличается от подхода, предложенного в Xalan. В Xalan элементу расширения соответствует функция класса, в то время как в Saxon элементу расширения соответствует "фабрика классов", ExtensionElementFactory, возвращающая по данному имени элемента класс-наследник com.icl.saxon.style.StyleElement, соответствующий экземпляру элемента.

Помимо описанных выше возможностей, базовая библиотека функций XPath расширена в Saxon большим количеством функций, облегчающих работу со строками, множествами, датами и так далее. Saxon также включает некоторые из расширений, предложенные инициативой EXSLT.

 

Библиотека Oracle XDK

 

Основные характеристики.

□ Платформы: Java, C/C++, PL/SQL.

□ Расширения: поддержка функций расширения.

□ Полнота реализации: сравнительно хорошая (уступает Saxon и MSXML).

□ Разработчик: Oracle Corporation.

□ URL: http://technet.oracle.com/tech/xml/.

Так же как и MSXML, Oracle XDK (от англ. XML Development Kit - комплект для XML-разработки) состоит из нескольких компонентов, предназначенных для разработки XML-приложений на Java, С, С++ и PL/SQL. Библиотека Oracle XDK включает XML-парсер, реализующий DOM и SAX интерфейсы, XSLT-процессор, генератор классов и процессор для XML Schema. Java-версия XDK также включает XSQL-сервлет и утилиту XML SQL (в сокращении — XSU), которые являются основой решений Oracle для обеспечения XML-функциональности в базах данных. XSU предоставляет возможности для экспорта и импорта реляционных данных в виде XML, а сервлет XSQL позволяет использовать возможности XSU в клиент-серверных приложениях (в частности — на Web-серверах). Примечательно, что XSU и XSQL работают не только с базой данных Oracle, но и с любыми другими базами данных, которые поддерживают JDBC-доступ. Oracle XDK разработан под руководством Стива Мюнха (Steve Muench), который также является очень известным специалистом по XML.

Главным образом в Oracle XDK нас интересует библиотека, отвечающая за выполнение XSLT-преобразований — Oracle XSLT Processor. Этот компонент включен во все языковые версии XDK: существует вариант для Java, С, С++ и даже для PL/SQL (что позволяет выполнять преобразования внутри базы данных Oracle).

Относительно проработанности Oracle XSLT Processor можно сказать следующее: XSLT 1.0 поддерживается полностью (или почти полностью), однако периодически попадаются мелкие ошибки, которые оперативно исправляются в следующих релизах. XSLT-процессор играет важную роль в Web-решениях Oracle и потому его поддержке и отладке уделяется большое внимание.

 

Использование

Главной областью применения Oracle XSLT Processor является его использование совместно с технологиями XSQL и XSU для обеспечения Web-доступа к реляционным данным. Кроме этого, Oracle XSLT Processor легко интегрируется в другие приложения и также может выполняться из командной строки. Например, в Java-версии Oracle XDK для выполнения преобразования следует запустить команду:

java oracle.xml.parser.v2.oraxsl source.xml stylesheet.xsl result.xml

Если выдается сообщение о ненайденном классе, можно попробовать следующий вариант:

java -cp xmlparserv2.jar oracle.xml.parser.v2.oraxsl source.xml stylesheet.xsl result.xml

Можно также воспользоваться утилитой пакетной обработки oraxsl:

oraxsl source.xml stylesheet.xsl result.xml

 

Расширения

Java-версия Oracle XSLT Processor может расширяться пользовательскими функциями, написание которых, в принципе, ничем не отличаются от стандартных методов создания Java-функций расширения.

К сожалению, Oracle XSLT Processor не поддерживает пользовательские элементы расширения. Стандартных дополнений базовой библиотеки функций XPath и XSLT также не предусмотрено.

 

Процессор Sablotron

 

Основные данные процессора.

□ Платформы: С++, Perl, PHP, Python.

□ Расширения: нет.

□ Полнота реализации: XSLT 1.0 и XPath 1.0 реализованы не полностью.

□ Разработчик: Ginger Alliance.

□ URL: http://www.gingerall.com.

XSLT-процессор Sablotron, разработанный в Ginger Alliance, — это еще один пример весьма успешного open source проекта в области XML-технологий. Sablotron — это библиотека для преобразования XML-документов, которая построена (вернее, почти построена) в соответствии со спецификациями XSLT, XPath и DOM. Процессор Sablotron изначально написан на С++ и компилируется под несколько платформ, в числе которых Linux, Windows 32, Solaris, HP-UX, FreeBSD, OpenBSD, OpenServer и UnixWare. Открытый код также позволяет переносить Sablotron под другие платформы, так что этот список, вполне возможно, будет расширен.

К сожалению, реализация XSLT и XPath в Sablotron вызывает определенные нарекания. В текущей версии (0.71) Sablotron далеко не полностью поддерживает эти стандарты: например, в путях выборки не работают оси навигации following и preceding, некоторые функции (как то: id, lang, unparsed-entity-uri) не реализованы вообще, многие из функций и элементов реализованы не до конца или работают не в полном соответствии со спецификациями. В общем, соответствие Sablotron стандартам оставляет желать лучшего, хотя и в таком виде он является вполне функциональным процессором.

 

Использование

Особую популярность процессору Sablotron'у придает наличие для него расширений под языки Perl, PHP и Python. Долгое время Sablotron был единственным XSLT-процессором, который существовал для Perl, и поэтому Perl-программистам для выполнения XSLT-преобразований не оставалось ничего, кроме как использовать Sablotron.

Помимо интерфейсов для С++, Perl, Python и PHP, для Sablotron также существует утилита для выполнения преобразований из командной строки sabcmd:

sabcmd stylesheet.xsl source.xml result.xml

 

Процессор xt

 

Характеристики процессора.

□ Платформы: Java.

□ Расширения: функции расширения, некоторые элементы расширения.

□ Полнота реализации: практически полностью реализует XSLT версии PR-xslt-19991008.

□ Разработчик: Джеймс Кларк (James Clark).

□ URL: http://www.jclark.com/xml/xt.html.

Без всякого сомнения, xt является легендарным процессором. Он был написан Джеймсом Кларком - человеком, чей вклад в технологию XSLT сложно переоценить. Кларк был редактором первой версии XSLT, а его процессор xt был одним из первых прототипов, реализующих новый язык. На xt практическим способом было проверено, множество идей, касающихся XSLT, ведь мало создать мощный язык — нужно еще и позаботиться о том, чтобы его можно было реализовать на практике в интерпретаторах, процессорах и компиляторах.

Процессор xt, безусловно, сыграл свою роль в развитии технологии XSLT. К сожалению, Джеймс Кларк более не продолжает этот проект. Версия от 5 ноября 1999 года является последней версией xt. Она все еще доступна на Web-сайте http://www.jclark.com/xml/xt.html, но более не поддерживается.

В последней (если не сказать, финальной) версии xt язык XSLT реализован в почти полном соответствии с версией PR-xslt-19991008. Буквы PR в этом коде означают "proposed recommendation" (англ. предлагаемая рекомендация). PR - это одна из последних стадий принятия нового стандарта в Консорциуме W3, так что можно сказать, что xt реализует почти стандартную версию XSLT. Процессор xt имеет ряд ограничений и недоработок, но уже поздно надеяться, что они будут когда-либо исправлены.

 

Использование

Как и любой другой XSLT-процессор, написанный на Java, xt можно без труда использовать в Java-проектах. Помимо этого, xt можно использовать в качестве сервлета и из командной строки.

Сервлет-версия xt реализована в классе com.jclark.xsl.sax.XSLservlet и может выполняться на контейнерах, поддерживающих Java Servlet API версии 2.1 и выше.

Версия xt для командной строки позволяет выполнять преобразования посредством следующей команды:

java -Dcom.jdark.xsl.sax.parser= SAX-драйвер com.jclark.xsl.sax.Driver source.xml stylesheet.xsl result.xml

В этой команде параметр SAX-драйвер указывает на класс, который xt будет использовать в качестве SAX-парсера для разбора входящего документа.

Для платформы Windows32 процессор xt поставляется также в уже скомпилированной версии. Его запуск в этом случае выглядит как

xt source.xml stylesheet.xsl result.xml

 

Расширения

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