Такое преобразование являлось первоочередной задачей XSLT. Как вы знаете, XSLT вырос из спецификации XSL для упрощения работы с форматирующими объектами (formatting objects). Имейте в виду, что XSL-FO гораздо объемнее XSLT — здесь я смогу представить только введение в предмет.
Форматирование XSL
Как обсуждалось в главе 1, XSLT и XSL-FO составляют спецификацию XSL. В данный момент версия 1.0 этой спецификации обладает статусом рекомендации-кандидата, с последней версией вы сможете познакомиться на http://www.w3.org/TR/xsl.
Форматирующая часть XSL, XSL-FO, позволяет устанавливать точное форматирование для всего документа, вплоть до каждого миллиметра. Например, вы можете выбрать шрифт, его размер, расположение текста на странице, цвет текста, режим подчеркивания и т.д. Работа с XSL-FO во многом похожа на создание документов RTF, но с некоторыми дополнениями: например, в XSL-FO можно создавать ссылки для навигации по документам.
Если вы когда-либо видели огромное количество кодов, используемых в RTF для форматирования документов, вы поймете, что XSL-FO представляет собой сложную и очень большую спецификацию. (Вот почему появились XSLT — чтобы упростить работу с XSL-FO.) Таким образом, на отведенном месте я смогу только дать введение в эту тему. Однако пока что еще нет программ, полностью реализующих всю спецификацию, поэтому сравнительно небольшое число людей пользуются возможностями XSL-FO, выходящими за рамки материала этой и следующей глав. В следующем списке перечислен ряд доступных процессоров XSL-FO:
• fop. http://xml.apache.org/fop. Этот популярный процессор преобразует XSL- FO в PDF. Разработан Джеймсом Таубером в Apache Software Foundation (http://xml.apache.org/);
• PassiveTeX. http://users.ox.ac.uk/~rahtz/passivetex/. Этот процессор фактически представляет собой библиотеку макросов ТеХ, обеспечивающих среду для тестирования XSL-FO;
• REXP. http://www.esng.dibe.unige.it/REXP. Эта ранняя версия процессора XSL-FO. Создает файлы PDF;
• Unicorn. http://www.unicorn-enterprises.com. Этот процессор (называемый UFO) распространяется бесплатно и работает в Windows NT 4.0 и Windows 95;
• ХЕР. http://www.renderx.com/F02PDF.html. Этот процессор, обычно называемый FOP2PDF, преобразует документы XSL-FO в формат PDF;
• XSL Formatter. http://www.antennahouse.com/xslformatter.html. Процессор XSL-FO для Windows. Доступна бесплатная копия с ограниченным сроком действия (evaluation version);
Я лично предпочитаю fop, который сегодня является самым популярным процессором XSL-FO. В этой и следующей главах я буду работать с последней версией fop, 0.17. Apache Software Foundation, группа, которая создала и Xalan, осуществляет сопровождение процессора fop, преобразующего документы XSL-FO в документы в формате Portable Data Format (PDF), для просмотра которых служит Acrobat reader фирмы Adobe. Acrobat reader можно бесплатно загрузить с http://www.adobe.com/products/acrobat/readermain.html. Последнюю версию самого fop можно бесплатно загрузить с http://xml.apache.org/fop (на сегодняшний день достаточно только щелкнуть на ссылку для загрузки на этой странице).
Процессор fop работает с документами XSL-FO, и в этой и следующей главах я воспользуюсь XSLT для преобразования документов XML в формат XSL-FO и затем применю fop для преобразования документов XSL-FO в формат PDF. (Применение XSL-FO не означает, что обязательно будут создаваться документы PDF — существуют и другие форматы, — XSL-FO просто позволяет вам форматировать данные, а то, как эти форматированные данные будут представлены, зависит от используемого приложения.) Для работы с XSL-FO необходимо понимать, как работать с существующими форматирующими объектами XSL.
Форматирующие объекты XSL-FO
В документах XSLT мы работали с такими элементами, как <xsclass="underline" stylesheet>, <xsclass="underline" output> и т.д.:
<?xml version="1.0" encoding="UTF-8"?>
<xsclass="underline" stylesheet version="1.0"
xlmns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsclass="underline" output method="xml"/>
<xsclass="underline" template match="*">
<xsclass="underline" copy>
<xsclass="underline" apply-templates/>
.
.
.
Документ XSL-FO написан во многом таким же способом, но вместо таких элементов XSLT, как <xsclass="underline" stylesheet>, применяются элементы, основанные на форматирующих объектах XSL-FO. Существует всего 56 таких форматирующих объектов — например, объект корня, создающий корневой узел документа XSL-FO, или объект блока, создающий область блока (прямоугольную область отображения, похожую на область, которую тег заголовка <Н1> создает в документе HTML).
У форматирующих объектов есть свое собственное пространство имен, «http://www.w3.org/1999/XSL/Format», и в качестве префикса этого пространства имен практически всегда используется fo, сокращение для formatting objects. (Это соглашение было принято потому, что данный префикс пространства имен используется в спецификации XSL.) При написании документов XSL-FO используются элементы, соответствующие различным объектам XSL-FO — например, <fo:root> для корневого элемента, <fo:block> для создания блока отображения и т.д. Вот как можно начать документ XSL-FO — заметьте, что я объявляю префикс пространства имен «fo», соответствующий пространству имен XSL-FO: