KnigaRead.com/

Стивен Холзнер - XSLT

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

   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:xalanxalan-1_2_0_0binxalan.jar; c:xalanxalan-j_2_0_0binxerces.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, — прямо со следующей главы.

Глава 2

Создание и применение таблиц стилей

В предыдущей главе был представлен обзор XSLT. В этой главе мы начинаем детальную работу с ним. Мы собираемся научиться рассматривать документы в терминах XSLT, структурировать таблицу стилей XSLT и встраивать в документы таблицы стилей, В этой главе будет дано введение в шаблоны таблиц стилей, которые образуют основу таблиц стилей XSLT. Шаблоны реализуют фактические правила, которые вам требуется применить к данным; более подробно мы рассмотрим их в следующей главе.

Глава открывается систематическим рассмотрением таблиц стилей, и, несомненно, начинать следует с представления документа XML с точки зрения таблицы стилей.

Деревья и узлы

При работе с XSLT следует перестать мыслить в терминах документов и начать — в терминах деревьев. Дерево представляет данные в документе в виде множества узлов — элементы, атрибуты, комментарии и т.д. трактуются как узлы — в иерархии, и в XSLT структура дерева соответствует рекомендации XPath W3C (www.w3.org/TR/xpath). В данной главе мы рассмотрим деревья и узлы концептуально, а в главах 3 и 4 я дам формальное введение в XPath и его связь с XSLT. Выражения XPath, записываемые в терминах деревьев и узлов, используются для поиска данных в XML-документах.

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