Объекты форматирования XSL - XSL Formatting Objects

Объекты форматирования XSL
Расширение имени файла
.xml, .fo
Тип интернет-СМИ application/xml,
text/xml (устарело)
Единый идентификатор типа (UTI) public.xml
Разработан Консорциум World Wide Web (W3C)
Последний релиз
1.1
(5 декабря 2006 г . ; 14 лет назад ) ( 2006-12-05 )
Тип формата Язык разметки
Содержится XML
Открытый формат ? да
Интернет сайт www .w3 .org / TR / xsl11 /

XSL-FO ( объекты форматирования XSL ) - это язык разметки для форматирования документов XML, который чаще всего используется для создания файлов PDF . XSL-FO является частью XSL (Extensible Stylesheet Language), набора технологий W3C, предназначенных для преобразования и форматирования данных XML. Остальные части XSL - это XSLT и XPath . Версия 1.1 XSL-FO была опубликована в 2006 году.

W3C считает XSL-FO завершенной функцией : последнее обновление рабочего проекта было в январе 2012 года, а его рабочая группа закрылась в ноябре 2013 года.

Основы

В отличие от комбинации HTML и CSS , XSL-FO - это унифицированный язык представления. У него нет семантической разметки, поскольку этот термин используется в HTML. И, в отличие от CSS, который изменяет представление по умолчанию внешнего документа XML или HTML, он хранит все данные документа внутри себя.

Общая идея использования XSL-FO заключается в том, что пользователь пишет документ не на FO, а на языке XML. XHTML , DocBook и TEI - все это возможные примеры. Затем пользователь получает преобразование XSLT , либо записывая его самостоятельно, либо находя преобразование для рассматриваемого типа документа. Это преобразование XSLT преобразует XML в XSL-FO.

После создания документа XSL-FO он передается в приложение, называемое процессором FO. Процессоры FO преобразуют документ XSL-FO во что-то, что можно прочитать, распечатать или и то, и другое. Наиболее распространенный вывод XSL-FO - это файл PDF или PostScript , но некоторые процессоры FO могут выводить данные в другие форматы, такие как файлы RTF, или даже просто окно в графическом интерфейсе пользователя, отображающее последовательность страниц и их содержимое.

Сам язык XSLT изначально был задуман только для этой цели; в настоящее время он широко используется для более общих преобразований XML. Этот шаг преобразования воспринимается в XSL-FO как должное, что люди нередко называют XSLT, который превращает XML в XSL-FO, самим документом XSL-FO. Даже учебные пособия по XSL-FO обычно пишутся с помощью команд XSLT вокруг инструкций по обработке FO.

Шаг преобразования XSLT исключительно эффективен. Он позволяет автоматически создавать оглавление, ссылки, индекс и другие различные возможности.

Документ XSL-FO не похож на документ PDF или PostScript. Он не описывает окончательно расположение текста на разных страницах. Вместо этого он описывает, как выглядят страницы и где находится различное содержимое. Оттуда процессор FO определяет, как расположить текст в границах, описанных в документе FO. Спецификация XSL-FO даже позволяет различным процессорам FO иметь разные ответы относительно результирующих сгенерированных страниц.

Например, некоторые процессоры FO могут переносить слова, чтобы минимизировать пространство при разрыве строки, в то время как другие предпочитают этого не делать. Различные процессоры могут даже использовать разные алгоритмы расстановки переносов, начиная от очень простых и заканчивая более сложными алгоритмами расстановки переносов, которые принимают во внимание, будет ли предыдущая или следующая строка также переноситься через дефис. Они изменят, в некоторых пограничных случаях, довольно существенно макет различных страниц. Есть и другие случаи, когда спецификация XSL-FO явно предоставляет процессорам FO некоторую степень выбора в отношении компоновки.

Это различие между процессорами FO, создающее противоречивые результаты между процессорами, часто не вызывает беспокойства. Это связано с тем, что основная цель XSL-FO - создание страничных печатных носителей. Сами документы XSL-FO обычно используются в качестве посредников, в основном для создания файлов PDF или печатного документа в качестве окончательной формы для распространения. Это противоположно тому, как HTML создается и распространяется как окончательная форма непосредственно пользователю. Распространение окончательного PDF-файла вместо ввода языка форматирования (будь то HTML / CSS или XSL-FO) означает, с одной стороны, что получатели не подвержены непредсказуемости, возникающей из-за различий между интерпретаторами языков форматирования, а с другой стороны, означает, что документ не может легко адаптироваться к различным потребностям получателя, таким как другой размер страницы или предпочтительный размер шрифта, или адаптация для экранной, бумажной и аудиопрезентации.

Языковые концепции

Язык XSL-FO был разработан для страничных медиа; как таковая концепция страниц является неотъемлемой частью структуры XSL-FO.

FO лучше всего подходит для того, что можно было бы назвать "ориентированным на контент" дизайном. Это стандартный метод верстки книг, статей, юридических документов и т. Д. Он включает в себя единый непрерывный участок довольно непрерывного текста с различной повторяющейся информацией, встроенной в поля страницы. Это отличие от дизайна, основанного на макетах, который используется в газетах или журналах. Если содержимое этих документов не умещается в требуемом пространстве, часть его обрезается до тех пор, пока не умещается. XSL-FO не справляется с жесткими ограничениями расположения магазинов; действительно, во многих случаях ему не хватает возможности выразить некоторые формы указанного макета.

Несмотря на базовую природу дизайна языка, он обладает большой выразительностью. Доступны таблицы, списки, боковые поплавки и множество других функций. Эти функции сопоставимы с функциями макета CSS, хотя ожидается, что некоторые из этих функций будут созданы с помощью XSLT.

Структура документа

Документы XSL-FO - это XML-документы, но они не обязаны соответствовать какому-либо DTD или схеме. Вместо этого они соответствуют синтаксису, определенному в спецификации XSL-FO .

Документы XSL-FO содержат два обязательных раздела. В первом разделе приводится список именованных макетов страниц. Второй раздел - это список данных документа с разметкой, в котором используются различные макеты страниц для определения того, как содержимое заполняет различные страницы.

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

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

Блоки и встроенные элементы работают во многом так же, как и для CSS, хотя некоторые правила для заполнения и полей различаются между FO и CSS. Направление относительно ориентации страницы для последовательности блоков и встроенных строк может быть полностью указано, что позволяет документам FO работать на языках, которые читаются не на английском. Язык спецификации FO, в отличие от языка CSS 2.1, при описании этих направлений использует нейтральные по направлению термины, такие как начало и конец, а не левое и правое.

Базовая разметка содержимого XSL-FO основана на CSS и его правилах каскадирования. Таким образом, многие атрибуты в XSL-FO распространяются на дочерние элементы, если явно не переопределены.

Возможности XSL-FO v1.0

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

Несколько столбцов

На странице можно определить несколько столбцов. В этом случае по умолчанию блоки перетекают из одного столбца в следующий. Отдельные блоки можно настроить так, чтобы они занимали все столбцы, создавая текстовый разрыв на странице. Столбцы над этим разрывом будут переходить друг в друга, как и столбцы под разрывом. Но никакой текст не может перетекать из раздела выше в раздел ниже.

Из-за природы спецификации страницы XSL-FO несколько страниц могут фактически иметь разное количество и ширину столбцов. Таким образом, текст может легко перетекать со страницы с 3 столбцами на страницу с 5 столбцами на страницу с 1 столбцом.

Все функции FO работают в рамках ограничений страницы с несколькими столбцами.

Мы можем охватить несколько столбцов, указав два атрибута, например. промежуток, дополнение-после.

Списки

Список XSL-FO, по сути, представляет собой два набора блоков, расположенных бок о бок. Запись состоит из блока «слева» или начального линейного направления и последовательности блоков «справа» или конечного линейного направления. Блок слева концептуально представляет собой номер или маркер в списке. Однако это может быть просто строка текста, как в глоссарии. Блок справа работает должным образом. Оба этих блока могут быть блок-контейнерами или иметь несколько блоков в одной записи списка.

Ожидается, что нумерация списков XSL-FO, когда они пронумерованы, будет выполняться XSLT или любым другим процессом, создавшим документ XSL-FO. Таким образом, списки номеров должны быть явно пронумерованы в XSL-FO.

Элементы управления разбиением на страницы

Пользователь может указать Widow и Orphan для блоков или для самого потока и разрешить каскадное преобразование атрибутов в дочерние блоки. Кроме того, можно указать блоки, которые будут храниться вместе на одной странице. Например, блок изображения и описание этого изображения можно настроить так, чтобы они никогда не разделялись. Процессор FO сделает все возможное, чтобы придерживаться этих команд, даже если для этого потребуется создать много пустого места на странице.

Сноски

Пользователь может создавать сноски, которые появляются внизу страницы. Сноска написана в документе FO обычным потоком текста в том месте, где на нее есть ссылка. Ссылка представлена ​​как встроенное определение, хотя это и не требуется. Тело - это один или несколько блоков, которые FO-процессор помещает внизу страницы. Процессор FO гарантирует, что где бы ни была ссылка, сноска, цитируемая по этой ссылке, будет начинаться на той же странице. Это будет так, даже если это означает создание лишнего пустого места на странице.

Таблицы

Таблица FO работает так же, как таблица HTML / CSS. Пользователь указывает строки данных для каждой отдельной ячейки. Пользователь также может указать некоторую информацию о стиле для каждого столбца, например, цвет фона. Кроме того, пользователь может указать первую строку как строку заголовка таблицы с собственной отдельной информацией о стилях.

Процессору FO можно точно сказать, сколько места нужно предоставить каждому столбцу, или можно сказать, чтобы он автоматически помещал текст в таблицу.

Элементы управления ориентацией текста

FO имеет обширные элементы управления для ориентации блоков текста. В середине страницы можно обозначить блок текста, который будет ориентирован в другой ориентации. Эти ориентированные блоки могут использоваться для языков с ориентацией, отличной от остальной части документа, или просто, если нужно ориентировать текст для целей макета. Эти блоки могут содержать практически любой вид контента, от таблиц до списков или даже других блоков переориентированного текста.

Разнообразный

  • Цитирование номеров страниц. Страница, содержащая специальный тег, может быть процитирована в тексте, и процессор FO заполнит фактический номер страницы, на которой появляется этот тег.
  • Блокируйте границы в нескольких стилях.
  • Цвета фона и изображения.
  • Элементы управления шрифтом и веса, как в CSS.
  • Боковые поплавки.
  • Разные встроенные элементы.

Возможности XSL-FO v1.1

Версия 1.1 XSL-FO добавляет ряд новых функций к версии 1.0.

Множественные потоки и отображение потоков

XSL-FO 1.0 был довольно ограничен в отношении того, какой текст можно было размещать в каких областях страницы. Версия 1.1 значительно ослабляет эти ограничения, позволяя отображать текущий текст в несколько явных областей на странице. Это позволяет набирать текст, как в газете.

Закладки

Многие выходные форматы для процессоров XSL-FO, особенно PDF, имеют функции закладок. Это позволяет формату определять строку текста в отдельном окне, которое может быть выбрано пользователем. При выборе окно документа немедленно прокручивается до определенной области документа.

XSL-FO v1.1 теперь предоставляет возможность создавать именованные закладки в XSL-FO, что позволяет процессору передавать это в выходной формат, который его поддерживает.

Индексирование

XSL-FO 1.1 имеет функции, которые поддерживают создание индекса, который можно найти в конце книги. Это делается путем ссылки на правильно размеченные элементы в документе FO.

Цитирование последней страницы

Последняя страница может быть создана без предоставления явной ссылки в документе на конкретную привязку в документе FO. Определение «последняя страница» может быть ограничено определенным набором страниц или охватывать весь документ. Это позволяет пользователю указать что-то вроде «Страница 2 из 15», где страница 15 - это номер страницы определения последней страницы.

Маркеры стола

Маркеры таблицы позволяют пользователю создавать динамическое содержимое в верхних и нижних колонтитулах таблицы, например промежуточные итоги внизу каждой страницы таблицы или индикаторы «продолжения таблицы».

Внутри / снаружи поплавки

XSL-FO 1.1 добавляет ключевые слова «внутри» и «снаружи» для боковых всплывающих окон, что позволяет создавать макеты страниц с полями, расположенными на внешнем или внутреннем краях страниц. Внутренняя сторона относится к стороне страницы по направлению к книжному переплету, а внешняя - к стороне страницы, противоположной книжному переплету.

Усовершенствованный графический размер

XSL-FO 1.1 уточняет функциональные возможности для изменения размеров графики, чтобы она соответствовала размеру, с возможностью уменьшать размер до размера (но не увеличивать размер), а также возможность определять конкретные шаги масштабирования. Кроме того, на результирующий коэффициент масштабирования можно ссылаться для отображения (например, в подписи к рисунку «показанное изображение имеет фактический размер 50%»).

Преимущества

  • Язык XML. Поскольку это язык XML, для генерации кода XSL-FO из любого языка XML требуется только преобразование XSLT (и процессор XSLT). Можно легко написать документ в TEI или DocBook и преобразовать его в HTML для просмотра в Интернете или в PDF (через процессор FO) для печати. Фактически, существует множество уже существующих XSLT TEI и DocBook для обеих этих целей.
  • Простота использования. Еще одним преимуществом XSL-FO является относительная простота использования. Большая часть функциональных возможностей языка основана на работе с CSS, поэтому пользователь CSS будет знаком с основами атрибутов разметки. Понять, как будет выглядеть конкретный раздел FO-документа, обычно довольно просто.
  • Низкая стоимость - по сравнению с коммерческими продуктами для набора и верстки страниц, XSL-FO может предложить гораздо более дешевое решение, если в остальном он соответствует типографским требованиям и требованиям к макету (см. Ниже). Первоначальная стоимость владения низкая (нулевая, если бесплатные реализации, такие как Apache FOP и xmlroff , соответствуют вашим требованиям), особенно по сравнению со стоимостью коммерческих инструментов компоновки. Необходимые навыки (в первую очередь XSLT-программирование) широко доступны. Есть ряд хороших книг по XSL-FO, а также онлайн-ресурсы и активное сообщество пользователей.
  • Многоязычный - XSL-FO был разработан для работы со всеми письменными человеческими языками, и его реализации в значительной степени достигли этой цели. Это делает XSL-FO особенно подходящим для составления документов, локализованных на большое количество национальных языков, где требуется наличие единого набора инструментов, который может составлять все языковые версии документов. Это особенно ценно для технической документации по таким вещам, как бытовая электроника, где важны азиатские и ближневосточные языки, потому что эти части мира представляют собой огромные рынки для таких вещей, как мобильные телефоны и компьютерная периферия.
  • Зрелый стандарт - с публикацией XSL-FO 1.1 XSL-FO оказался зрелым стандартом с рядом надежных коммерческих и некоммерческих реализаций. Другого сопоставимого стандарта для компоновки страниц не существует.

Недостатки

  • Ограниченные возможности - XSL-FO был специально разработан для удовлетворения требований «слегка оформленных» документов, типичных для технических руководств, деловых документов, счетов-фактур и т. Д. Хотя он может использоваться и используется для более сложных дизайнов, он по своей сути ограничен в том, что он может делать с точки зрения макета и типографики. В частности, XSL-FO не предоставляет прямого способа получения эффектов форматирования, зависящих от знания отношения позиций на странице двух объектов форматирования. Например, нет прямого способа сказать «если эта вещь находится на той же странице, что и эта вещь, то сделайте X, иначе сделайте Y». Это явное проектное решение, отражающее двухэтапную модель абстрактной обработки на основе преобразования, используемую XSL-FO. Это ограничение можно устранить, реализовав многопроходный процесс. К сожалению, в настоящее время не существует стандарта того, как результат первого прохода будет передаваться обратно на второй проход. Большинство, если не все, реализации предоставляют некоторую форму обрабатываемого формата промежуточных результатов, который может использоваться для этого, но любой такой процесс, реализованный сегодня, по необходимости, будет зависеть от конкретной реализации.
  • Точно так же существуют важные функции компоновки , которых просто нет в XSL-FO, либо потому, что они не имели достаточно высокого приоритета, либо потому, что их проектирование было слишком сложным для включения в версию 1.1, либо потому, что не было достаточных реализаций, чтобы разрешить их включение в окончательную спецификацию согласно правилам W3C.
  • В дополнение к этим архитектурным ограничениям текущие реализации XSL-FO, как коммерческие, так и с открытым исходным кодом, не обеспечивают такой же уровень типографской сложности, который обеспечивается высокопроизводительными инструментами верстки, такими как QuarkXPress или InDesign , или программируемыми системами набора текста, такими как LaTeX . Например, ни одна из текущих реализаций не предоставляет функций для обеспечения того, чтобы текстовые строки на разворачивающихся страницах были выровнены по вертикали. В спецификации XSL-FO нет ничего, что препятствовало бы этому, но и ничего, что требовало бы этого. Для большинства документов, для которых достаточно полностью автоматизированного решения для компоновки, такой уровень типографской сложности не требуется. Однако для высококачественных публикаций и книг для массового потребителя это обычно так; в некоторых случаях этого можно добиться, используя вместо этого XSLT для создания документа LaTeX .
  • Зависимость от расширений. При рассмотрении применимости XSL-FO к конкретному документу или дизайну документа необходимо учитывать проприетарные расширения, предоставляемые различными реализациями XSL-FO. Эти расширения добавляют функции, не входящие в базовую спецификацию. Например, один продукт добавляет поддержку японских типографских соглашений, которые не учитываются в спецификации XSL-FO. Однако использование этих функций делает такую ​​систему XSL-FO немного более привязанной к конкретной реализации (но не полностью привязанной, как это было бы при использовании полностью проприетарной системы композиции).
  • Непрактичное редактирование вручную - обычно нецелесообразно редактировать экземпляры XSL-FO вручную (XSL-FO был разработан для ясности и полноты, а не для простоты редактирования). Инструменты визуального редактирования, такие как XFDesigner, могут облегчить задачу, хотя не все теги XSL-FO доступны (особенно маркеры и сноски). XF Designer больше не является поддерживаемым продуктом Ecrion Software.

При попытке решить, будет ли XSL-FO работать для данного документа, следующие требования к типографике и макету обычно указывают, что XSL-FO не будет работать (хотя некоторые из них могут быть удовлетворены с помощью проприетарных расширений):

  • Необходимо перезапускать номера сносок или последовательность символов на каждой новой странице (однако некоторые реализации предоставляют расширения для поддержки автоматической нумерации сносок).
  • Необходимо разместить текст вокруг обеих сторон плавающего объекта (XSL-FO может размещать текст вокруг одной стороны и сверху и / или снизу, но не по обеим сторонам; однако некоторые реализации обеспечивают поддержку таких сложных макетов с помощью проприетарных расширений).
  • Необходимо иметь переменное количество столбцов на одной странице (однако, по крайней мере, две коммерческие реализации предоставляют расширения для создания блоков с несколькими столбцами на странице).
  • Необходимы сноски на весь столбец (в некоторых реализациях есть расширения для сносок столбцов).
  • Необходимо иметь поля, которые динамически размещаются относительно других полей (например, заметки на полях, которые равномерно расположены по вертикали на странице). XSL-FO предоставляет только возможности для размещения полей так, чтобы они были выровнены по вертикали относительно своего якоря.
  • Необходимо создать контент, который распространяется на две страницы в виде плавающего объекта или объекта «вне линии» в однородной последовательности повторяющихся мастеров страниц (это можно сделать в XSL-FO 1.1, используя несколько областей тела и карты потоков, но для этого требуется может управлять мастерами страниц, используемыми для этих страниц.)
  • Нужны как нижний контент, так и сноски на одной странице.
  • Необходимо иметь возможность запускать текст по произвольной кривой (хотя некоторые реализации поддерживают SVG , который можно использовать, чтобы обойти это ограничение).
  • Необходимо иметь возможность ограничивать линии определенными базовыми сетками (например, для достижения точного совмещения линий на разворачивающихся страницах).
  • Все, что требует макета, ориентированного на страницу, например, обеспечение того, чтобы на странице всегда появлялся рисунок, обращенный к его точке привязки.

Замена

Стандарты XML и HTML вместе со стандартом CSS , поскольку CSS2 ( страничный мультимедийный модуль) начинает предоставлять основные функции для печатных средств массовой информации. С помощью модуля CSS Paged Media Module уровня 3 W3C завершает разработку интегрированного стандарта для форматирования документов и создания PDF-файлов. Итак, с 2013 года CSS3-paged - это предложение W3C по замене XSL-FO.

Примечания к дизайну для версии 2.0 объектов форматирования XSL были впервые опубликованы в 2009 г. и последний раз обновлялись в 2012 г.

Смотрите также

  • XHTML
  • Apache FOP - реализация XSL-FO с открытым исходным кодом и без лицензионных отчислений
  • XEP - коммерческий и проприетарный движок рендеринга
  • Antenna House Formatter - Программное обеспечение для форматирования XSL-FO и CSS - Коммерческий и проприетарный движок рендеринга

использованная литература

внешние ссылки