Форматирование документа XML
Для форматирования planets.xml
в planets.pdf
мы можем воспользоваться форматирующими объектами XSL-FO, представленными в главе 12. Например, вот как мы можем отобразить название первой планеты, Меркурия, при помощи форматирующих объектов XSL-FO flow
и block
:
font-size="36pt" font-weight="bold">
Mercury
.
.
.
Однако создание всего документа целиком при помощи форматирующих объектов XSL — непростая задача, за исключением коротких документов. W3C предвидел эти трудности, и это одна из главных причин, по которой консорциумом был представлен язык преобразований, XSLT. В частности, можно создать таблицу стилей и при помощи XSLT преобразовать XML-документ так, чтобы он использовал форматирующие объекты XSL.
На практике преобразования практически всегда выполняются при помощи таблиц стилей, и именно так мы поступим в главах 11 и 12. Все, что вам нужно сделать, это предоставить таблицу стилей XSLT, при помощи которой можно преобразовать ваш документ с использованием форматирующих объектов. При таком способе всю работу берет на себя процессор XSLT, преобразуя документ из представления, с которым вам удобно работать, в представление с форматирующими объектами, которое затем можно вставить в программу, способную обрабатывать форматирующие объекты и отображать форматированный результат.
Чтобы пояснить все вышесказанное, ниже приведен пример работы с XML-документом, с которым мы уже встречались в этой главе, planets.xml
:
Mercury
.0553
58.65
1516
.983
43.4
Venus
.815
116.75
3716
.943
66.8
Earth
1
1
2107
1
128.4
В этом примере я воспользуюсь таблицей стилей XSLT — мы посмотрим, как ее создавать, в главе 11 — для преобразования planets.xml
так, чтобы он использовал форматирующие объекты. Затем при помощи процессора FOP я преобразую новый документ в файл PDF. Мы также посмотрим, как форматированный документ выглядит в Adobe Acrobat.
В листинге 1.8 приведена таблица стилей planetsPDF.xcl
, которая берет данные из planets.xml
и форматирует их в файл PDF, planets.pdf
. В этом случае для текста я использую крупный шрифт — 36 пунктов.
Листинг 1.8. Преобразование XML-XSL-FO
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:fo="http://www.w3.org/1999/XSL/Format" version="1.0">
page-width="300mm" margin-top="10mm" margin-bottom="10mm"
margin-left="20mm" margin-right="20mm">
margin-top="0mm" margin-bottom="10mm"
margin-left="0mm" margin-right="0mm"/>
:layout-master-set>
font-weight="bold" font-size="36pt" line-height="48pt"
font-family="sans-serif">
Name:
font-size="36pt" line-height="48pt"
font-family="sans-serif">
Mass (Earth = 1):
font-size="36pt" line-height="48pt"
font-family="sans-serif">
Day (Earth = 1):
font-size="36pt" line-height="48pt"
font-family="sans-serif">
Radius (in miles):
font-size="36pt" line-height="48pt"
font-family="sans-serif">
Density (Earth = 1):
font-size="36pt" line-height="48pt"
font-family="sans-serif">
Distance (million miles):
Преобразование документа в представление с форматирующими объектами
Для того чтобы преобразовать 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
margin-right="20mm" margin-left="20mm"
margin-bottom="10mm" margin-top="10mm"
page-width="300mm" page-height="400mm"
master-name="page">
margin-right="0mm" margin-left="0mm"
margin-bottom="10mm" margin-top="0mm"/>
:layout-master-set>
font-family="sans-serif" line-height="48pt"
font-size="36pt" font-weight="bold">
Name: Mercury
font-family="sans-serif" line-height="48pt"
font-size="36pt">
Mass (Earth = 1): .0553
font-family="sans-serif" line-height="48pt"
Читать дальше