Алексей Валиков - Технология XSLT
Другие требования
В числе прочих требований, предъявленных к XSLT 2.0, можно перечислить следующие:
□ поддержка группировки;
□ поддержка Unicode-нормализации строк;
□ сортировка узлов в соответствии с информацией о их типах, сообщенной XML-схемой документа;
□ создание и копирование узлов с учетом информации об их типах;
□ создание пространства имен с вычисляемым префиксом и URI.
Приложение 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<?xml-stylesheet type="text/xsl" href="stylesheet.xsl"?>
<date>18.10.2001</date>
Листинг П1.2. Преобразование stylesheet.xsl<?xml version="1.0" encoding="windows-1251"?>