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

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

В документах XSLT мы работали с такими элементами, как <xsl:stylesheet>, <xsl:output> и т.д.:

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

<xsl:stylesheet version="1.0"

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

 <xsl:output method="xml"/>

 <xsl:template match="*">

  <xsl:copy>

   <xsl:apply-templates/>

    .

    .

    .

Документ XSL-FO написан во многом таким же способом, но вместо таких элементов XSLT, как <xsl: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:

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

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

 <fо: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"/>

   .

   .

   .

Обратите внимание: документы; XSL-FO являются документами XML, поэтому везде можно использовать стандартные комментарии XML, <!-- такие как этот -->. Отметьте также, что элементы <fo:simple-page-master> и <fo:region-body> обладают такими атрибутами, как margin-right и page-height. В XSL-FO такие атрибуты называются свойствами, и их весьма много — на момент написания книги около 240. Например, вот как можно создать блок XSL-FO — прямоугольную область отображения — в котором выводится текст «Welcome to XSL formatting» (Добро пожаловать в форматирование XSL) шрифтом sans-serif размером 36 пунктов. Я использую форматирующий объект <fo:block> и свойства XSL-FO font-family — line-height (задающее высоту блока) и font-size:

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

 Welcome to XSL formatting

</fo:block>

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

Все форматирующие объекты XSL-FO с описанием перечислены на www.w3.org/TR/xsl/slice6.html. Во время создания книги существуют такие объекты (с работой многих из них мы познакомимся в этой и следующей главах):

• <fo:bidi-override>. Перекрывает двунаправленный алгоритм Unicode (этот алгоритм используется в документах на нескольких языках);

• <fo:block>. Создает блок отображения для формирования прямоугольных областей, используемых при выводе абзацев, заголовков, подписей к рисункам и таблицам и т.д.;

• <fo:block-container>. Создает контейнер блоков, который затем можно помещать в любом месте;

• <fo:character>. Представляет единственный символ;

• <fo:color-profile>. Создает цветовой профиль для таблицы стилей, с которым потом можно работать при помощи цветовых функций (подробности см. на www.w3.org/TR/xsl/slice5.html#expr-color-functions);

• <fo:conditional-page-master-reference>. Задает шаблон страницы (page-master), который следует использовать при выполнении указанных условий;

• <fo:declarations>. Создает глобальные объявления;

• <fo:external-graphic>. Добавляет в документ графику (графические данные располагаются за пределами результирующего документа, но могут быть интегрированы в документы PDF такими процессорами, как fop);

• <fo:float>. Указывает, что определенное содержимое будет форматироваться в отдельной, незакрепленной области в начале страницы или сдвинутой к одной из сторон;

• <fo:flow>. Обрабатывает поток текста, отображаемый в документе. Накладывает блокировку на «поток» встроенных областей, когда они заменяются в документе;

• <fo:footnote>. Задает ссылку на сноску, а также саму связанную с ней сноску;

• <fo:footnote-body>. Определяет содержимое сноски;

• <fo:initial-property-set>. Задает форматирующие свойства для начальной строки блока;

• <fo:inline>. Создает встроенную область (inline area). Встроенные области часто применяются для форматирования определенной части текста в блоке;

• <fo:inline-container>. Создает контейнер для встроенных объектов, позволяя обрабатывать их все вместе;

• <fo:instream-foreign-object>. Используется для вставки в документ встроенной графики или другого объекта;

• <fo:layout-master-set>. Задает оболочку для всех шаблонов, используемых в документе;

• <fo:leader>. Создает строку из повторяющегося символа или образец из символов для разделения двух текстовых форматирующих объектов;

• <fo:list-block>. Создает форматированный список, — с ним мы познакомимся в следующей главе;

• <fo:list-item>. Задает метку и тело элемента списка;

• <fo:list-item-body>. Задает содержимое тела элемента списка;

• <fo:list-item-label>. Задает содержимое метки элемента списка;

• <fo:marker>. Применяется вместе с <fo:retrieve-marker> для создания колонтитулов или сносок по ходу работы;

• <fo:multi-case>. Задает объекты, которые показывает или скрывает родительский элемент <fo:multi-switch>;

• <fo:multi-properties>. Позволяет переключаться между двумя или более наборами свойств;

• <fo:multi-property-set>. Задает альтернативный набор свойств;

• <fo:multi-switch>. Переключает между двумя или более поддеревьями форматирующих объектов;

• <fo:multi-toggle>. Используется внутри элемента <fo:multi-case> для переключения на другой <fo:multi-case>;

• <fo:page-number>. Указывает номер текущей страницы;

• <fo:page-number-citation>. Ссылается на номер страницы, содержащей заданный форматирующий объект;

• <fo:page-sequence>. Определяет способ создания последовательности страниц в документе;

• <fo:page-sequence-master>. Содержит последовательности шаблонов страниц, используемых для создания последовательностей страниц;

• <fo:region-after>. Обозначает область, расположенную после области <fo:region-body>;

• <fo:region-before>. Обозначает область перед областью <fo:region-body>;

• <fo:region-body>. Обозначает область в центре <fo:simple-page-master>;

• <fo:region-end>. Обозначает область в конце области <fo:region-body>;

• <fo:region-start>. Обозначает область, начинающую область <fo:region-body>;

• <fo:repeatable-page-master-alternatives>. Задает повторяющиеся экземпляры набора альтернативных шаблонов страниц;

• <fo:repeatable-page-master-reference>. Обозначает подпоследовательность повторяющихся экземпляров единственного шаблона страницы;

• <fo:retrieve-marker>. Используется вместе с <fo:marker> для создания колонтитулов или сносок в рабочем режиме;

• <fo:root>. Узел документа, отформатированного при помощи XSL;

• <fo:simple-link>. Задает начальное место в простой ссылке;

• <fo:simple-page-master>. Определяет форму страницы, которая может быть разделена на области (до пяти областей);

• <fo:single-page-master-reference>. Определяет подпоследовательность, образованную из единственного экземпляра единственного шаблона страницы;

• <fo:static-content>. Содержит последовательность форматирующих объектов, которые будут отображены в одной области или повторены в областях в одной или более страницах в последовательности страниц. Чаще всего применяется для повторяющихся колонтитулов и сносок;

• <fo:table>. Создает таблицу. Содержит такие элементы, как <fo:table-column> и <fo:table-body>;

• <fo:table-and-caption>. Содержит данные и заголовок таблицы;

• <fo:table-body>. Определяет содержимое тела таблицы. Содержит такие элементы, как <fo:table-row>;

• <fo:table-caption>. Задает форматирующие объекты уровня блока, в которых содержится заголовок таблицы;

• <fo:table-cell>. Помещает данные в ячейки таблицы;

• <fo:table-column>. Задает свойства ячеек в одном столбце таблицы;

• <fo:table-footer>. Определяет содержимое нижнего колонтитула таблицы;

• <fo:table-header>. Определяет содержимое верхнего колонтитула таблицы;

• <fo:table-row>. Связывает ячейки таблицы в строки. Содержит элементы <fo:table-cell>;

• <fo:title>. Задает заголовок документа;

• <fo:wrapper>. Задает свойства для группы форматирующих объектов;

Каждый из этих элементов также поддерживает одно или несколько форматирующих свойств XSL-FO.