• XSL = XSLT + XSL-FO
  • Краткая историческая справка
  • Преобразования XSLT-XSL
  • XSL-FO: форматирующие объекты XSL
  • Спецификации W3C
  • Версии XSLT
  • Документы XML
  • Хорошо сформированные документы XML
  • Допустимые документы XML
  • Как XML выглядит в браузере?
  • XSLT-преобразования
  • Что нужно для XSLT-преобразования
  • Использование отдельных процессоров XSLT
  • Использование процессора XSLT на Java
  • XT Джеймса Кларка
  • Saxon
  • Oracle XSLT
  • Xalan
  • Преобразование документов XML при помощи браузеров
  • Работа с XSLT и JavaScript в Internet Explorer
  • XSLT-преобразования на web-серверах
  • Преобразования из XML в XML
  • Преобразования из XML в XHTML
  • Ресурсы XSLT
  • Спецификации, руководства и примеры XSLT
  • Редакторы XSLT
  • Утилиты XSLT
  • Форматирующие объекты XSL: XSL-FO
  • Ресурсы XSL-FO
  • Форматирование документа XML
  • Таблица стилей XSLT
  • Преобразование документа в представление с форматирующими объектами
  • Создание форматированного документа
  • Глава 1

    Основы XSLT

    Добро пожаловать в мир языка преобразований расширенной таблицы стилей, XSLT (Extensible Stylesheet Language Transformations). Эта книга послужит вам путеводителем в огромном мире XSLT, который каждую минуту расширяется непредсказуемым образом. Мы хотим, чтобы этот мир стал и вашим миром. Нам нужно охватить весьма большой материал, поскольку в наши дни XSLT используется в очень интересных местах и очень интересными способами. В этой книге вы увидите, как это все работает.

    Собственно XSLT представляет собой средство обработки и форматирования содержимого документов XML. XML уже стал очень популярным, теперь настала очередь XSLT. XML дает вам возможность структурировать данные в документах, a XSLT позволяет работать с содержимым документов XML — оперировать содержимым и создавать другие документы (например, при сортировке XML записей базы данных сотрудников или при сохранении данных в документ HTML, а также при детальном форматировании данных).

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

    XSL = XSLT + XSL-FO

    Сам XSLT в действительности является частью более крупной спецификации — расширенного языка таблиц стилей, Extensible Stylesheet Language, или XSL. XSL предназначен для задания точного, до миллиметра, формата документов. 

    Форматирующая часть XSL, представляющая гораздо более крупную спецификацию, чем XSLT, основана на специальных форматирующих объектах (formatting objects) — эта часть XSL часто называется XSL-FO (или XSL:FO, или XSLFO). XSL-FO — сложная тема, поскольку задание стилей документов при помощи форматирующих объектов может оказаться весьма запутанным процессом. Фактически XSLT изначально был добавлен в XSL для того, чтобы проще осуществлять преобразование документов XML в документы, основанные на форматирующих объектах XSL-FO.

    Эта книга посвящена XSLT, но рассматривается также и введение в XSL-FO, в том числе способ использования XSLT для преобразования документов в форму XSL-FO; в конце концов, XSLT впервые был представлен для упрощения работы с XSL-FO. В начале данной главы будет приведен обзор как XSLT, так и XSL-FO.

    Краткая историческая справка

    XSL был создан консорциумом World Wide Web Consortium (W3C, www.w3.org) — объединением групп, первоначально возглавлявшимся Тимом Бернерс-Ли (Tim Berners-Lee). W3C — это комитет, выпускающий спецификации, — такие, как спецификация для XSL, используемая в данной книге. Именно спецификации делают XML и XSL тем, чем они являются.

    W3C И ЯЗЫКИ СТИЛЕЙ

    Вы можете прочитать об истории работы комитета W3C с языками стилей по адресу www.w3.org/Style/History. Интересно посмотреть, какая объемная работа была проделана и как много языков стилей сменилось за это время.

    W3C первоначально, в 1980-х, разработал «дедушку» XML, SGML (Standard Generalized Markup Language, стандартный обобщенный язык разметки), однако он был слишком сложен для того, чтобы завоевать широкую популярность, и в действительности XML (как и HTML) представляет собой упрощенную версию SGML. W3C также создал для работы совместно с SGML язык стилей DSSSL (Document Style Semantics and Specification Language, язык семантики стиля и спецификации документа) — и так же, как XML был произведен от SGML, XSL основан на исходном DSSSL. Как утверждает W3C: «Модель, используемая XSL для отображения документов на экране, базируется на многих годах работы над сложным языком стилей по стандарту ISO, который называется Document Style Semantics and Specification Language (DSSSL)».

    Однако исходная часть XSL, то есть XSL-FO, все равно оказалась не настолько простой, чтобы найти широкое распространение, поэтому XSLT был представлен как средство упрощения преобразования документов XML в форму XSL-FO. Как оказалось, именно XSLT был взят на вооружение, поскольку он представляет собой законченный язык преобразований, позволяющий работать с содержимым документов XML без написания программного кода, преобразовывать эти документы в другие документы XML, формат HTML или другие основанные на текстах форматы. Большой успех XSLT удивил даже W3C.

    Преобразования XSLT-XSL

    XSLT позволяет работать непосредственно с содержимым документов XML. Например, у вас может быть огромный документ XML, содержащий всю бейсбольную статистику за последний сезон, однако вас может интересовать только статистика для питчеров. Чтобы извлечь только эти данные, можно написать программу на Java, Visual Basic или С++, которая будет работать с разборщиками XML. Разборщики представляют собой специальные программные пакеты, читающие документы XML и передающие все данные документа последовательно в ваш код. Затем можно создать новый документ XML, pitchers.xml, содержащий только данные о питчерах.

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

    Помимо преобразования одного документа XML в другой документ XML, можно также преобразовывать документы XML в документы разных типов — таких, как HTML, документы форматированного текста (RTF), документы, использующие XSL-FO и другие. Можно также преобразовать документы XML в иные основанные на XML языки — такие, как MathML, MusicML, VML, XHTML и другие — все это можно осуществить, не прибегая к программированию.

    Во многих случаях язык XSLT может работать аналогично языку баз данных, такому как SQL (Structured Query Language, язык структурированных запросов, — известный язык доступа к базам данных), поскольку он позволяет извлекать требуемые данные из документов XML во многом похоже на то, как инструкция SQL извлекает данные из базы данных. Иногда даже говорят о XSLT как о SQL в Web, и если вы знакомы с SQL, это даст вам некоторое представление о безграничных возможностях XSLT. Например, при помощи таблицы стилей XSLT можно извлечь подмножество данных из документа XML, создать оглавление для большого документа, найти все элементы, удовлетворяющие определенному условию (например, поставщиков с определенным индексом) и т.д. И все это — за один шаг!

    XSL-FO: форматирующие объекты XSL

    Другая часть XSL — это XSL-FO, форматирующая часть языка XSL, с которой мы также познакомимся в этой книге. При помощи XSL-FO можно определить способ представления данных в документах XML, вплоть до размера полей, шрифтов, выравнивания, размера заголовка и подзаголовка, а также ширины страницы. При форматировании документа XML приходится думать о множестве вещей, и, соответственно, XSL-FO значительно объемистее, чем XSLT.

    С другой стороны, из-за излишней сложности XSL-FO не очень популярен, и его нельзя сравнивать с XSLT в этом отношении. Существует не так много программ, поддерживающих XSL-FO, и ни одна из них не реализует достаточно полное приближение к стандарту. Так же как самый распространенный способ применения XSLT — это преобразование XML в HTML, самый распространенный способ применения XSL-FO — преобразование XML в текст в формате PDF (Portable Data Format, переносимый формат данных), используемый в Adobe Acrobat. Пример такого преобразования приведен в конце этой главы, а также в главе 11.

    Спецификации W3C

    W3C выпускает спецификации как для XML, так и для XSL, и именно с ними мы будем работать на протяжении всей книги. Спецификации W3C не называются стандартами, поскольку, по международным соглашениям, стандарты могут создаваться только уполномоченными государством комитетами. Вместо этого W3C начинает с выпуска требований (requirements) для новой спецификации. Требования представляют собой список целей и обзоров спецификации, но сама спецификация на этот момент еще не написана. Далее W3C выпускает спецификации: сначала в виде рабочих проектов (working drafts), которые могут комментировать все заинтересованные лица, затем в виде рекомендаций-кандидатов (candidate recommendations), которые еще могут быть изменены; и, наконец, в виде окончательных рекомендаций (recommendations), которые уже нельзя изменять.

    В следующем списке приведены имеющие отношения к XSLT спецификации W3C, которые мы будем использовать в книге, и адреса, по которым их можно найти:

    • полная рекомендация-кандидат XSL www.w3.org/TR/xsl/. Это большой документ, определяющий все аспекты XSL;

    • рекомендация XSL Transformations 1.0 по адресу www.w3.org/TR/xslt. Предназначение XSLT состоит в преобразовании содержимого документов XML в другие документы, и именно поэтому XSL стал таким популярным;

    • рабочий проект XSLT 1.1 по адресу www.w3.org/TR/xslt11. Это рабочий проект XSLT 1.1, который не будет далее разрабатываться до рекомендации — W3C планирует добавить всю функциональность XSLT 1.1 в XSLT 2.0;

    • требования XSLT 2.0 по адресу www.w3.org/TR/xslt20req. W3C выпустил группу целей для XSLT 2.0, включая дополнительную поддержку схем XML;

    • спецификация XPath 1.0 по адресу www.w3.org/TR/xpath. XPath используется для нахождения и указания на определенные разделы и элементы в документах XML так, чтобы можно было с ними работать;

    • требования XPath 2.0 по адресу www.w3.org/TR/xpath20req. XPath в данный момент обновляется — добавляется дополнительная поддержка XSLT 2.0.

    Версии XSLT

    Спецификации XSLT разрабатывались значительно активнее, чем спецификации для всего XSL. Рекомендация XSLT 1.0 была окончательно принята 16 ноября 1999 г., и эта версия является сегодня основной версией XSLT.

    Затем появился рабочий проект XSLT 1.1 и, хотя первоначально он рассматривался в качестве пролога новой рекомендации, ряд сотрудников W3C начал работать над XSLT 2.0 — и через некоторое время W3C решил прекратить работу над рекомендацией XSLT 1.1. Это означает, что рабочий проект XSLT 1.1 не будет развиваться далее — он навсегда останется в виде рабочего проекта и никогда не станет рекомендацией. Иными словами, не будет выпущено официальной версии 1.1 для XSLT.

    Однако консорциум W3C также утверждает, что он планирует включить большую часть того, что было сделано в рабочем проекте XSLT 1.1, в XSLT 2.0, и поэтому в данной книге я кратко рассмотрю рабочий проект XSLT 1.1. Я обязательно отмечу материал как «только для рабочего проекта XSLT 1.1» при обсуждении нового материала, представленного в рабочем проекте XSLT 1.1.

    Ниже перечислены изменения в XSLT 1.0, сделанные в рабочем проекте XSLT 1.1; заметьте, что этот список приведен здесь только в качестве справочного материала, так как большая часть материала вряд ли пока что-нибудь для вас значит:

    • исключен поддерживаемый в XSLT 1.0 тип данных фрагмента результирующего дерева;

    • метод вывода больше не может произвольно добавлять узлы пространства имен, поскольку процесс установки пространства имен применяется автоматически;

    • была добавлена поддержка для XML Base;

    • теперь поддерживаются несколько выходных документов при помощи элемента

    <xsl:document>
    ;

    • элемент

    <xsl:apply-imports>
    теперь может иметь параметры;

    • функции расширения теперь можно определять при помощи функции

    <xsl:script>
    ;

    • функции расширения теперь могут возвращать внешние объекты, не соответствующие никаким типам данных XPath.

    В этой книге рассматривается рекомендация XSLT 1.0. а также рабочий проект XSLT 1.1. В развитие данной темы W3C и выпустил требования для XSLT 2.0, которые также рассматриваются в книге под именем XSLT 2.0. В следующем списке приведен обзор целей XSLT 2.0:

    • добавить дополнительную поддержку для работы с содержимым схемы XML при помощи XSLT;

    • упростить работу со строками;

    • упростить работу с XSLT; 

    • улучшить поддержку различных языков;

    • сохранить обратную совместимость с XSLT 1.0;

    • поддерживать повышенную эффективность процессора.

    Хотя XSLT 2.0 еще некоторое время не будет выпущен в окончательном варианте, я рассмотрю все, что о нем известно, при обсуждении имеющих к нему отношение тем. Например, разработанный W3C последователь HTML — это основанный на XML язык XHTML. В XSLT 1.0 и в рабочем проекте XSLT 1.1 нет прямой поддержки преобразований из XML в XHTML, поэтому нам придется создать это преобразование с нуля. Однако такая поддержка входит в состав XSLT 2.0, и я отмечу этот факт при обсуждении XHTML.

    Таким образом, мы рассмотрели краткий обзор тематики; давайте перейдем к работе. XSL предназначен для работы с документами XML, поэтому сначала я хочу рассмотреть структуру документов XML. Вы будете работать с документами XML, но сами таблицы стилей XSL также являются документами XML, что следует помнить при их написании. В этой книге считается, что вы обладаете знаниями и XML, и HTML.

    Документы XML

    Вы должны понимать, как работают документы XML, поэтому проверьте по материалам этого раздела, готовы ли вы к работе. Давайте посмотрим на примере документа XML:

    <?xml version="1.0" encoding="UTF-8"?>

    <DOCUMENT>

     <GREETING>

      Hello From XML

     </GREETING>

     <MESSAGE>

      Welcome to the wild and woolly world of XML.

     </MESSAGE>

    </DOCUMENT>

    Вот как работает этот документ: я начал с инструкции обработки XML <?xml version="1.0" encoding="UTF-8"?> (все инструкции обработки XML начинаются с <? и заканчиваются ?>), означающей, что используется XML версии 1.0, единственная определенная сейчас версия, и кодировка символов UTF-8, то есть используется восьмибитная сжатая версия Unicode:

    <?xml version="1.0" encoding="UTF-8"?>

    <DOCUMENT>

     <GREETING>

      Hello From XML

     </GREETING>

     <MESSAGE>

      Welcome to the wild and woolly world of XML.

     </MESSAGE>

    </DOCUMENT>

    Затем я создаю новый тег (tag) с именем

    <DOCUMENT>
    . Для тега можно использовать любое имя, не обязательно DOCUMENT; необходимо только, чтобы имя начиналось с буквы или символа подчеркивания (_), а последующими символами были буквы, цифры, символы подчеркивания, точки (.) или дефисы (-), но не пробелы. В XML теги всегда начинаются с < и заканчиваются >.

    Документы XML образованы из элементов XML; последние начинаются с открывающего тега, такого как

    <DOCUMENT>
    (за которым следует содержимое (content) элемента, если оно есть, — например, текст или другие элементы), и завершаются закрывающим тегом, парным тегу открытия (он начинается с символов </ — например,
    </DOCUMENT>
    ). Весь документ целиком, за исключением инструкций обработки, заключается в один элемент, называемый корневым (root) элементом; в нашем случае это элемент
    <DOCUMENT>
    :

    <?xml version="1.0" encoding="UTF-8"?>

    <DOCUMENT>

     .

     .

     .

    </DOCUMENT>

    Теперь я добавлю новый элемент,

    <GREETING>
    , в который заключено текстовое содержимое (здесь «Hello From XML», привет от XML) этого XML-документа:

    <?xml version="1.0" encoding="UTF-8"?>

    <DOCUMENT>

     <GREETING>

      Hello From XML

     </GREETING>

     .

     .

     .

    </DOCUMENT>

    После этого я могу добавить еще один элемент,

    <MESSAGE>
    , также образующий оболочку над текстовым содержимым:

    <?xml version="1.0" encoding="UTF-8"?>

    <DOCUMENT>

     <GREETING>

      Hello From XML

     </GREETING>

     <MESSAGE>

      Welcome to the wild and woolly world of XML.

     </MESSAGE>

    </DOCUMENT>

    Сейчас корневой элемент

    <DOCUMENT>
    содержит два элемента —
    <GREETING>
    и
    <MESSAGE>
    , в каждом из которых имеется текст. Таким образом, я создал новый документ XML.

    Однако следует добавить еще кое-что: документы XML могут быть также хорошо сформированными (well-formed) и допустимыми (valid). 

    Хорошо сформированные документы XML

    Для того чтобы быть хорошо сформированным, документ XML должен следовать правилам синтаксиса, установленным для XML консорциумом W3C в рекомендации XML 1.0 (которую можно найти по адресу www.w3.org/TR/REC-xml). Неформально «хорошо сформированный» означает главным образом то, что документ должен содержать один или более элементов, и один из них, корневой, обязан включать в себя все остальные элементы. Кроме того, для каждого элемента должны соблюдаться правила вложенности. Например, следующий документ не будет хорошо сформированным, потому что закрывающий тег </GREETING> встречается после открывающегося тега <MESSAGE> для следующего элемента:

    <?xml version="1.0" encoding="UTF-8"?>

    <DOCUMENT>

     <GREETING>

      Hello From XML

     <MESSAGE>

     </GREETING>

      Welcome to the wild and woolly world of XML.

     </MESSAGE>

    </DOCUMENT>

    Допустимые документы XML

    Большинство браузеров XML проверяют документы на то, являются ли они хорошо сформированными. Некоторые браузеры могут также проверить, допустим ли документ. Документ XML допустим (valid), если с ним связаны объявление типа документа (DTD — Document Type Declaration) или схема XML, и если документ удовлетворяет этим DTD или схеме. То есть DTD или схема задает набор правил для внутренней целостности самого документа, и если браузер может подтвердить, что документ удовлетворяет этим правилам, он является допустимым.

    XML-схемы завоевывают популярность, и значительно большая поддержка схем присутствует в XSLT 2.0 (фактически поддержка XML-схем — одна из побудительных сил к переходу на XSLT 2.0), однако объявления DTD все еще остаются наиболее часто используемым средством проверки на допустимость. Объявления DTD могут быть сохранены в отдельном файле или в самом документе в элементе <!DOCTYPE>. Ниже этот элемент добавлен в разработанный нами пример:

    <?xml version="1.0" encoding="UTF-8"?>

    <?xml-stylesheet type="text/css" href="first.css"?>

    <!DOCTYPE DOCUMENT [

     <!ELEMENT DOCUMENT (GREETING, MESSAGE)>

     <!ELEMENT GREETING (#PCDATA)>

     <!ELEMENT MESSAGE (#PCDATA)>

    ]>

    <DOCUMENT>

     <GREETING>

      Hello From XML

     </GREETING>

     <MESSAGE>

      Welcome to the wild and woolly world of XML

     </MESSAGE>

    </DOCUMENT>

    В этой книге не рассматриваются объявления DTD, но из них видно, что элемент

    <DOCUMENT>
    — корневой, а элементы
    <GREETING>
    и
    <MESSAGE>
    могут, во-первых, находиться внутри него, а во-вторых — содержать текст.

    В документах XML могут присутствовать все виды иерархий, когда один элемент заключен в другой элемент и так далее на много уровней вложенности. Элементам можно также задавать атрибуты, например:

    <CIRCLE COLOR="blue">
    , где атрибут
    COLOR
    содержит значение "
    blue
    ". При помощи таких атрибутов удобно хранить дополнительные данные об элементах. Еще в документы XML разрешается включать комментарии, поясняющие определенные элементы текстом внутри тегов
    <!--
    и
    -->
    .

    Ниже, в листинге 1.1, приведен пример XML-документа

    planets.xml
    , в котором эти возможности используются для хранения данных о планетах Меркурии (Mercury), Венере (Venus) и Земле (Earth) — таких как масса, длительность дня, плотность, расстояние от Солнца и т.д. Мы будем работать с этим документом во всей книге, поскольку в нем в компактной форме содержится большая часть возможностей XML, которые могут вам потребоваться.

    Листинг 1.1. planets.xml

    <?xml version="1.0"?>

    <PLANETS>

     <PLANET>

      <NAME>Mercury</NAME>

      <MASS UNITS="(Earth = 1)">.0553</MASS>

      <DAY UNITS="days">58.65</DAY>

      <RADIUS UNITS="miles">1516</RADIUS>

      <DENSITY UNITS="(Earth = 1)">.983</DENSITY>

      <DISTANCE UNITS="million miles">43.4</DISTANCE><!--B перигелии-->

     </PLANET>

     <PLANET>

      <NAME>Venus</NAME>

      <MASS UNITS="(Earth = 1)">.815</MASS>

      <DAY UNITS="days">116.75</DAY>

      <RADIUS UNITS="miles">37l6</RADIUS>

      <DENSITY UNITS="(Earth = 1)">.943</DENSITY>

      <DISTANCE UNITS="million miles">66.8</DISTANCE><!--В перигелии-->

     </PLANET>

     <PLANET>

      <NAME>Earth</NAME>

      <MASS UNITS="(Earth = 1)">1</MASS>

      <DAY UNITS="days">1</DAY>

      <RADIUS UNITS="miles">2107</RADIUS>

      <DENSITY UNITS="(Earth = 1)">1</DENSITY>

      <DISTANCE UNITS="million miles">128.4</DISTANCE><!--B перигелии-->

     </PLANET>

    </PLANETS>

    Вам нужно также усвоить ряд определений XML, принятых в этой книге:

    • CDATA. Простые символьные данные (то есть текст, не содержащий какой-либо разметки);

    • ID. Корректное имя XML, которое должно быть уникальным (то есть не использоваться в каких-либо других атрибутах типа ID);

    • IDREF. Содержит значение атрибута ID некоторого элемента, как правило, отличного от элемента, с которым связан текущий элемент;

    IDREFS. Несколько идентификаторов (ID) элементов, разделенных пробелами;

    NAME Символ. Буква, разряд, точка, дефис, символ подчеркивания или двоеточие;

    • NAME. Имя XML, которое должно начинаться с буквы, символа подчеркивания или двоеточия, за которыми, возможно, следуют дополнительные символы имени;

    NAMES. Список имен, разделенных символом-разделителем;

    • NMTOKEN. Лексема, образованная из одной или более букв, цифр, дефисов, символов подчеркивания, двоеточий и точек;

    • NMTOKENS. Несколько корректных имен XML в списке, разделенных символом-разделителем;

    NOTATION. Название нотации (которое должно быть объявлено в DTD);

    • PCDATA. Разобранные символьные данные. PCDATA не содержит какой-либо разметки, и любые ссылки на сущности уже были в PCDATA раскрыты.

    Теперь у нас есть представление о документах XML, в том числе о том, что такое хорошо сформированный и допустимый документ. Если вы еще не чувствуете себя достаточно уверенно в этом материале, прочитайте другую книгу по этой теме. Вы можете также просмотреть на некоторые ресурсы XML в Web:

    • http://www.w3c.org/xml. Основной web-узел консорциума World Wide Web Consortium, посвященный XML, начальная точка для всех аспектов XML;

    • http://www.w3.org/XML/1999/XML-in-10-points, «XML за 10 шагов» (в действительности только семь) — обзор XML;

    • http://www.w3.org/TR/REC-xml. Официальная рекомендация W3C для XML 1.0, текущая (и единственная) версия. Не слишком просто для чтения,

    • http://www.w3.org/TR/xml-stylesheet/. Все о работе таблиц стилей и XML;

    • http://www.w3.org/TR/REC-xml-names/. Все о пространствах имен XML;

    • http://www.w3.org/XML/Activity.html. Обзор текущей деятельности по XML в W3C;

    • http://www.w3.org/TR/xmlschema-0/, http://www.w3.org/TR/xmlschema-1/ и http://www.w3.org/TR/xmlschema-2/. XML-схемы, альтернатива объявлениям DTD; 

    • http://www.w3.org/TR/xlink/. Спецификация XLinks;

    • http://www.w3.org/TR/xptr. Спецификация XPointers;

    • http://www.w3.org/TR/xhtml1/. Спецификация XHTML 1.0;

    • http://www.w3.org/TR/xhtml11/. Спецификация XHTML 1.1;

    • http://www.w3.org/DOM/.W3C Объектная модель документа, DOM (Document Object Model).

    Теперь мы научились создавать документы XML. Каковы они в наглядном виде?

    Как XML выглядит в браузере?

    Можно непосредственно отображать 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

    <?xml version="1.0"?>

    <xsl:stylesheet version="1.0"

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

     <xsl:template match="/PLANETS">

      <HTML>

       <HEAD>

        <TITLE>

         The Planets Table

        </TITLE>

       </HEAD>

       <BODY>

        <H1>

         The Planets Table

        </H1>

        <TABLE BORDER="2">

         <TR>

          <TD>Name</TD>

          <TD>Mass</TD>

          <TD>Radius</TD>

          <TD>Day</TD>

         </TR>

         <xsl:apply-templates/>

        </TABLE>

       </BODY>

      </HTML>

     </xsl:template>


     <xsl:template match="PLANET">

      <TR>

       <TD><xsl:value-of select="NAME"/></TD>

       <TD><xsl:apply-templates select="MASS"/></TD>

       <TD><xsl:apply-templates select="RADIUS"/></TD>

       <TD><xsl:apply-templates select="DAY"/></TD>

      </TR>

     </xsl:template>


     <xsl:template match="MASS">

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

      <xsl:text> </xsl:text>

      <xsl:value-of select="@UNITS"/>

     </xsl:template>


     <xsl:template match="RADIUS">

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

      <xsl:text> </xsl:text>

      <xsl:value-of select="@UNITS"/>

     </xsl:template>


     <xsl:template match="DAY">

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

      <xsl:text> </xsl:text>

      <xsl:value-of select="@UNITS"/>

     </xsl:template>

    </xsl:stylesheet>

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

    planets.xml
    (листингом 1.1) и связанной с ним таблицей стилей,
    planets.xsl
    (листинг 1.2) — мы будем работать на протяжении всей книги, рассматривая различные возможные преобразования XSLT.

    Как вы свяжете эту таблицу стилей с XML-документом

    planets.xml
    ? Как мы увидим в следующей главе, одним из способов это сделать является инструкция обработки XML
    <?xml-stylesheet?>
    , использующая два атрибута. Первый атрибут —
    type
    , который следует установить в «text/xml», чтобы указать, что используется таблица стилей XSLT. (Чтобы использовать таблицы стилей другого типа — каскадирующие таблицы стилей (CSS, cascading stylesheets), обычно использующиеся с HTML — следует задать «text/css».) Второй атрибут —
    href
    , которому следует присвоить значение URI (вспомните, что XML использует не адреса URL, а идентификаторы URI, Uniform Resource Identifier) таблицы стилей:

    <?xml version="1.0"?>

    <?xml-stylesheet type="text/xml" href="planets.xsl"?>

    <PLANETS>

     <PLANET>

      <NAME>Mercury</NAME>

      <MASS UNITS="(Earth = 1)">.0553</MASS>

      <DAY UNITS="days">58.65</DAY>

      <RADIUS UNITS="miles">1516</RADIUS>

      <DENSITY UNITS="(Earth = 1)">.983</DENSITY>

      <DISTANCE UNITS="million miles">43.4</DISTANCE><!--В перигелии-->

     </PLANET>

     .

     .

     .

    Теперь при помощи процессора (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, — с некоторыми из них мы познакомимся в этой главе;

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

    <?xml-stylesheet?>
    . В частности, 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 при помощи браузеров

    Поддержка XSLT включена и в Microsoft Internet Explorer, и в Netscape Navigator. Из этих двух браузеров Internet Explorer обладает гораздо большей поддержкой XSLT, и здесь я буду использовать версию 5.5 этого браузера. О поддержке XSLT в Internet Explorer вы можете прочитать по адресу http://msdn.microsoft.com/xml/XSLGuide/.

    Internet Explorer 5.5 и ранних версий по умолчанию не поддерживает в точности синтаксис XSLT, поэтому нам нужно провести ряд модификаций в файлах 

    planets.xml
    и
    planets.xsl
    . (В следующей главе мы рассмотрим эту тему подробнее. Там приведены адреса, с которых можно загрузить пакеты обновленной поддержки XSLT.) Когда печаталась эта книга появился уже Internet Explorer 6.0. Я установил его и проверил работу; похоже, он поддерживает стандартный синтаксис XSLT (за тем исключением, что все еще требуется использовать тип «
    text/xsl
    » для таблиц стилей — таких как
    <?xml-stylesheet type="text/xsl" href="planets.xsl"?>
    вместо «
    text/xml
    »). Если вы все еще используете IE 5.5 или более ранний, вам нужно будет провести приведенные здесь и в следующей главе изменения. Если вы хотите избежать этого, используйте IE 6.0: кажется, этот браузер поддерживает полный синтаксис XSLT.

    Для работы с

    planets.xml
    в IE (в том числе и версии 6.0) мне пришлось преобразовать атрибут
    type
    в инструкции обработки
    <?xml-stylesheet?>
    из «
    text/xml
    » в «
    text/xsl
    » (предполагается, что файл
    planets.xsl
    расположен в том же каталоге, что и
    planets.xml
    , как указывает атрибут
    href
    в листинге 1.3).

    Листинг 1.3. Версия planets.xml для Microsoft Internet Explorer

    <?xml version="1.0"?>

    <?xml-stylesheet type="text/xsl" href="planets.xsl"?>

    <PLANETS>

     <PLANET>

      <NAME>Mercury</NAME> <MASS UNITS="(Earth = 1)">.0553</MASS>

      <DAY UNITS="days">58.65</DAY>

      <RADIUS UNITS="miles">1516</RADIUS>

      <DENSITY UNITS="(Earth = 1)">.983</DENSITY>

      <DISTANCE UNITS="million miles">43.4</DISTANCE><!--B перигелии-->

     </PLANET>

     <PLANET>

      <NAME>Venus</NAME>

      <MASS UNITS="(Earth = 1)">.815</MASS>

      <DAY UNITS="days">116.75</DAY>

      <RADIUS UNITS="miles">3716</RADIUS>

      <DENSITY UNITS="(Earth = 1)">.943</DENSITY>

      <DISTANCE UNITS="million miles">66.8</DISTANCE><!--B перигелии-->

     </PLANET>

     <PLANET>

      <NAME>Earth</NAME>

      <MASS UNITS="(Earth = 1)">1</MASS>

      <DAY UNITS="days">1</DAY>

      <RADIUS UNITS="miles">2107</RADIUS>

      <DENSITY UNITS="(Earth = 1)">1</DENSITY>

      <DISTANCE UNITS="million miles">128.4</DISTANCE><!--B перигелии-->

     </PLANET>

    </PLANETS>

    Теперь, если вы используете IE версии 5.5 или более ранней, вы должны также преобразовать таблицу стилей

    planets.xsl
    (но не для версии 6.0 и старше; в этом случает нужно только изменить атрибут type в инструкции обработки
    <?xml-stylesheet?>
    из «
    text/xml
    » в «
    text/xsl
    »). Мы рассмотрим, как это сделать, в следующей главе, а вот новая версия planets.xsl, которую следует использовать:

    Листинг 1.4. Версия planets.xsl для Microsoft Internet Explorer

    <?xml version="1.0"?>

    <xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl">

     <xsl:template match="/">

      <HTML>

       <HEAD>

        <TITLE>

         The Planets Table

        </TITLE>

       </HEAD>

       <BODY>

        <H1>

         The Planets Table

        </H1>

        <TABLE BORDER="2">

         <TR>

          <TD>Name</TD>

          <TD>Mass</TD>

          <TD>Radius</TD>

          <TD>Day</TD>

         </TR>

         <xsl:apply-templates/>

        </TABLE>

       </BODY>

      </HTML>

     </xsl:template>


     <xsl:template match="PLANETS">

      <xsl:apply-templates/>

     </xsl:template>


     <xsl:template match="PLANET">

      <TR>

       <TD><xsl:value-of select="NAME"/></TD>

       <TD><xsl:apply-templates select="MASS"/></TD>

       <TD><xsl:apply-templates select="RADIUS"/></TD>

       <TD><xsl:apply-templates select="DAY"/></TD>

      </TR>

     </xsl:template>


     <xsl:template match="MASS">

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

      <xsl:value-of select="@UNITS"/>

     </xsl:template>


     <xsl:template match="RADIUS">

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

      <xsl:value-of select="@UNITS"/>

     </xsl:template>


     <xsl:template match="DAY">

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

      <xsl:value-of select="@UNITS"/>

     </xsl:template>

    </xsl:stylesheet>

    Теперь можно непосредственно открыть planets.xml в Internet Explorer, как видно на рис. 1.3.

    Рис. 1.3. Осуществление XSLT-преобразования в Internet Explorer


    Хотя таким образом при помощи Internet Explorer можно работать с XSLT, при этом необходимо так изменять таблицу стилей, чтобы она удовлетворяла требованиям Internet Explorer. Поскольку Internet Explorer в текущий момент фактически не поддерживает XSLT, открывая документы XML при навигации, я не буду использовать этот браузер для XSLT-преобразований в книге (кроме специально оговоренных случаев). Для осуществления преобразований я стану использовать процессоры XSLT, такие как Saxon и Xalan, а если результаты будут представляться в формате HTML, то мы будем просматривать их в Internet Explorer.

    Интересно отметить, что существует способ провести настоящие XSLT-преобразования в Internet Explorer, не делая никаких специальных изменений в документах XML или XSL, даже не загружая и не устанавливая последний разборщик MSXML (как обсуждается в главе 2) — однако при этом нужно не осуществлять навигацию XML-документа, а обращаться к встроенному в Internet Explorer процессору XSLT, MSXML3, напрямую при помощи JavaScript.

    Работа с XSLT и JavaScript в Internet Explorer

    Процессор XSLT в Internet Explorer 5.5 является частью разборщика XML MSXML3, и если вы работаете напрямую с MSXML3 при помощи JavaScript, нет необходимости изменять исходные файлы

    planets.xml
    и
    planets.xsl
    (листинги 1.1 и 1.2), как мы это сделали в предыдущем разделе. Мы посмотрим, как это работает в главе 10, а здесь приведена web-страница
    xslt.html
    , которая при помощи JavaScript и MSXML3 осуществляет преобразование
    planets.xml
    с использованием
    planets.xsl
    и отображает результаты (заметьте, что вы можете модифицировать этот документ для использования ваших собственных документов XML и XSLT, не прибегая к написанию кода на JavaScript: достаточно заменить имена
    planets.xml
    и
    planets.xsl
    на названия ваших документов XML и XSL) (листинг 1.5).

    Листинг 1.5. Преобразование в Internet Explorer при помощи JavaScript

    <HTML>

     <HEAD>

      <TITLE>XSLT Using JavaScript</TITLE>

      <SCRIPT LANGUAGE="JavaScript">

       <!--

       function xslt() {

        var XMLDocument = new ActiveXObject('MSXML2.DOMDocument.3.0');

        var XSLDocument = new ActiveXObject('MSXML2.DOMDocument.3.0');

        var HTMLtarget = document.all['targetDIV'];

        XMLDocument.validateOnParse = true;

        XMLDocument.load('planets.xml');

        if (XMLDocument.parseError.errorCode != 0) {

         HTMLtarget.InnerHTML = "Error!";

         return false;

        }

        XSLDocument.validateOnParse = true;

        XSLDocument.load('planets.xsl');

        if (XSLDocument.parseError.errorCode != 0) {

         HTMLtarget.innerHTML = "Error!";

         return false:

        }

        HTMLtarget.innerHTML = XMLDocument.transformNode(XSLDocument);

        return true;

       }

       //-->

      </SCRIPT>

     </HEAD>

     <BODY onload="xslt()">

      <DIV ID="targetDIV"></DIV>

     </BODY>

    </HTML>

    В результате обработки этой web-страницы будет получен тот же результат, что и на рис. 1.3: она напрямую загружает файлы

    planets.xml
    и
    planets.xsl
    и применяет к ним разборщик MSXML3. Это в точности те же файлы
    planets.xml
    и
    planets.xsl
    , с которыми мы работали на протяжении этой главы, — в них нет изменений, необходимых при рассмотрении предыдущей темы, в которой мы непосредственно просматривали
    planets.xml
    в Internet Explorer. Дополнительная информация приведена в главе 10.

    ИСПОЛЬЗОВАНИЕ VBSCRIPT

    Если вам больше нравится VBScript, попробуйте использовать этот язык сценариев Internet Explorer: можно достичь таких же результатов.

    XSLT-преобразования на web-серверах

    Можно осуществлять XSLT-преобразования на web-сервере — так чтобы XML-документ был преобразован до того, как web-сервер отправит его браузеру. Здесь самое распространенное преобразование — это преобразование документа XML в HTML, но преобразования XML-XML на сервере также становятся все более и более распространенными.

    В отличие от остальных XSLT-преобразований, рассмотренных до сих пор в этой главе, при проведении XSLT-преобразований на web-сервере обычно необходимо прибегнуть к программированию. Существует три распространенных способа выполнять XSLT-преобразования на web-серверах: используя сервлеты Java, Java Server Pages (JSP) и Active Server Pages (ASP). В главе 10 мы подробно исследуем все эти три способа. Некоторые процессоры XSLT можно настроить для использования на web-серверах — вот начальный список:

    AXSL, www.javalobby.org/axsl.html. AXSL — серверный инструмент, преобразующий XML в HTML при помощи XSLT;

    • Microsoft XML Parser, http://msdn.microsoft.com/downloads/webtechnology/xml/msxml.asp. MSXML3 обеспечивает безопасный доступ к серверу по протоколу HTTP для работы с ASP;

    mod_xslt, http://modxslt.userworld.com. Простой модуль web-сервера Apache, использующий XSLT для получения содержимого XML. Для обработки XSLT используется процессор Sablotron;

    PXSLServlet, www.pault.com/Pxsl При помощи этого сервлета можно преобразовать XML в HTML с использованием XSLT. Он также позволяет читать и записывать данные в базу данных на основе SQL (через JDBC);

    xesalt, www.inlogix.de/products.html. Этот процессор XSLT существует в виде модуля для web-серверов Apache и IIS;

    XML Enabler, www.alphaworks.ibm.com/tech/xmlenabler. XML Enabler позволяет отправлять запросы сервлету, а при ответе сервлета XML Enabler может отформатировать данные при помощи различных таблиц стилей XSLT;

    XT, может быть использован как сервлет Java. Ему требуется сервлет-машина (servlet engine), реализующая, по крайней мере, версию 2.1 Java Servlet API. Класс-сервлет Java называется com.jclark.xsi.sax.XSLServlet.

    Следующий пример демонстрирует страницу JSP, активизирующую на web-сервере процессор Xalan. Xalan преобразует

    planets.xml
    в
    planets.html
    при помощи таблицы стилей
    planets.xsl
    . В коде затем считывается файл
    planets.html
    и отправляется обратно от web-сервера в браузер:

    <%@ page errorPage="error.jsp" language="java"

     contentType="text/html" import="org.apache.xalan.xslt.*:java.io.*" %>

    <%

     try {

      XSLTProcessor processor = XSLTProcessorFactory.getProcessor();

      processor.process(new XSLTInputSource("planets.xml"),

       new XSLTInputSource("planets.xsl"),

       new XSLTResultTarget("planets.html"));

     } catch(Exception e) {}

     FileReader filereader = new FileReader("planets.html");

     BufferedReader bufferedreader = new BufferedReader(filereader);

     String instring;

     while((instring = bufferedreader.readLine()) != null) { %>

    <%= instring %>

    <% }

     filereader.close();

    %>

    Результат можно увидеть на рис. 1.4: там изображен файл planets.html, отправленный в Internet Explorer web-сервером, на котором выполняется JSP. В главе 10 приведена дополнительная информация об использовании сервлетов Java, JSP и ASP для XSLT-преобразований на стороне сервера.

    Рис. 1.4. Преобразование XML на web-сервере 


    Мы рассмотрели, как выполнить XSLT-преобразования при помощи отдельных процессоров XSLT в браузере Internet Explorer и на web-серверах. Однако единственное преобразование, которое мы до сих пор сделали, — это преобразование XML в HTML. Хотя сейчас это наиболее популярное преобразование, преобразования из XML в XML также становятся все более распространенными. 

    Преобразования из XML в XML

    Преобразования XML-XML иногда рассматриваются как SQL для Интернета, поскольку они позволяют оперировать запросами к базе данных в XML-документах. Ниже приведен пример. Используемый нами файл

    planets.xml
    содержит достаточно много данных о каждой планете:

    <?xml version="1.0"?>

     <PLANETS>

      <PLANET>

       <NAME>Mercury</NAME>

       <MASS UNITS="(Earth = 1)">.0553</MASS>

       <DAY UNITS="days">58.65</DAY>

       <RADIUS UNITS="miles">1516</RADIUS>

       <DENSITY UNITS="(Earth = 1)">.983</DENSITY>

       <DISTANCE UNITS="million miles">43.4</DISTANCE><!--B перигелии-->

      </PLANET>

      <PLANET>

       <NAME>Venus</NAME>

       <MASS UNITS="(Earth = 1)">.815</MASS>

       <DAY UNITS="days">116.75</DAY>

       <RADIUS UNITS="miles">3716</RADIUS>

       <DENSITY UNITS="(Earth = 1)">.943</DENSITY>

       <DISTANCE UNITS="million miles">66.8</DISTANCE><!--B перигелии-->

      </PLANET>

      .

      .

      .

    Что, если нам нужно только подмножество этих данных — например, имя и масса каждой планеты? В терминах баз данных

    planets.xml
    представляет собой таблицу, и мы хотим создать новую таблицу, содержащую подмножество данных из первой. В базах данных для этого служит язык SQL, а для документов XML мы можем использовать XSLT.

    В листинге 1.6 приведена новая версия файла

    planets.xsl
    , осуществляющая требуемое преобразование: выбираются только имя и масса каждой планеты, которые отправляются в выходной документ. В особенности обратите внимание на то, что мы осуществляем преобразование XML-XML, поэтому я использую элемент
    <xsl:output>
    , атрибут
    method
    которого установлен в «xml» (фактически тип выходных данных обычно и есть XML, но если процессор XSLT видит тег
    <html>
    , он обычно по умолчанию генерирует HTML).

    Листинг 1.6. Выбор только имени и массы

    <?xml version="1.0"?>

    <xsl:stylesheet version="1.0"

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

     <xsl:strip-space elements="*"/>

     <xsl:output method="xml" indent="yes"/>


     <xsl:template match="/">

      <xsl:apply-templates/>

     </xsl:template>


     <xsl:template match="PLANETS">

      <xsl:apply-templates/>

     </xsl:template>


     <xsl:template match="PLANET">

      <xsl:copy>

       <xsl:apply-templates/>

      </xsl:copy>

     </xsl:template>


     <xsl:template match="MASS">

      <xsl:copy>

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

       <xsl:value-of select="@UNITS"/>

      </xsl:copy>

     </xsl:template>


     <xsl:template match="RADIUS"> </xsl:template>

     <xsl:template match="DAY"> </xsl:template>

     <xsl:template match="DENSITY"> </xsl:template>

     <xsl:template match="DISTANCE"> </xsl:template>

    </xsl:stylesheet>

    Далее я применяю эту новую версию

    planets.xsl
    к
    planets.xml
    , используя Xalan, чтобы создать новый документ XML,
    new.xml
    :

    C:\planets>java org.apache.xalan.xslt.Process -IN planets.xml -XSL planets.xsl -OUT new.xml

    Вот как выглядит результирующий документ XML,

    new.xml
    :

    <?xml version="1.0" encoding="UTF-8"?>

    <PLANET>

     <NAME>Mercury</NAME>

     <MASS>.0553(Earth = 1)</MASS>

    </PLANET>

    <PLANET>

     <NAME>Venus</NAME>

     <MASS>.815(Earth = 1)</MASS>

    </PLANET>

    <PLANET>

     <NAME>Earth</NAME>

     <MASS>1(Earth = 1)</MASS>

    </PLANET>

    Отметьте, что этот файл выглядит во многом похоже на исходный файл

    planets.xml
    , за тем исключением, что каждый элемент
    <PLANET>
    содержит только элементы
    <NAME>
    и
    <MASS>
    . Таким образом, мы смогли получить подмножество данных первоначального документа XML.

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

    В дополнение следует сказать, что многие программы используют XML для обмена данными в Интернете, и, так как обычно они форматируют свои документы XML по-разному, еще одним популярным способом использования преобразований XML-XML в Интернете является преобразование XML из формата, используемого одной программой, в формат другой программы.

    Преобразования из XML в XHTML

    Хотя во многих книгах рассматриваются исключительно преобразования из XML в HTML, правда состоит в том, что консорциум W3C этому не очень-то рад. Консорциум пытался сместить акцент с HTML (который они первоначально стандартизировали) на свою новую спецификацию, XHTML, представляющую собой совместимую с XML переработку HTML. Документы XHTML являются также хорошо сформированными допустимыми документами XML, поэтому преобразование из XML в XHTML в действительности есть преобразование из XML в специальный вид XML.

    Хотя W3C активно продвигает XHTML, этот формат еще не стал широко распространенным. Поэтому в данной книге я в основном рассматриваю HTML; но поскольку W3C утверждает, что следует использовать XHTML, я кратко рассмотрю эту тему здесь и в главе 6. Если вы хотите узнать больше о XHTML, прочитайте рекомендацию W3C XHTML 1.0 по адресу www.w3.org/TR/xhtml1/, а также рекомендацию XHTML 1.1 по адресу www.w3.org/TR/xhtml11/.

    Пусть W3C и утверждает, что XML следует преобразовывать в XHTML, а не в HTML, я не видел ни одного работающего примера на их web-узле. Представленные ими примеры на самом деле не генерируют допустимых документов XHTML. Тем не менее, поддержка преобразований XML-XHTML предположительно будет встроена в XSLT 2.0, и желаемое W3C явление, вероятно, нас вскоре ждет.

    Более подробно мы рассмотрим этот тип преобразования в главе 6, а здесь я приведу рабочую версию таблицы

    planets.xsl
    , которая создает допустимую XHTML-версию
    planets.html
    (листинг 1.7). Заметьте, что на этот раз в элементе
    <xsl:output>
    нужно использовать атрибут
    doctype-public
    , и хотя это корректный код XSLT, не все процессоры XSLT смогут его обработать.

    Листинг 1.7. Преобразование XML-XHTML

    <?xml version="1.0"?>

    <xsl:stylesheet version="1.0"

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

     <xsl:output method="xml"

      doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"

      doctype-public="-//W3C//DTD XHTML 1.0 Transitional//EN" indent="yes"/>


     <xsl:template match="/PLANETS">

      <html>

       <head>

        <title>

         The Planets Table

        </title>

       </head>

       <body>

        <h1>

         The Planets Table

        </h1>

        <table>

         <tr>

          <td>Name</td>

          <td>Mass</td>

          <td>Radius</td>

          <td>Day</td>

         </tr>

         <xsl:apply-templates/>

        </table>

       </body>

      </html>

     </xsl:template>


     <xsl:template match="PLANET">

      <tr>

       <td><xsl:value-of select="NAME"/></td>

       <td><xsl:apply-templates select="MASS"/></td>

       <td><xsl:apply-templates select="RADIUS"/></td>

       <td><xsl:apply-templates select="DAY"/></td>

      </tr>

     </xsl:template>


     <xsl:template match="MASS">

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

      <xsl:text> </xsl:text>

      <xsl:value-of select="@UNITS"/>

     </xsl:template>


     <xsl:template match="RADIUS">

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

      <xsl:text> </xsl:text>

      <xsl:value-of select="@UNITS"/>

     </xsl:template>


     <xsl:template match="DAY">

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

      <xsl:text> </xsl:text>

      <xsl:value-of select="@UNITS"/>

     </xsl:template>

    </xsl:stylesheet>

    Я преобразую

    planets.xml
    в допустимый документ XHTML,
    planets.html
    , используя этот новый вариант
    planets.xsl
    и процессор XSLT XT. Сначала нужно корректно установить переменную
    classpath
    :

    С:\>set classpath=c:xerces\xerces-1_3_0\xerces.jar;с:\xt\xt.jar;

    Затем я провожу преобразование:

    C:\planets>java -Dcom.jclark.xsl.sax.parser=org.apache.xerces.parsers.SAXParser.com.jclark xsl.sax.Driver planets.xml planets.xsl planets.html

    В результате будет получен файл XHTML,

    planets.html
    :

    <?xml version="1.0" encoding="UTF-8"?>

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"

     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

    <html>

     <head>

      <title>

       The Planets Table

      </title>

     </head>

     <body>

      <h1>

       The Planets Table

      </h1>

      <table>

       <tr>

        <td>Name</td>

        <td>Mass</td>

        <td>Radius</td>

        <td>Day</td>

       </tr>

       <tr>

        <td>Mercury</td>

        <td>.0553 (Earth =  1)</td>

        <td>1516 miles</td>

        <td>58.65 days</td>

       </tr>

       <tr>

        <td>Venus</td>

        <td>.815 (Earth = 1)</td>

        <td>3716 miles</td>

        <td>116.75 days</td>

       </tr>

       <tr>

        <td>Earth</td>

        <td>1 (Earth = 1)</td>

        <td>2107 miles</td>

        <td>1 days</td>

       </tr>

      </table>

     </body>

    </html>

    Этот документ,

    planets.html
    , действительно является хорошо сформированным и допустимым документом формата XHTML 1.0 (самый популярный вид XHTML) в соответствии с программой проверки допустимости HTML и XHTML консорциума W3C. Средство проверки HTML/XHTML можно найти в Интернете по адресу http://validator.w3.org/file-upload.html. В главе 6 представлена дополнительная информация о преобразованиях XML-XHTML.

    К настоящему моменту мы провели обзор работы XSLT, рассмотрев преобразования из XML в HTML, XML и XHTML. Далее в книге мы познакомимся с такими преобразованиями XSLT, как преобразования из XML в RTF (форматированный текст, Rich Text Format), в простой текст, XSL-FO, JavaScript, в базы данных на основе SQL, а также и другие. Кроме того, существует много дополнительного материала по XSLT, о котором вам следует знать, и теперь мы освоимся в разнообразных видах ресурсов XSLT, которые можно найти в Интернете.

    Ресурсы XSLT

    В Интернете можно найти огромное количество нужных нам сведений. Имейте в виду, что все приведенные далее адреса URL легко могут измениться; списки будут актуальны столь долго, сколько этого будут хотеть люди, занимающиеся поддержкой перечисленных web-узлов.

    Спецификации, руководства и примеры XSLT

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

    • www.w3.org/Style/XSL/. Основная страница W3C по XSL;

    • www.w3.org/TR/xslt. Спецификация XSLT 1.0;

    • www.w3.org/TR/xslt11. Рабочий проект XSLT 1.1, упрощающий работу с расширениями XSLT и добавляющий поддержку рекомендации W3C XBase;

    • www.w3.org/TR/xslt20req. Требования XSLT 2.0, в которых приводится обзор XSLT 2.0, включающий дополнительную поддержку схем XML;

    • www.w3.org/TR/xsl/. Форматирующие объекты XSL;

    • www.w3.org/Style/2000/xsl-charter.html. Цели комитета XSL;

    • www.w3.org/TR/xpath. Рекомендация XPath 1.0,

    • www.w3.org/TR/xpath20req. Требования XPath, в которых приводится обзор XPath 2.0, включающего дополнительную поддержку XSLT 2.0;

    • http://lists.w3.org/Archives/Public/www-xml-stylesheet-comments/. Список таблиц стилей XML консорциума W3C.

    Многие руководства по XSLT и примеры доступны также и из других источников — вот начальный список:

    • http://http.cs.berkeley.edu/~wilensky/CS294/xsl-examples.html. Ряд примеров по XSLT;

    • http://msdn.microsoft.com/xml/reference/xsl/Examples.asp. Примеры шаблонов XSLT, используемых в совпадающих элементах;

    • http://msdn.microsoft.com/xml/XSLGuide/xsl-overview.asp. Начальное описание работы с XSLT;

    • www.lists.ic.ac.uk/hypermail/xml-dev/xml-dev-Nov-1999/0371.html. Руководство по XSLT в виде презентации PowerPoint;

    • www.mulberrytech.com/xsl/xsl-list/. Открытый список, посвященный обсуждению XSL;

    • www.nwalsh.com/docs/tutorials/xsl/xsl/slides.html. Руководство по XSLT;

    • www.oasis-open.org/cover/xsl.html. Описание текущих событий вокруг XSLT;

    • www.w3.org/Style/Activity. Внушительный список страниц, посвященных таблицам стилей W3C;

    • www.xml101.com/xsl/. Полноценный набор справочников по XSLT;

    • www.xslinfo.com. Полезный набор ресурсов по XSLT, собранных Джеймсом Таубером (James Tauber);

    • www.zvon.org/xxl/XSLTutorial/Books/Bookl/bookInOne.html. Справочники по XSLT, XPath, XML, WML и другим языкам.

    Мне известна однако только одна группа новостей Usenet по XSLT, и она поддерживается Microsoft — microsoft.public.xsl. Со временем появятся и другие. Для вас может также представлять интерес список почтовой рассылки по XSL — www.mulberrytech.com/xsl/xsl-list.

    Помимо спецификаций, руководств и примеров W3C, в Интернете можно найти большое число редакторов создания таблиц стилей XSLT.

    Редакторы XSLT

    Для создания используемых в книге документов XML и XSL достаточно обычного текстового редактора, такого как vi, emacs, pico, Windows Notepad или Windows WordPad. По умолчанию предполагается, что документы XML и XSL должны быть написаны в Unicode, хотя на практике их можно создавать и в ASCII, и практически все документы до сих пор были написаны именно в ASCII. Следите только за тем, чтобы при создании документа сохранять его в формате простого текста вашего редактора.

    РАБОТА С WORDPAD

    У текстовых редакторов Windows, таких как WordPad, есть раздражающая особенность — если они не узнают данное вами файлу расширение, они добавляют к имени файла расширение .txt. Для файлов .xml и .xsl это не проблема, поскольку WordPad понимает эти расширения, но если вы попытаетесь сохранить документы, созданные при работе над книгой, с расширением, не распознаваемым WordPad, ко всем ним редактор добавит расширение .txt. Чтобы этого не происходило, при сохранении документа заключайте имя файла в кавычки: "file.abc".

    Будет, однако, намного проще использовать настоящий редактор XML, специально предназначенный для обработки XML-документов. Вот список программ редактирования документов XML:

    Adobe FrameMaker, www.adobe.com. Adobe представляет прекрасный, но дорогой редактор FrameMaker с поддержкой XML;

    XML Pro, www.vervet.com/. Дорогой, но мощный редактор XML;

    XML Writer, на диске, XMLWriter http://xmlwriter.net/. Выделение ключевых слов цветом, удобный интерфейс;

    XML Notepad, msdn.microsoft.com/xml/notepad/intro.asp. Бесплатный редактор XML от Microsoft, немного неудобный в работе;

    eNotepad, www.edisys.com/Products/eNotepad/enotepad.asp. Аналог WordPad, имеющий хорошие средства работы с XML и удобный пользовательский интерфейс;

    XMetal from SoftQuad, www.xmetal.com. Дорогой, но очень мощный редактор XML, любимый редактор многих авторов;

    XML Spy, www.xmlspy.com/. Имеет хороший пользовательский интерфейс и прост в работе;

    Arbortext's Epic, www.arbortext.com/. Мощный редактор, дорогой, обладает богатыми возможностями настройки.

    Редактор XML Spy изображен на рис. 1.5, XML Writer — на рис. 1.6, a XML Notepad — на рис. 1.7.

    Рис. 1.5. Редактирование XML в XML Spy 


    Рис. 1.6. Редактирование XML в XML Writer


    Рис. 1.7. Редактирование XML в XML Notepad


    Существуют и специальные редакторы XSLT. Вот начальный список:

    • http://lists.w3.org/Archives/Public/xsl-editors/. Список обсуждения редакторов XSL на web-узле W3C;

    • IBM XSL Editor, www.alphaworks.ibm.com/tech/xsleditor. Редактор таблиц стилей XSLT на Java, обладающий визуальным интерфейсом для написания таблиц стилей и выражений выбора и совпадения. Однако необходимо, чтобы была установлена поддержка Java 2 version 1.1 (не 1.2 или 1.3);

    Stylus, www.exceloncorp.com/products/excelon_stylus.html. Stylus включает редактор таблиц стилей XSLT;

    Visual XML Transformation Tool, www.alphaworks.ibm.com/aw.nsf/techmain/visualxmltools. Visual XML Transformation Tool генерирует для вас XSLT для преобразования исходных документов в результирующие;

    Whitehill Composer, www.whitehill.com/products/prod4.html. WYSIWYG средство генерации таблиц стилей XSLT с поддержкой перетаскивания;

    XL-Styler, www.seeburger.de/xml. Включает выделение ключевых слов, завершение тегов, предварительный просмотр HTML и многое другое;

    XML Cooktop, http://xmleverywhere.com/cooktop/. Этот редактор только что выпущен и выглядит прилично. Включены средства разработки и проверки таблиц стилей XSLT;

    XML Spy, www.xmlspy.com/. При помощи этого редактора XML можно также редактировать XSLT;

    • XML Style Wizard, www.infoteria.com/en/contents/download. Средство генерации файлов XSLT при помощи мастера, который изучает данные XML и задает вопросы пользователю;

    xslide, www.mulberrytech.com/xsl/xslide. Поддерживает режим редактирования XSLT для Emacs;

    XSpLit, www.percussion.com/xmlzone/technology.htm. Позволяет вам разделять документы HTML на определения DTD XML и таблицы стилей XSLT.

    Утилиты XSLT

    В Интернете существует также много утилит XSLT — в следующем списке перечислены наиболее известные:

    Microsoft XSL API Extension, http://msdn.microsoft.com/downloads/webtechnology/xml/xslisapi.asp. Упрощает задачу выполнения XSLT-преобразований на стороне сервера;

    • Microsoft XSL-to-XSLT Converter, http://msdn.microsoft.com/downloads/webtechnology/xml/xsltconv.asp. Преобразует XSL в XSLT;

    XSL Lint, www.nwalsh.com/xsl/xslint. XSL Lint осуществляет проверку синтаксиса XSLT, позволяя обнаружить ошибки многих типов;

    XSL Trace, www.alphaworks.ibm.com/tech/xsltrace. Этот продукт позволяет пользователю проходить по шагам XSLT визуально;

    • XSLT Compiler, www.sun.com/xml/developers/xsltc. Преобразует файлы XSLT в классы Java для преобразования файлов XML;

    • XSLT test tool, www.netcrucible.com/xslt/xslt-tool.htm. Этот инструмент дает возможность запускать XSLT в различных популярных процессорах, что позволяет проверить, корректно ли ваше преобразование работает на всех системах. Существует возможность вызывать из командной строки MSXML3 от Microsoft, как и любой другой процессор XSLT;

    XSLTC, www3.cybercities.com/x/xsltc. Компилирует таблицы стилей XSLT в код на С++. Основан на Transformix, процессоре XSLT фирмы Mozilla;

    • XSLTracer, www.zvon.org/xxl/XSLTracer/Output/introduction.html. XSLTracer — средство на языке Perl, демонстрирующее процесс обработки файлов XML при помощи таблиц стилей XSLT.

    На этом завершается обзор XSLT в данной главе. Как видите, нас ждет огромный набор сведений. В оставшейся части главы будет представлен обзор XSL-FO.

    Форматирующие объекты XSL: XSL-FO

    Самая популярная часть XSL — это XSLT-преобразования, с которыми мы уже познакомились в этой главе. Другая, существенно большая часть — это форматирующие объекты XSL, XSL-FO (XSL Formatting Objects).

    При помощи XSL-FO можно с точностью до миллиметра задать форматирование и способ отображения XML-документа. Для документов можно задать все, что угодно: шрифт текста, место, выравнивание, цвет, индексы, размер полей и многое другое. Работа с XSL-FO похожа на процесс создания вручную текстового процессора, и из-за сложности XSL-FO некоторые избегают их использовать. В главах 11 и 12 мы изучим то, что могут предложить нам XSL-FO, и способы работы с ними.

    Ресурсы XSL-FO

    Ряд ресурсов XSL-FO доступен в Интернете, но их гораздо меньше, чем ресурсов XSLT. Вот основные:

    • www.w3.org/TR/xsl. Основная рекомендация-кандидат XSL, включающая также XSL-FO;

    • http://lists.w3.org/Archives/Public/www-xsl-fo/. Список заметок W3C для XSL-FO.

    Так же, как существуют процессоры XSLT, существуют и процессоры XSL-FO. Ни один из них, однако, не приближается к тому, чтобы реализовать стандарт полностью. Вот начальный список процессоров XSL-FO:

    • FOP, http://xml.apache.org/fop. Приложение Java, которое считывает дерево форматирующих объектов XSL (создаваемое разборщиком XML) и создает документ PDF;

    • PassiveTeX, http://users.ox.ac.uk/~rahtz/passivetex. Пакет ТеХ, форматирующий вывод XSL-FO в PDF. Использует разборщик XML xmltex Дэвида Карлайла (David Carlisle);

    • SAXESS Wave, http://www.saxess.com/wave/index.html. Конвертер XML-Shockwave/Flash;

    • TeXML, http://www.alphaworks.ibm.com/tech/texml. Преобразует документы XML в формат ТеХ;

    • Unicorn Formatting Objects (UFO), http://www.unicorn-enterprises.com. Процессор форматирующих объектов XSL, написанный на С++. Может генерировать вывод в форматах PostScript, PDF и других форматах, поддерживаемых драйверами DVI ТеХ;

    • XEP, http://www.renderx.com/F02PDF.html. Процессор XSL-FO на Java, преобразующий форматирующие объекты XSL в PDF или PostScript.

    В этой книге я буду пользоваться FOP (formatting objects processor, процессор форматирующих объектов) — вероятно, самым распространенным процессором XSL-FO. Основанный на Java процессор XSL-FO берет XML-документ, написанный для использования форматирующих объектов XSL-FO, и преобразует его в формат PDF, который можно просмотреть в Adobe Acrobat. Хотя XSLT-преобразования часто производятся в HTML, для XSL-FO это работать не будет, потому что в этом случае указывается каждый аспект формата представления документа вплоть до мельчайших деталей, а для этих целей гораздо лучше подходит формат PDF.

    Форматирование документа XML

    Для форматирования

    planets.xml
    в
    planets.pdf
    мы можем воспользоваться форматирующими объектами XSL-FO, представленными в главе 12. Например, вот как мы можем отобразить название первой планеты, Меркурия, при помощи форматирующих объектов XSL-FO
    flow
    и
    block
    :

    <fo:page-sequence master-name="page">

     <fo:flow flow-name="xsl-region-body">

      <fo:block font-family="sans-serif" line-height="48pt"

       font-size="36pt" font-weight="bold">

       Mercury

      </fo:block>

      .

      .

      .

    Однако создание всего документа целиком при помощи форматирующих объектов XSL — непростая задача, за исключением коротких документов. W3C предвидел эти трудности, и это одна из главных причин, по которой консорциумом был представлен язык преобразований, XSLT. В частности, можно создать таблицу стилей и при помощи XSLT преобразовать XML-документ так, чтобы он использовал форматирующие объекты XSL.

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

    Чтобы пояснить все вышесказанное, ниже приведен пример работы с XML-документом, с которым мы уже встречались в этой главе,

    planets.xml
    :

    <?xml version="1.0"?>

    <PLANETS>

     <PLANET>

      <NAME>Mercury</NAME>

      <MASS UNITS="(Earth = 1)">.0553</MASS>

      <DAY UNITS="days">58.65</DAY>

      <RADIUS UNITS="miles">1516</RADIUS>

      <DENSITY UNITS="(Earth = 1)">.983</DENSITY>

      <DISTANCE UNITS="million miles">43.4</DISTANCE><!--B перигелии-->

     </PLANET>

     <PLANET>

      <NAME>Venus</NAME>

      <MASS UNITS="(Earth = 1)">.815</MASS>

      <DAY UNITS="days">116.75</DAY>

      <RADIUS UNITS="miles">3716</RADIUS>

      <DENSITY UNITS="(Earth = 1)">.943</DENSITY>

      <DISTANCE UNITS="million miles">66.8</DISTANCE><!--B перигелии-->

     </PLANET>

     <PLANET>

      <NAME>Earth</NAME>

      <MASS UNITS="(Earth = 1)">1</MASS>

      <DAY UNITS="days">1</DAY>

      <RADIUS UNITS="miles">2107</RADIUS>

      <DENSITY UNITS="(Earth = 1)">1</DENSITY>

      <DISTANCE UNITS="million miles">128.4</DISTANCE><!--B перигелии-->

     </PLANET>

    </PLANETS>

    В этом примере я воспользуюсь таблицей стилей XSLT — мы посмотрим, как ее создавать, в главе 11 — для преобразования

    planets.xml
    так, чтобы он использовал форматирующие объекты. Затем при помощи процессора FOP я преобразую новый документ в файл PDF. Мы также посмотрим, как форматированный документ выглядит в Adobe Acrobat.

    Таблица стилей XSLT

    В листинге 1.8 приведена таблица стилей

    planetsPDF.xcl
    , которая берет данные из
    planets.xml
    и форматирует их в файл PDF,
    planets.pdf
    . В этом случае для текста я использую крупный шрифт — 36 пунктов.

    Листинг 1.8. Преобразование XML-XSL-FO

    <?xml version="1.0"?>

    <xsl:stylesheet

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

     xmlns:fo="http://www.w3.org/1999/XSL/Format" version="1.0">


     <xsl:template match="PLANETS">

      <fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">

       <fo:layout-master-set>

        <fo:simple-page-master master-name="page" page-height="400mm"

         page-width="300mm" margin-top="10mm" margin-bottom="10mm"

         margin-left="20mm" margin-right="20mm">

         <fo:region-body

          margin-top="0mm" margin-bottom="10mm"

          margin-left="0mm" margin-right="0mm"/>

         <fo:region-after extent="10mm"/>

        </fo:simple-page-master>

       </fо:layout-master-set>

       <fo:page-sequence master-name="page">

        <fo:flow flow-name="xsl-region-body">

         <xsl:apply-templates/>

        </fo:flow>

       </fo:page-sequence>

      </fo:root>

     </xsl:template>


     <xsl:template match="PLANET/NAME">

      <fo:block

       font-weight="bold" font-size="36pt" line-height="48pt"

       font-family="sans-serif">

       Name:

       <xsl:apply-templates/>

      </fo:block>

     </xsl:template>


     <xsl:template match="PLANET/MASS">

      <fo:block

       font-size="36pt" line-height="48pt"

       font-family="sans-serif">

       Mass (Earth = 1):

       <xsl:apply-templates/>

      </fo:block>

     </xsl:template>


     <xsl:template match="PLANET/DAY">

      <fo:block

       font-size="36pt" line-height="48pt"

       font-family="sans-serif">

       Day (Earth = 1):

       <xsl:apply-templates/>

      </fo:block>

     </xsl:template>


     <xsl:template match="PLANET/RADIUS">

      <fo:block

       font-size="36pt" line-height="48pt"

       font-family="sans-serif">

       Radius (in miles):

       <xsl:apply-templates/>

      </fo:block>

     </xsl:template>


     <xsl:template match="PLANET/DENSITY">

      <fo:block

       font-size="36pt" line-height="48pt"

       font-family="sans-serif">

       Density (Earth = 1):

       <xsl:apply-templates/>

      </fo:block>

     </xsl:template>


     <xsl:template match="PLANET/DISTANCE">

      <fo:block

       font-size="36pt" line-height="48pt"

       font-family="sans-serif">

       Distance (million miles):

       <xsl:apply-templates/>

      </fo:block>

     </xsl:template>

    </xsl:stylesheet>

    Преобразование документа в представление с форматирующими объектами

    Для того чтобы преобразовать

    planets.xml
    в документ, использующий форматирующие объекты, который я назвал
    planets.fo
    , достаточно всего лишь применить таблицу стилей
    planetsPDF.xsl
    . Это можно сделать при помощи техник XSLT, уже рассмотренных в этой главе.

    Например, чтобы создать

    planets.fo
    при помощи Xalan, в Windows сначала нужно установить
    classpath
    :

    C:\>set classpath=c:\xalan\xalan-1_2_0_0\bin\xalan.jar; c:\xalan\xalan-j_2_0_0\bin\xerces.jar

    Затем применить

    planetsPDF.xsl
    к
    planets.xml
    для генерации
    planets.fo
    :

    C:\planets>java org.apache.xalan.xslt.Process -IN planets.xml -XSL planetsPDF.xsl -OUT planets.fo

    Для задания форматирования документ

    planets.fo
    использует форматирующие объекты XSL. Вот как выглядит файл
    planets.fo
    (листинг 1.9):

    Листинг 1.9. planets.fo

    <?xml version="1.0" encoding="UTF-8"?>

    <fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">

     <fo:layout-master-set>

      <fo:simple-page-master

       margin-right="20mm" margin-left="20mm"

       margin-bottom="10mm" margin-top="10mm"

       page-width="300mm" page-height="400mm"

       master-name="page">

       <fo:region-body

        margin-right="0mm" margin-left="0mm"

        margin-bottom="10mm" margin-top="0mm"/>

       <fo:region-after extent="10mm"/>

      </fo:simple-page-master>

     </fо:layout-master-set>

     <fo:page-sequence master-name="page">

      <fo:flow flow-name="xsl-region-body">

       <fo:block

        font-family="sans-serif" line-height="48pt"

        font-size="36pt" font-weight="bold">

        Name: Mercury

       </fo:block>

       <fo:block

        font-family="sans-serif" line-height="48pt"

        font-size="36pt">

        Mass (Earth = 1): .0553

       </fo-block>

       <fo:block

        font-family="sans-serif" line-height="48pt"

        font-size="36pt">

        Day (Earth = 1): 58.65

       </fo:block>

       <fo:block

        font-family="sans-serif" line-height="48pt"

        font-size="36pt">

        Radius (in miles): 1516

       </fo:block>

       <fo:block

        font-family="sans-serif" line-height="48pt"

        font-size="36pt">

        Density (Earth = 1):.983

       </fo:block>

       <fo:block

        font-family="sans-serif" line-height="48pt"

        font-size="36pt">

        Distance (million miles): 43.4

       </fo:block>

       <fo:block

        font-family="sans-serif" line-height="48pt"

        font-size="36pt" font-weight="bold">

        Name: Venus

       </fo:block>

       <fo:block

        font-family="sans-serif" line-height="48pt"

        font-size="36pt">

        Mass (Earth = 1): .815

       </fo:block>

       <fo:block

        font-family="sans-serif" line-height="48pt"

        font-size="36pt">

        Day (Earth = 1): 116.75

       </fo:block>

       <fo:block

        font-family="sans-serif" line-height="48pt"

        font size="36pt">

        Radius (in miles): 3716

       </fo:block>

       <fo:block

        font-family="sans-serif" line-height="48pt"

        font-size="36pt">

        Density (Earth = 1): .943

       </fo:block>

       <fo:block

        font-family="sans-serif" line-height="48pt"

        font-size="36pt">

        Distance (million miles): 66.8

       </fo-block>

       <fo:block

        font-family="sans-serif" line-height="48pt"

        font-size="36pt" font-weight="bold">

        Name: Earth

       </fo:block>

       <fo:block

        font-family="sans-serif" line-height="48pt"

        font-size="36pt">

        Mass (Earth = 1): 1

       </fo:block>

       <fo:block

        font-family="sans-serif" line-height="48pt"

        font-size="36pt">

        Day (Earth = 1):

       </fo:block>

       <fo:block

        font-family="sans-serif" line-height="48pt"

        font-size="36pt">

        Radius (in miles): 2107

       </fo:block>

       <fo:block

        font-family="sans-serif" line-height="48pt"

        font-size="36pt">

        Density (Earth = 1):

       </fo:block>

       <fo:block

        font-family="sans-serif" line-height="48pt"

        font-size="36pt">

        Distance (million miles): 128.4

       </fo:block>

      </fo:flow>

     </fo:page-sequence>

    </fo:root>

    Итак, мы успешно создали

    planets.fo
    . Как нам теперь с его помощью создать форматированный файл PDF?

    Создание форматированного документа

    Чтобы обработать

    planets.fo
    и создать форматированный (formatted) документ, я воспользуюсь процессором FOP Джеймса Таубера (James Tauber), который был подарен им проекту Apache XML Project.

    Главная страница процессора — http://xml.apache.org/fop; в настоящий момент FOP можно загрузить с http://xml.apache.org/fop/download.html. Пакет FOP, включая документацию, поставляется в формате zip, поэтому сначала его нужно распаковать FOP реализован как JAR-файл Java,

    fop.jar
    , здесь я буду использовать FOP версии 0.15.

    FOP можно запустить из командной строки, используя класс Java, на момент написания книги называвшийся

    org.apache.fop.apps.CommandLine
    . Нужно предоставить разборщик XML — я буду использовать разборщик Xerces на Java в файле
    xerces.jar
    (он поставляется вместе с Xalan). Давайте рассмотрим, как в Windows, используя Java, при помощи FOP преобразовать
    planets.fo
    в
    planets.pdf
    : в данном случае я указываю переменной
    classpath
    ключом
    -ср
    включить файл
    xerces.jar
    , а также два необходимых JAR-файла, входящих в состав загружаемого пакета FOP —
    fop.jar
    и
    w3c.jar
    . (В этом примере предполагается, что все файлы
    fop.jar
    ,
    xerces.jar
    и
    w3c.jar
    расположены в каталоге
    C:\planets
    ; если это не так, укажите полные пути к ним.)

    C:\planets>java -ср fop.jar:xerces.jar:w3c.jar org.apache.fop apps.CommandLine planets.fo planets.pdf
     

    Получившийся файл,

    planets.pdf
    , можно просмотреть в средстве чтения файлов PDF Adobe Acrobat Reader, как изображено на рис. 1.8. (Acrobat PDF Reader можно бесплатно загрузить с www.adobe.com/products/acrobat/readermain.html.) Документ
    planets.xml
    изображен на рисунке отформатированным в соответствии с таблицей стилей
    planetsPDF.xsl
    .

    Рис. 1.8. Документ PDF, созданный при помощи форматирующих объектов 


    Формат PDF — хороший формат для вывода форматирующих объектов, хотя он и обладает рядом ограничений — например, он не способен обрабатывать динамические таблицы, которые могут разворачиваться или сворачиваться по щелчку мыши, или интерактивные многоадресные ссылки (а ведь и те, и другие входят в спецификацию форматирующих объектов). Хотя в основных браузерах XSL-FO поддерживается довольно слабо, ожидается, что в будущем ситуация изменится, и браузеры будут поддерживать XSL-FO.

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







     


    Главная | В избранное | Наш E-MAIL | Добавить материал | Нашёл ошибку | Наверх