KnigaRead.com/

Алексей Валиков - Технология XSLT

На нашем сайте KnigaRead.com Вы можете абсолютно бесплатно читать книгу онлайн Алексей Валиков, "Технология XSLT" бесплатно, без регистрации.
Перейти на страницу:

Первый способ заключается в том, что с 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"?>

<xsl:stylesheet

 version="1.0"

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


 <xsl:template match="/">

  <html>

   <head>

    <title>Today is page</title>

   </head>

   <body>

    <xsl:apply-templates select="date"/>

   </body>

  </html>

 </xsl:template>


 <xsl:template match="date">

  <H1>

   <xsl:text>Сегодня </xsl:text>

   <xsl:value-of select="."/>

  </H1>

 </xsl:template>


</xsl:stylesheet>

Документ 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. Входящий документ

<?xml version="1.0" encoding="windows-1251"?>

<page>Сегодня <date/>.</page>

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

<xsl:stylesheet version="1.0"

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


 <xsl:output encoding="windows-1251"/>


 <msxsl:script

  language="JavaScript"

  implements-prefix="ext">

  function date() {


   now = new Date;


   return now.getDate() + '.' +

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

    now.getYear();

  }

 </msxsl:script>


 <xsl:template match="/">

  <html>

   <head>

    <title>Today is page</title>

   </head>

   <body>

    <xsl:apply-templates/>

   </body>

  </html>

 </xsl:template>


 <xsl:template match="date">

  <xsl:value-of select="ext:date()"/>

 </xsl:template>


</xsl:stylesheet>

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

<html>

 <head>

  <META

   http-equiv="Content-Type"

   content="text/html;

   charset=windows-1251">

  <title>Today is page</title>

 </head>

 <body>Сегодня 18.10.2001.</body>

</html>

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

<xsl:stylesheet

 version="1.0"

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

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

 exclude-result-prefixes="msxsl ">


 <!-- ... -->


 <xsl:variable name="tree">

  <!-- Переменная, содержащая результирующий фрагмент дерева -->

  <item>A</item>

  <item>B</item>

 </xsl:variable>


 <!-- ... -->


 <xsl:template ... >

  <!-- Обращение к $tree, как ко множеству узлов -->

  <xsl:value-of select="msxsl:node-set($tree)/item[1]"/>

 </xsl:template>


</xsl:stylesheet>

К сожалению, текущая версия 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 можно описать как выдающийся продукт от выдающегося человека.

Перейти на страницу:
Прокомментировать
Подтвердите что вы не робот:*