Можно непосредственно отображать XML-документы при помощи браузера, такого, как Microsoft Internet Explorer версии 5 или более поздней. Например, если сохранить созданный нами XML-документ под именем greeting.xml и открыть его в Internet Explorer, он будет выглядеть так, как показано на рис. 1.1.
Рис. 1.1. XML-документ в Internet Explorer
На рис. 1.1 можно видеть документ XML полностью. Нет никакого форматирования, документ XML выглядит в Internet Explorer точно так же, как если бы вы вывели его на печать. (Для отображения экрана, показанного на рис. 1.1, Internet Explorer использовал свою таблицу стилей по умолчанию. Она преобразует XML в формат Dynamic HTML, с которым Internet Explorer умеет работать.) А что, если нам требуется представить данные в другом виде? Допустим, мы захотим представить данные из planets.xml в документе HTML в виде HTML-таблицы?
Тут-то нам и понадобятся преобразования XSLT. В этой главе мы с ними познакомимся, а в конце главы рассмотрим другую сторону XSL — XSL-FO.
XSLT-преобразования
XSLT обладает большими возможностями для оперирования данными в документах XML. Например, при помощи таблицы стилей (stylesheet) XSLT я мог бы отформатировать данные из
planets.xml
в таблицу HTML. Таблицы стилей содержат правила, установленные для преобразования XML-документа, и большая часть книги посвящена созданию таблиц стилей и объяснению того, как они работают. Вот как выглядит таблица стилей XSLT planets.xsl
(листинг 1.2), преобразующая данные из planets.xml в таблицу HTML (мы проанализируем ее в главе 2).Листинг 1.2. planets.xsl
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
The Planets Table
The Planets Table
Name
Mass
Radius
Day
Как видите, эта таблица стилей XSLT выглядит как XML-документ — и для этого есть основания, потому что она им и является. Все таблицы стилей XSLT являются также и документами XML, а раз так, то они должны быть хорошо форматированными документами XML С этими двумя документами —
planets.xml
(листингом 1.1) и связанной с ним таблицей стилей, planets.xsl
(листинг 1.2) — мы будем работать на протяжении всей книги, рассматривая различные возможные преобразования XSLT.Как вы свяжете эту таблицу стилей с XML-документом
planets.xml
? Как мы увидим в следующей главе, одним из способов это сделать является инструкция обработки XML
, использующая два атрибута. Первый атрибут — type
, который следует установить в «text/xml», чтобы указать, что используется таблица стилей XSLT. (Чтобы использовать таблицы стилей другого типа — каскадирующие таблицы стилей (CSS, cascading stylesheets), обычно использующиеся с HTML — следует задать «text/css».) Второй атрибут — href
, которому следует присвоить значение URI (вспомните, что XML использует не адреса URL, а идентификаторы URI, Uniform Resource Identifier) таблицы стилей:
Mercury
.0553
58.65
1516
.983
43.4
.
.
.
Теперь при помощи процессора (processor) XSLT можно применить таблицу
planets.xsl
к planets.xml
и создать новый документ, planets.html
. Процессор XSLT создает новый файл planets.html
, который вы можете увидеть на рис. 1.2.Рис. 1.2. HTML-документ, созданный процессором XSLT
Как можно видеть на рис. 1.2, процессор XSLT считывает данные из
planets.xml
, применяет к ним правила из planets.xsl
и создает HTML-таблицу в planets.html. Это наш первый пример XSLT-преобразования.Что здесь на самом деле происходит? У нас были XML-документ,
planets.xml
, и таблица стилей XSLT, planets.xsl
. Но каким образом они объединились для создания planets.html
?Что нужно для XSLT-преобразования
Для осуществления XSLT-преобразования, такого как преобразование
planets.xml
в planets.html
, необходим XSLT-процессор. Для преобразований документов XML можно использовать XSLT тремя способами:• используя отдельные программы, называемые процессорами XSLT. Существует несколько программ, осуществляющих XSLT-преобразования, обычно основанных на Java, — с некоторыми из них мы познакомимся в этой главе;
• на стороне клиента. Клиентская программа, например браузер, может осуществлять преобразование, считывая таблицу стилей, заданную в инструкции обработки
. В частности, Internet Explorer может осуществлять преобразования подобного рода; • на стороне сервера. Серверная программа, например сервлет Java, может преобразовывать документ автоматически при помощи таблицы стилей и отправлять его клиенту.
В книге мы рассмотрим все три способа осуществления XSLT-преобразований. Уже в этой главе будет предоставлен обзор всех этих трех различных способов.
Использование отдельных процессоров XSLT
Отдельные процессоры XSLT — один из самых распространенных способов провести XSLT-преобразования. Существует весьма много таких процессоров, хотя и не все из них могут обрабатывать все возможные таблицы стилей XSLT. Для того, чтобы использовать процессор XSLT, достаточно запустить его из командной строки (в окне DOS в Windows), задать имя исходного документа XML, имя используемой таблицы стилей и имя документа, который вы хотите создать.
Ниже приведен список некоторых доступных в Интернете процессоров XSLT в алфавитном порядке — большинство (но не все) из них бесплатны:
• 4XSLT, http://Fourthought.com/4Suite/4XSLT. XSLT-процессор для Python;
• EZ/X, http://www.activated.com/products/products.html. Пакет Java одновременно для разбора XML и обработки XSLT;
• iXSLT, http://www.infoteria.com/en/contents/download/index.html Процессор XSLT в командной строке;
• Koala XSL Engine, http://www.inria.fr/koala/XML/xslProcessor. XSLT-процессор для Java, использующий простой API для XML, Simple API for XML (SAX 1.0) и API объектной модели документов, Document Object Model (DOM 1.0) API;
• LotusXSL, http://www.alphaworks.ibm.com/tech/LotusXSL. LotusXSL фирмы IBM реализует XSLT-процессор на Java и может взаимодействовать с интерфейсами API, удовлетворяющими спецификации Document Object Model (DOM) Level 1 Specification. Известный процессор XSLT, но сейчас он вытесняется Xalan 2.0;
• MDC-XSL, http://mdc-xsl.sourceforge.net. Процессор XSLT на С++, его можно использовать как отдельную программу;
• Microsoft XML Parser, http://msdn.microsoft.com/downloads/webtechnology/xml/msxml.asp. Разборщик XML фирмы Microsoft, высокопроизводительный, доступный в виде СОМ-компонента. Его можно использовать для реализации поддержки XSLT в приложениях;
• Sablotron, http://www.gingerall.com/charlie-bin/get/webGA/act/sablotron.act. Sablotron — быстрый, компактный и переносимый процессор XSLT. На настоящий момент поддерживает подмножество рекомендации XSLT. Его можно использовать вместе с С или Perl;
• SAXON, http://users.iclway.co.uk/mhkay/saxon/index.html. Такой процессор XSLT полностью реализует XSLT 1.0 и XPath 1.0, а также ряд расширений упомянутых спецификаций. Обратите внимание на то, что в этом выпуске имеется также поддержка рабочего проекта XSLT 1.1;
• Transformiix, http://www.mozilla.org. Transformiix — XSLT-компонент фирмы Mozilla, в настоящее время частично реализованный в Netscape 6.0;
• Unicorn XSLT processor (UXT), http://www.unicorn-enterprises.com. Этот процессор XSLT поддерживает XSLT-преобразования и написан на С++;
• Xalan С++, http://xml.apache.org/xalan-c/index.html. Реализация рекомендаций W3C для XSLT и XML Path Language (XPath). Версия известного процессора Apache Xalan на С++;
• Xalan Java, http://xml.apache.org/xalan-j/index.html. Реализация рекомендаций W3C для XSLT и XML Path Language (XPath) на Java. Версия известного процессора Apache Xalan на Java. Включает также функции расширения для доступа к базам данных на SQL через JDBC и многое другое;
• xesalt, http://www.inlogix.de/products.htmL Этот процессор XSLT существует в виде web-серверного модуля (как для web-сервера Apache, так и для IIS), в виде расширения Netscape 4.x и в виде процессора командной строки;
• XML parser for С, http://technet.oracle.com/tech/xml/parser_c2. Процессор XSLT фирмы Oracle. Поддерживает рекомендацию XSLT 1.0, разработан для использования с С;
• XML parser for Java, http://technet.oracle.com/tech/xml/parser_java2. Процессор XSLT фирмы Oracle. Поддерживает рекомендацию XSLT 1.0, разработан для использования с Java;
• XML parser for PL/SQL, http://technet.oracle.com/tech/xml/parser_plsql. Процессор XSLT фирмы Oracle. Поддерживает рекомендацию XSLT 1.0, разработан для использования с PL/SQL;
• XML:XSLT, http://xmlxslt.sourceforge.net. Этот разборщик XSLT написан на Perl. Частично реализует рекомендацию XSLT;
• Xport, http://www.timelux.lu. Процессор XSLT-преобразования, доступен в виде СОМ-объекта;
• XSL:P, http://www.clc-marketing.com/xslp/download.html. Современный процессор XSLT;
• XT, http://www.jclark.com/xml/xt.html. XT — известная реализация рекомендации XSLT на Java.
В следующих разделах мы подробно рассмотрим четыре из вышеперечисленных процессоров XSLT: XT, Saxon, XSLT-процессор фирмы Oracle и Xalan. Все они бесплатно доступны в Интернете, и на них можно проверить все приведенные в книге примеры. Если вы хотите изучать примеры, загрузите один из этих процессоров (лучше всего известный и широко используемый — процессор Xalan). Для осуществления XSLT-преобразований я буду пользоваться этими процессорами при дальнейшем изложении.
Выбранные процессоры основаны на Java, поэтому необходимо, чтобы у вас была установлена Java. Если у вас она еще не установлена, ее можно загрузить бесплатно с web-узла фирмы Sun. Самое последнее издание, на момент написания книги Java 2 версии 1.3 доступно по адресу http://java.sun.com/j2se/1.3. Все, что нужно сделать, — загрузить Java для вашей операционной системы и следовать инструкциям по загрузке на соответствующих страницах.
Хотя для запуска этих XSLT-процессоров нужна Java, не стоит беспокоиться, если вы не программист — никакого программирования не требуется. В главе 10 будут приведены примеры программирования на Java — для того чтобы продемонстрировать вам, как создавать XSLT-преобразования в коде — но процессоры XT, Saxon, XSLT от Oracle и Xalan можно запускать из командной строки.
Если вы работаете в Windows, то для вас существует еще более простой способ использовать XT и Saxon — эти процессоры поставляются в виде файлов .ехе (
xt.exe
и saxon.exe
), которые можно выполнять непосредственно в Windows — и вам совсем не понадобится Java. Этот способ работы также рассмотрен в книге.Использование процессора XSLT на Java
Для работы с основанным на Java процессором XSLT достаточно загрузить и распаковать (unzip) его — и он готов к работе. Прочитайте, конечно, сопроводительные указания; но, как правило, нужно осуществить только два шага.
Во-первых, необходимо уведомить Java, как ей найти XSLT-процессор, который хранится в файле архива Java, или JAR (Java Archive). Чтобы сообщить Java о том, где искать JAR-файл, нужно установить переменную окружения classpath в путь этого JAR-файла. Например, в любой версии Windows следует открыть окно DOS и выполнить команду, устанавливающую переменную classpath в путь к JAR-файлу процессора XSLT от Oracle, xmlparserv2.jar, который в этом случае хранится в каталоге
c:\oraclexml\lib
:C:\>set classpath=c:\oraclexml\lib\xmlparserv2.jar
Теперь можно перейти ко второму этапу — запустить процессор XSLT; при этом будет выполняться класс Java, поддерживающий данный процессор. Для XSLT-процессора Oracle этот класс называется
oracle.xml.parser.v2.oraxsl
. В Windows, например, вы можете перейти в каталог, в котором расположены файлы planets.xml
и planets.xsl
, и выполнить класс oracle.xml.parser.v2.oraxsl
при помощи Java таким образом:C:\planets>java oracle.xml.parser.v2.oraxsl planets.xml planets.xsl planets.html
При этом файл
planets.xml
будет преобразован в planets.html
при помощи planets.xsl
. Заметьте: в этом примере предполагается, что файл java.exe, в котором исполняется Java-код, расположен в вашем каталоге Windows. Если его там нет, можно явно задать его месторасположение, каталог Java bin, например c:\jdk1.3\bin
(JDK— сокращение от Java Development Kit, a Java 2 версии 1.3 устанавливает себя по умолчанию в каталог c:\jdk1.3
), как в следующей команде:C:\planets>c:\jdk1.3\bin\java oracle.xml.parser.v2.oraxsl planets.xmlplanets.xslplanets.html
Можно объединить оба этапа (установка переменной
classpath
и запуск процессора XSLT) в один, если вы используете ключ -cp
вместе с Java, указывая, какую переменную classpath
использовать:C:\planets>c:\jdk1.3\bin\java -ср c:\oraclexml\lib\xmlparserv2.jar oracle.xml.parser.v2.oraxsl planets.xml planets.xsl planets.html
Это весьма длинные команды, что может на первый взгляд показаться вам излишне сложным. Тем не менее есть веская причина, по которой большинство процессоров XSLT написаны на Java: Java поддерживается на многих платформах, от Macintosh до UNIX, а поэтому XSLT-процессор также может выполняться на всех этих платформах.
Конечно, все становится намного проще, если вы работаете в Windows и используете скомпилированную версию процессора XT (
xt.exe
) либо Saxon (saxon.exe
). Ниже приведен пример работы с xt.exe
в Windows для осуществления того же преобразования (здесь предполагается, что xt.exe
расположен в текущем каталоге):C:\planets>xt planets.xml planets.xsl planets.html
Мы рассмотрели процесс кратко; теперь я хочу описать четыре процессора XSLT (XT, Saxon, процессор XSLT от Oracle и Xalan) подробно, продемонстрировав, как работать с каждым из них. Обратите внимание на два момента: программное обеспечение, реализующее языки XML и XSL, меняется очень быстро, так что когда вы читаете эти строки, некоторые процессоры уже могут оказаться устаревшими; хотя все процессоры должны поддерживать весь стандартный XSLT, в некоторых случаях они приводят к различным результатам.
XT Джеймса Кларка
XT Джеймса Кларка (James Clark) можно загрузить с www.jclark.com/xml/xt.html. Помимо самого процессора XT, вам понадобится разборщик XML, при помощи которого XT будет читать ваш XML-документ. В файлах загрузки XT есть еще файл
sax.jar
, содержащий разборщик XML Джеймса Кларка; можете впрочем воспользоваться в этих же целях и его разборщиком ХР, загрузив его с адреса www.jclark.com/xml/xp/index.html.Я лично предпочитаю использовать разборщик XML Xerces от Apache Project, который расположен по адресу http://xml.apache.org. (Ко времени написания книги текущую версию, Xerces 1.3.0, можно было загрузить с адреса http://xml.apache.org/dist/xerces-j/ в формате zip для UNIX в файле
Xerces-J-bin.l.3.0.tar.gz
и формате для Windows в файле Xerces-J-bin.1.3.0.zip
.)Сам процессор XT — это приложение Java, включенное в пакет загрузки XT в файле JAR,
xt.jar
. Для использования xerces.jar
и xt.jar
вы должны включить и тот, и другой файлы в переменную classpath
, как показано в следующем примере для Windows (соответственно измените места нахождения этих файлов):C:\>set classpath=C:\xerces-1_3_0\xerces.jar;C:\xt\xt.jar
Затем вы можете воспользоваться классом преобразования XT,
com.jclark.xsl.sax.Driver.class
. Нужно предоставить имя разборщика, которое вы хотите использовать (в данном случае это org.apache.xerces.parsers.SAXParser
в архиве xerces.jar
), установив переменную com.jclark.xsl.sax.parser
в нужное имя в командной строке. Вот как я использую XT для преобразования в Windows (считая, что файлы planets.xml
и planets.xsl
содержатся в каталоге c:\planets
, a java.exe
расположен в вашем текущем каталоге):C:\planets>java -Dcom.jclark.xsl.sax.parser=org.apache.xerces.parsers.SAXParser com.jclark.xsl.sax.Driver planets.xml planets.xsl planets.html
Эта строка довольно длинна, и хорошо, что XT также упакован в исполняемый файл Win32
xt.exe
. Для работы с xt.exe
, однако, необходимо, чтобы на компьютере была установлена виртуальная машина Java от Microsoft, Microsoft Java Virtual Machine (VM), — она входит в поставку Internet Explorer. Вот пример в Windows, осуществляющий то же преобразование, что и предыдущая строка (предполагается, что xt.exe
расположен в текущем каталоге):C:\planets>xt planets.xml planets.xsl planets.html
Если
xt.exe
расположен не в текущем каталоге, вы можете задать его месторасположение явно, как в следующем примере (если xt.exe
находится в c:\xt
):C:\planets>c:\xt\xt planets.xml planets.xsl planets.html
Saxon
Saxon Майкла Кэя (Michael Kay) — один из самых первых процессоров XSLT, его можно бесплатно загрузить с http://users.iclway.co.uk/mhkay/saxon/. Все, что нужно сделать, — это загрузить файл saxon.zip и распаковать архив zip; будет создан требуемый файл Java JAR,
saxon.jar
.Для осуществления XSLT-преобразования вначале нужно удостоверится, что
saxon.jar
находится в переменной classpath
. Например, в Windows, считая, что saxon.jar
находится в c:\saxon
, установить переменную classpath
можно следующим образом:C:\>set classpath=c:\saxon\saxon.jar
Теперь для выполнения преобразования можно использовать класс Saxon XSLT,
com.icl.saxon.StyleSheet.class
:C:\planets>java com.icl.saxon.StyleSheet planets.xml planets.xsl
По умолчанию Saxon выводит результаты на экран — не совсем то, что нужно, если мы хотим создать файл
planets.html
. Чтобы создать файл planets.html
, можно воспользоваться символом перенаправления вывода UNIX или DOS >:C:\planets>java com.icl.saxon.StyleSheet planets.xml planets.xsl > planets.html
При работе в Windows несложно сразу же вызвать Saxon в виде исполнимой программы Win32, saxon.exe, которая загружается с http://users.iclway.co.uk/mhkay/saxon/. В Windows его можно запустить следующим образом (часть
-о planets.html
задает имя выходного файла):C:\planets>saxon -о planets.html planets.xml planets.xsl
Oracle XSLT
Корпорация Oracle также предоставляет бесплатный процессор XSLT, который можно загрузить с http://technet.oracle.com/tech/xml/, — правда, для этого придется пройти весьма длительную процедуру регистрации. Ко времени написания книги для загрузки процессора XSLT достаточно было щелкнуть на ссылке для XDK для Java http://technet.oracle.com/tech/xml/.
После распаковки архива zip, загруженного с web-узла Oracle, требуемый JAR-файл (на момент написания книги) будет называться
xmlparserv2.jar
. Его можно поместить в вашу переменную classpath
в Windows следующим образом:C:\>set classpath=c:\oraclexml\lib\xmlparserv2.jar
Требуемый класс Java —
oracle.xml.parser.v2.oraxsl
, для преобразования planets.xml
в planets.html
вы можете использовать его таким образом:C:\planets>java oracle.xml.parser.v2.oraxsl planets.xml planets.xsl planets.html
Xalan
Скорее всего, самый широко используемый отдельный процессор XSLT — это Xalan фирмы Apache Project (Apache — широко распространенный web-сервер). Версию Xalan на Java можно загрузить с http://xml.apache.org/xalan-j/index.html — достаточно щелкнуть на требуемом вам файле архива zip (сейчас это
xalan-j_2_0_0.zip
для Windows или xalan-j_2_0_0.tar.gz
для UNIX).При распаковке загруженного файла вы получите как процессор XSLT,
xalan.jar
, так и разборщик XML, xerces.jar
. Оба эти JAR-файла в Windows можно включить в classpath
следующим образом (измените пути к файлам в соответствии с вашей системой):C:\>set classpath=c:\xalan-j_2_0_0\bin\xalan.jar;c:\xalan-j_2_0_0\bin\xerces.jar
Чтобы затем использовать
planets.xsl
для преобразования planets.xml
в planets.html
, запустите на выполнение класс Java org.apache.xalan.xslt.Process
:C:\planets>java org.apache.xalan.xslt.Process -IN planets.xml -XSL planets.xsl -OUT planets.html
Заметьте, что для указания входного файла используется
-IN
, для указания выходного — -OUT
, а для указания таблицы стилей XSLT — -XSL
. Чаще всего мы будем работать именно с процессором Xalan, поэтому ниже приведены дополнительные подробности. Следующий список содержит все лексемы, которые можно использовать с классом org.apache.xalan.xslt.Process
, как их выводит сам Xalan:•
-CR
. Использовать в выходных данных только символы возврата каретки (carriage return) — по умолчанию используется CR/LF;•
-DIAG
. Вывод диагностики времени;•
-EDUMP [optional] FileName
. Копировать стек при ошибке;•
-HTML
. Использовать формат HTML;• -
IN inputXMLURL
;•
-INDENT
. Количество пробелов для выравнивания (indent) каждого уровня в выходном дереве — по умолчанию 0;•
-LF
. Использовать в выходных данных только символы перевода строки (linefeed) — по умолчанию используется CR/LF;•
-OUT outputFileName
;•
-PARAM name value
. Устанавливает параметр таблицы стилей;•
-Q
. Режим с минимальным выводом (quiet);•
-QC
. Quiet Pattern Conflicts Warnings, предупреждения конфликтов шаблонов;•
-TEXT
. Использовать средство форматирования простого текста;•
-TG
. Отслеживать (trace) каждое событие генерации результирующего дерева;•
-TS
. Отслеживать каждое событие выделения;•
-ТТ
. Отслеживать шаблоны по мере их вызова;•
-ТТС
. Отслеживать «детей» шаблона по мере их обработки;•
-V
. Информация о версии;•
-VALIDATE
. Проверить входной XML и XSL (по умолчанию проверка отключена);•
-XML
. Использовать средства форматирования XML и добавить заголовок XML;•
-XSL XSLTransformationURL
.В книге мы рассмотрим все эти процессоры; как уже говорилось, чаше всего я буду использовать Xalan. (Причина в том, что этот процессор стал самым популярным и широко распространенным процессором XSLT.) Разумеется, вы можете использовать любой процессор XSLT, если только он удовлетворяет спецификации XSLT консорциума W3C.
На этом мы завершаем рассмотрение отдельных процессоров XSLT. Существует другой способ преобразовывать документы XML, не прибегая к отдельной программе: для этих целей можно использовать такую клиентскую программу, как браузер.
Преобразование документов XML при помощи браузеров