Объекты форматирования XSL
Расширение имени файла | .xml, .fo |
---|---|
Тип интернет-СМИ | application/xml , text/xml (устарело) |
Единый идентификатор типа (UTI) | public.xml |
Разработано | Консорциум Всемирной паутины (W3C) |
Последний выпуск | 1.1 5 декабря 2006 г |
Тип формата | Язык разметки |
Содержится | XML |
Открытый формат ? | Да |
Веб-сайт | www |
XSL-FO ( Объекты форматирования XSL ) — это язык разметки для форматирования документов XML , который чаще всего используется для создания файлов PDF . XSL-FO является частью XSL (Расширяемый язык таблиц стилей), набора технологий W3C, предназначенных для преобразования и форматирования данных XML. Другими частями XSL являются XSLT и XPath . Версия 1.1 XSL-FO была опубликована в 2006 году.
XSL-FO считается функцией W3C: [1] последнее обновление рабочего проекта было в январе 2012 года, а его рабочая группа закрылась в ноябре 2013 года. [2]
Основы
[ редактировать ]В отличие от комбинации 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-процессор) для печати. Фактически, существует множество уже существующих TEI и DocBook XSLT для обеих этих целей.
- Простота использования . Еще одним преимуществом XSL-FO является относительная простота использования. Большая часть функциональности языка основана на работе с CSS, поэтому пользователь CSS будет знаком с основами атрибутов разметки. Понять, как будет выглядеть конкретный раздел документа ФО, обычно довольно легко.
- Низкая стоимость . По сравнению с коммерческими продуктами для набора текста и макетирования страниц, XSL-FO может предложить гораздо более дешевое решение, если в остальном он соответствует типографским требованиям и требованиям к макету (см. ниже). Первоначальная стоимость владения невелика (нулевая, если вашим требованиям соответствуют бесплатные реализации, такие как Apache FOP и xmlroff ), особенно по сравнению со стоимостью коммерческих инструментов композиции. Необходимые навыки (в первую очередь программирование XSLT) широко доступны. Существует ряд хороших книг по XSL-FO, а также онлайн-ресурсы и активное сообщество пользователей.
- Многоязычность : XSL-FO был разработан для работы со всеми письменными человеческими языками, и его реализации в значительной степени достигли этой цели. Это делает XSL-FO особенно хорошо подходящим для составления документов, локализованных на большое количество национальных языков, где требуется иметь единый набор инструментов, который может составлять все языковые версии документов. Это особенно ценно для технической документации по таким вещам, как бытовая электроника, где важны азиатские и ближневосточные языки, поскольку эти части мира представляют собой огромные рынки для таких вещей, как мобильные телефоны и компьютерная периферия.
- Зрелый стандарт . С публикацией XSL-FO 1.1 XSL-FO оказался зрелым стандартом с рядом надежных коммерческих и некоммерческих реализаций. Другого сопоставимого стандарта композиции страниц не существует.
Недостатки
[ редактировать ]Возможно, этот раздел содержит оригинальные исследования . ( июнь 2019 г. ) |
- Ограниченные возможности — 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 Level 3 W3C завершает разработку интегрированного стандарта для форматирования документов и создания PDF-файлов. Итак, с 2013 г. [2] CSS3-paged — это предложение W3C по замене XSL-FO.
Примечания к проектированию объектов форматирования XSL версии 2.0 были впервые опубликованы в 2009 году и последний раз обновлялись в 2012 году. [3]
См. также
[ редактировать ]- XHTML
- Apache FOP — реализация XSL-FO с открытым исходным кодом и бесплатная реализация.
- XEP — коммерческий и проприетарный движок рендеринга.
- Antenna House Formatter — программное обеспечение для форматирования XSL-FO и CSS — коммерческий и запатентованный механизм рендеринга
Ссылки
[ редактировать ]- ^ «Текущий статус XSL-FO — W3C» . www.w3.org . Проверено 5 августа 2016 г.
- ^ Jump up to: а б Куин, Лиам (2 ноября 2013 г.). «Re: [xsl] xsl 2.0?» . XSL-List – Открытый форум по XSL (список рассылки).
{{cite mailing list}}
: Внешняя ссылка в
( помощь )|mailing-list=
- ^ «Опубликованы заметки по проектированию XSL-FO 2.0 — W3C» . www.w3.org . Проверено 9 ноября 2018 г.
Внешние ссылки
[ редактировать ]- Спецификация XSL-FO 1.1 на W3C
- Спецификация XSL-FO 1.0 на W3C
- Что такое XSL-FO? на XML.com
- Примеры и методы FO - Справочный сайт, созданный Дэйвом Поусоном
- Учебное пособие и примеры XSL-FO
- Учебное пособие по объектам форматирования XSL
- aXSL — API с открытым исходным кодом для обработки документов XSL-FO.
- FOray — реализация XSL-FO с открытым исходным кодом и бесплатная реализация с использованием интерфейсов aXSL.
- Введение и примеры XSL-FO
- FO.NET — средство рендеринга XSL-FO в PDF для .NET