XSLT — страница 115 из 124

    Sample Text. Sample Text. Sample Text. Sample Text. Sample Text.

    Sample Text. Sample Text. Sample Text. Sample Text. Sample Text.

    Sample Text. Sample Text. Sample Text. Sample Text. Sample Text.

    Sample Text. Sample Text. Sample Text. Sample Text. Sample Text.

Теперь все готово. Первая страница, созданная

pages.fo
, показана на рис. 12.8; как можно заметить, текст смещен вниз.

Рис. 12.8. Первая страница, отформатированная при помощи XSL-FO 


Текст на второй странице начинается сверху, как видно на рис. 12.9.

Рис 12.9. Вторая страница, отформатированная при помощи XSL-FO


Как можно заметить из листинга 12.8, я включил в

pages.fo
большое число строк, не содержащих ничего, кроме слов «Sample Text.», для того чтобы гарантированно получить многостраничный документ. Но для перехода на новую страницу не обязательно располагать большим количеством текста: можно также установить свойство
break-after
элемента
в «page», и процессор XSL-FO перейдет на новую страницу после текущего блока:

  text-align="center" space-after="24pt">

  Sample Document

  color="gray" break-after="page">

  Sample Text. Sample Text. Sample Text. Sample Text. Sample Text.

  Sample Text. Sample Text. Sample Text. Sample Text. Sample Text.

  Sample Text. Sample Text.

  color="gray">

  Sample Text. Sample Text. Sample Text. Sample Text. Sample Text.

  Sample Text. Sample Text. Sample Text. Sample Text. Sample Text.

  Sample Text. Sample Text.

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

• 

break-after
. Указывает, что последняя область, созданная при обработке данного форматирующего объекта, будет последней помещенной в определенный контекст. Устанавливается в
auto | column | page | even-page | odd-page | inherit
;

• 

break-before
. Указывает, что первая созданная область должна быть первой, помещенной в определенный контекст. Устанавливается в
auto | column | page | even-page | odd-page | inherit
.

Рассмотрим еще один пример применения последовательностей страниц. Если вы посмотрите на книги, напечатанные на таких западных языках, как английский, немецкий или французский, вы заметите, что страницы с четными номерами, как правило, расположены слева, а страницы с нечетными номерами — справа. Четные и нечетные страницы можно отформатировать по-разному: например, можно задать дополнительное пространство поля у переплета, что даст дополнительное пространство левого поля для нечетных страниц и дополнительное пространство правого поля для четных.

Чтобы реализовать такое форматирование, можно применить атрибут

odd-or-even
элемента
, устанавливая его в значение «even» или «odd», выбирая соответственно четные или нечетные страницы:

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

   page-height="400mm" master-name="leftpage">

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

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

   page-height="400mm" master-name="rightpage">

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

     master-name="rightpage" odd-or-even="odd"/>

     master-name="leftpage" odd-or-even="even"/>

  .

  .

  .

Теперь у страниц, расположенных справа, левое поле у переплета книги будет расширено, а у страниц, расположенных слева, также будет расширено правое поле.

Как видите, форматирующие объекты — довольно объемная тема, и, как я уже говорил, для большой части материала в этой книге не хватает места. Дополнительные подробности можно узнать на web-узле W3C, www.w3.org/TR/xsl/. Существует не так уж много пакетов программ для работы с форматирующими объектами, хотя в будущем ситуация должна измениться.

На этом мы заканчиваем рассмотрение XSL-FO — а вместе с ним и книгу. Вы познакомились со всеми видами XSLT-преобразований: из XML в XML, в HTML, в XHTML, в RTF, в простой текст, в JavaScript, в реляционные базы данных, и теперь — в XSL-FO. Вы увидели все возможные элементы, атрибуты и функции XSLT и рассмотрели много работающих примеров. Теперь осталось только использовать всю эту мощь в работе. Удачи вам в применении XSLT!

Приложение ADTD XSLT

В данном приложении приводится фрагмент определений DTD для таблиц стилей XSLT 1.0, раздел С рекомендации W3C XSLT 1.0 по адресу www.w3.org/TR/xslt. Здесь для справки перечислены элементы XSLT 1.0 и их атрибуты.

Фрагмент DTD для таблиц стилей XSLT

ПРИМЕЧАНИЕ

Этот фрагмент DTD ненормативен, поскольку объявления DTD XML 1.0 не поддерживают пространства имен XML и, таким образом, не могут правильно описывать допустимую структуру таблицы стилей XSLT.

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

result-elements
, перечисляющую допустимые типы результирующих элементов. Например:

 | fo:inline-sequence | fo:block

">

Такие результирующие элементы должны быть объявлены с атрибутами

xsl:use-attribute-sets
и
xsl:extension-element-prefixes
. Следующая сущность объявляет для этих целей параметр
result-element-atts