Книги-online
Введение и Обзор
1 Введение и Обзор
В этой спецификации определён Extensible Stylesheet Language
(XSL) - Расширяемый Язык Таблиц Стилей. XSL это язык таблиц стилей. Имея класс
произвольно структурированных документов XML [XML]
и файлов данных, дизайнеры используют таблицы стилей XSL для указания на то, как
это структурированное содержимое должно быть представлено; то есть, как
содержимое-источник должно быть стилизовано, расположено и разбито на страницы в
конкретном носителе представления, таком как окно Web-браузера, или портативное
ручное устройство, или набор физических страниц в каталоге, отчёте, памфлете или
книге.
1.1 Обработка таблицы стилей
Процессор таблицы стилей XSL принимает документ или данные на языке XML
и таблицу XSL и производит представление содержимого этого XML-источника так,
как это задумано дизайнером данной таблицы стилей. Существуют два аспекта этого
процесса представления: первый - конструирование результирующего дерева из
дерева XML-источника, второй - интерпретация результирующего дерева для
производства форматированного вывода, пригодного для показа на экране дисплея,
на бумаге, его произнесения, или на другом носителе.
Первый аспект называется трансформация дерева, а второй называется
форматирование. Процесс форматирования выполняется форматировщиком.
Этот форматировщик может быть просто утилитой вывода браузера.
Трансформация дерева позволяет структуре результирующего дерева существенно
отличаться от структуры дерева-источника. Например, можно добавить оглавление
как результат фильтрации документа-источника или можно переупорядочить
данные-источник в отсортированное табличное представление.
При конструировании результирующего дерева процесс трансформации дерева
добавляет также информацию, необходимую для форматирования этого результирующего
дерева.
Форматирование становится доступным при включении семантики форматирования в
результирующее дерево. Семантика форматирования выражена в терминах каталога
классов
объектов форматирования. Узлы результирующего дерева это объекты
форматирования (ОФ). Классы объектов форматирования обозначают типографические
абстракции, такие как страница, параграф,
таблица и т.д. Точный контроль за представлением этих абстракций осуществляется
с помощью набора свойств форматирования, таких как управление отступами,
расстояниями между словами и буквами, висячими строками и переносами.
В XSL классы объектов форматирования и свойства форматирования
предоставляют словарь для выражения целей представления.
Модель процесса XSL предполагается только как концептуальная. Реализация не
должна представлять это как отдельные процессы. Кроме того, реализации свободны
обрабатывать документ-источник любым способом, который даёт такой же результат,
какой был бы получен при обработке с использованием концептуальной модели
процессинга XSL.
Внизу дана диаграмма, расшифровывающая детализированную концептуальную модель.
1.1.1 Трансформации дерева
Трансформация дерева конструирует результирующее дерево/result tree. В XSL это
дерево называется дерево элементов и атрибутов с объектами, изначально
находящимися в
пространстве имён "объекта форматирования".
В этом дереве объект форматирования представлен как элемент XML со свойствами,
представленными набором пар атрибут-значение XML. Содержимое объекта
форматирования это содержимое элемента XML. Трансформация дерева определена в
Рекомендациях XSLT
[XSLT].
Внизу приведена диаграмма, обозначающая этот концептуальный процесс.
Таблица стилей XSL используется в дереве трансформации. Таблица стилей содержит
набор правил конструирования дерева. Правила конструирования дерева состоят из
двух частей: патэрна, который подставляется в элементы дерева-источника, и
шаблона, который конструирует части результирующего дерева. Это позволяет
применять таблицу стилей к широкому классу документов, имеющих похожие структуры
деревьев-источников.
В некоторых реализациях XSL/XSLT результат конструирования дерева может быть
выведен как документ XML. Это позволяет выводить XML-документ, который содержит
объекты форматирования и свойства форматирования. Такая возможность ни
обязательна для процессора XSL, ни навязывается ему. Бывают, однако, случаи,
когда это имеет важное значение,
как при подготовке сервером ввода для известного клиента; например, способ,
которым сервер WAP
(http://www.wapforum.org/faqs/index.htm)
подготавливает специальный вывод для ручных WAP- устройств. Для
сохранения доступности дизайнеры Web-систем не должны создавать архитектуры,
требующие наличия (или использующие) передачу документов, содержащих объекты
форматирования и свойства, если только передатчик не знает, что клиент может
принимать объекты форматирования и свойства, или что передаваемый документ
содержит ссылку на документ(ы)-источник(и), используемый при конструировании
документа с объектами форматирования и свойствами.
1.1.2 Форматирование
При форматировании результирующее дерево интерпретируется в форме дерева
объектов форматирования для создания отображения, задуманного дизайнером таблицы
стилей, по которой сконструировано дерево элементов XML и атрибутов в
пространстве имён "fo".
Словарь объектов форматирования, поддерживаемых XSL - набор типов элементов
fo: - представляет собой набор типографических абстракций,
доступных дизайнеру. Семантически каждый объект форматирования (ОФ) представляет
спецификацию для части информации о разбивке на страницы, структуре и стиле,
которая будет применяться к содержимому этого объекта форматирования как
результат форматирования всего результирующего дерева. Каждый класс объекта
форматирования задаёт определённый тип поведения при форматировании. Например,
класс объекта форматирования блока разделяет содержимое параграфа на строки.
Другие части спецификации могут опираться на иные ОФ;
например, форматирование параграфа (ОФ блока) зависит от
спецификации свойств в ОФ блока и от спецификации структуры
представления, в которую блок помещается форматировщиком.
Свойства, ассоциированные с экземпляром объекта форматирования, управляют
форматированием этого объекта. Некоторые свойства, например, "color", прямо
определяют результат форматирования.
Другие свойства, например, 'space-before', только ограничивают набор возможных
результатов форматирования без специфицирования конкретного результата
форматирования. Форматировщик может выбирать различные варианты.
Форматирование представляет собой генерацию дерева геометрических областей,
называемого дерево областей/area tree. Геометрические области
позиционированы в последовательности из одной или нескольких страниц (браузер
обычно использует единую страницу). Каждая геометрическая область имеет позицию
на странице, спецификацию того, что отображать в этой области, и может иметь фон,
заполнение и рамку. Например, форматирование одиночного символа генерирует
область, достаточно широкую для того, чтобы вместить глиф, используемый для
визуального представления символа, и глиф этот отображается в данной области.
Эти области могут вкладываться. Например, глиф может быть позиционирован в
строке, в блоке, на странице.
При отображении берётся дерево областей, абстрактная модель представления (в
терминах страницы и коллекции её областей) и производится вывод на определённый
носитель, такой как окно браузера на экране дисплея компьютера или лист бумаги.
Семантика представления не описывается в данной спецификации детально.
Первый шаг форматирования - "объективизация" дерева элементов и атрибутов,
полученного через трансформацию XSLT. Объективизация дерева в основном состоит
из включения элементов дерева в узлы объекта форматирования, а атрибутов - в
спецификации свойств. Результатом этого этапа является создание дерева
объектов форматирования.
Как часть этапа объективизации, символы, результирующего дерева замещаются
узлами символов fo:character.
Символы в текстовых узлах, которые состоят только из пробельных символов и
которые являются потомками элементов, чьи соответствующие объекты форматирования
не разрешают узлы fo:character в качестве потомков, игнорируются. Прочие
символы внутри элементов, чьи соответствующие объекты форматирования не
разрешают узлы fo:character в качестве потомков, являются ошибками.
Содержимое объекта fo:instream-foreign-object не объективизируется;
вместо этого объект, представляющий элемент fo:instream-foreign-object,
указывает на подходящий узел в дереве элементов и атрибутов.
Таким же образом элемент-потомок fo:declarations пространства имён не-XSL не
объективизируется; вместо этого объект, представляющий элемент fo:declarations,
указывает на подходящий узел в дереве элементов и атрибутов.
Вторая фаза форматирования - это очистка дерева объектов форматирования для
создания очищенного дерева объектов форматирования.
Процесс очистки производит отображение из свойств в уточнения.
Это процесс состоит из:
(1) развёртывания сокращений/shorthand в конкретные
свойства,
(2) отображения соответствующих свойств,
(3) определения вычисленных
значений (могут выполняться вычисления выражений),
(4) обработки эффектов свойств handling white-space-treatment и linefeed-treatment
и
(5) наследования. Детальную информацию об очистке можно найти в разделе [5
Очистка/ Разрешение Свойств].
Процесс очистки изображён на данной диаграмме.
Третий этап форматирования - это конструирование дерева областей. Дерево
областей генерируется так, как описано в семантике каждого объекта
форматирования. Уточнения, применяемые к каждому классу объектов форматирования,
управляют генерацией областей. Хотя каждое свойство форматирования может быть
специфицировано для каждого ОФ, для каждого класса объектов
форматирования, лишь поднабор свойств форматирования используется для
определения уточнения объектов данного класса.
Ниже на диаграмме изображён процесс генерации областей.
1.2 Преимущества XSL
В отличие от HTML, в XML имена элементов не имеют встроенной семантики
представления. При отсутствии таблицы стилей процессор не имеет возможности
узнать, как выводить содержимое документа XML, и может сделать это только в виде
неупорядоченной строки символов. XSL предоставляет проработанную модель и
словарь для написания таких таблиц стилей с использованием синтаксиса XML.
Данный документ предназначен для разработчиков таких процессоров XSL.
Но, хотя он может использоваться как справочник-учебник для создателей таблиц
стилей XSL, он не является по своей природе учебным пособием.
XSL построен на предыдущей работе над Cascading Style Sheets
[CSS2] и Document Style Semantics and Specification Language
[DSSSL].
Хотя многие объекты форматирования и свойства XSL соответствуют обычному набору
свойств, этого ещё недостаточно для достижения поставленных в XSL целей. В
частности, XSL вводит модель разбивки на страницы/pagination и структурирования/layout,
которая расширяет то, что уже имеется на данный момент, и само, в свою очередь,
может быть расширено напрямую до структур страницы, оставляя далеко позади
простые модели страницы, описанные в данной спецификации.
1.2.1 Разбивка на страницы и
прокрутка
Реализация прокрутки окна документа и разбивки на страницы создаёт новые
сложности при стилизации (и разбивке на страницы) содержимого XML. Поскольку
разбивка на страницы вводит произвольные границы (станицы или области страниц) в
содержимое, такие концепции, как управление пространством страницы, границами
областей и блоков, становятся крайне важными. Есть также концепции, относящиеся
к выравниванию пространства между строками (выравнивание страницы по вертикали)
и между словами и буквами (для распределения строк текста).
Это не всегда может быть достигнуто простым прокручиванием окна документа, как
это делается в некоторых современных браузерах. Однако имеется некоторое
сходство между страницей с несколькими областями, такими как body,
header, footer правый и левый sidebars и Web-представление с использованием "фрэймов".
Распределение содержимого по областям в основном одинаково в обоих случаях, и XSL
обрабатывает оба варианта аналогично.
XSL был разработан так, чтобы дать дизайнерам возможность управлять свойствами,
необходимыми при разбивке документов на страницы, а также чтобы предоставить
структуру, эквивалентную "фрэймам", для просмотра Web. Чтобы достичь
поставленных целей, XSL расширил набор объектов форматирования и свойств
форматирования. В дополнение к этому, отбор компонентов-источников XML, которые
могут быть стилизованы (элементы,
атрибуты, текстовые узлы, комментарии и инструкции процесса) базируется на XSLT
и
XPath [XPath],
предоставляя таким образом пользователю сверхмощный механизм отбора.
Дизайн объектов форматирования и расширений свойств первоначально был вдохновлён DSSSL.
Современные расширения, однако, не всегда выглядят как конструкции DSSSL, на
которых они были основаны. Для того, чтобы больше соответствовать спецификации CSS2
или обрабатывать случаи, более сложные, чем в DSSSL, некоторые расширения были
сделаны с отличиями от DSSSL.
Существовало несколько способов создания расширений.
В некоторых случаях достаточно было добавить новые значения, как было с режимами
записи/writing-modes, такими как top-to-bottom и bottom-to-top, вместо простых left-to-right
и right-to-left.
В других случаях свойства, выраженные в CSS2
как одно свойство с несколькими одновременными значениями, были разделены на
несколько новых свойств, чтобы дать возможность независимо управлять
независимыми свойствами. Например, свойство "white-space" было разделено на 4
свойства:
свойство "white-space-treatment" управляет обработкой пробелов, свойство "linefeed-treatment"
управляет обработкой прогонов строки,
свойство "white-space-collapse" управляет сжатием нескольких последовательных
пробелов,
а свойство "wrap-option" управляет автоматическим переносом строк по достижении
определённых границ, таких как край столбца.
Эффект разделения свойства на 2 или более
(под-)свойств в том, чтобы сделать эквивалентное существующее свойство CSS2 "сокращением/shorthand"
для набора подсвойств, им суммируемых.
В других случаях необходимо было создавать новые свойства.
Например, есть несколько новых свойств, управляющих переносами. Сюда входят
идентификация письма и страны происхождения текста, а также такие свойства, как "hyphenation-character/символ
дефиса"
(различный, в зависимости от вида письма).
Некоторые объекты форматирования и многие свойства пришли в XSL из спецификации CSS2,
обеспечивая совместимость между ними.
Имеются 4 класса свойств XSL, которые можно идентифицировать как:
Свойства, скопированные из
CSS (с неизменённой семантикой CSS2).
Свойства
CSS с расширенными значениями.
Свойства
CSS, разбитые на части и/или расширенные.
"Чистые" свойства XSL.
Как уже было ранее сказано, XSL использует XSLT и XPath для конструирования
дерева отбора патэрнов, предоставляя таким образом большие возможности
управления тем, как представлены части содержимого-источника и какие свойства
ассоциированы с этими частями содержимого, даже там, где используются смешанные
пространства имён.
Например, патэрны XPath позволяют выбрать часть строк или текстовый узел Nth в
параграфе. Это предоставляет в распоряжение пользователя правило, выводящее,
например, все
третьи параграфы процедурных этапов в bold. Кроме того,
свойства могут быть ассоциированы с частью содержимого, базируясь на числовом
значении этой части или на атрибутах содержащего элемента. Это даёт возможность
иметь правило, по которому негативные значения выводятся "красным", а позитивные
- "чёрным". Также текст может генерироваться в зависимости от определённого
контекста в дереве-источнике,
или части дерева-источника могут быть представлены несколько раз в различных
стилях.
1.2.3
Модель расширенной структуры страницы
В XSL имеется набор объектов форматирования для описания как структуры страницы
или "фрэйма"
(насколько велико body; есть ли несколько столбцов; есть ли шапки/headers,
футеры/footers или отступы/sidebars; насколько они велики), так и правила, по
которым содержимое-источник XML размещается в этих "контейнерах".
Структура документа определяется в терминах одного или боле экземпляров объекта
форматирования "simple-page-master". Этот ОФ даёт возможность
определять независимо заполняемые области тела/body страницы (с несколькими
колонками), header, footer и sidebars. Эти simple-page-masters можно
использовать в последовательности страниц для спецификации порядка использования
различных simple-page-masters (мастеров простых страниц).
Последовательность страниц определяет также, как стилизованные компоненты
заполняют эти страницы. Такая модель позволяет специфицировать
последовательность simple-page-masters для главы книги, где экземпляры страниц
генерируются форматировщиком автоматически, или конкретную последовательность
страниц, как при выводе для журнала. Стилизованное содержимое назначается
различным разделам страницы путём ассоциирования имени раздела с именами,
добавленными к стилизованному содержимому в результирующем дереве.
В дополнение к этим объектам форматирования и свойствам структуры имеются
свойства, разработанные для контроля над форматированием, более высокого уровня,
чем это обычно бывает в страничных документах. Сюда входит управление переносами
и расширение контроля над текстом, которое хранится вместе с другим текстом в
той же строке, столбце или на той же самой странице.
Расширение свойств и объектов форматирования,
особенно в сфере управления пространством в блоках, строках и на странице и
внутри строк, потребовало расширения модели форматирования бокса CSS2.
Эта расширенная модель описана в разделе [4
Модель Области] данной спецификации.
Модель бокса CSS2 является поднабором этой модели. См. отображение терминологии
модели бокса CSS2 в терминологию Модели Области XSL в разделе
[7.2 Области XSL и Модель Бокса CSS].
Модель Области предоставляет словарь для описания соотношений и распределения
пространства между буквами, словами, строками и блоками.
Есть несколько видов письма, особенно на Дальнем Востоке, которые обычно
обрабатываются сверху-вниз, и строки обрабатываются или справа-налево (чаще
всего), или слева-направо. Используются и другие направления. Свойства,
выраженные в терминах фиксированного, абсолютного фрэйма ссылками (используются top, bottom, left
и right)
и применимые только к словам, обрабатываемым слева-направо или справа-налево,
недостаточно подходят для обработки текстов, написанных в этих видах письма.
Исходя из этих соображений, XSL (а до него - DSSSL) использует относительный
фрэйм ссылок для описания объекта форматирования и свойств. Как и фрэйм ссылок CSS2,
имеющий 4 направления (top, bottom, left и right), относительный фрэйм ссылок XSL
имеет 4 направления
(before, after, start и end), но они относительны к "writing-mode". Свойство "writing-mode"
это способ управления направлением письма, необходимый форматировщику для
корректного размещения глифов, слов, строк, блоков и т.п. на странице или экране.
"Writing-mode" отражает базовые направления, описанные
выше. Есть режимы записи для направлений "left-to-right - top-to-bottom"
(обозначается "lr-tb"), "right-to-left - top-to-bottom" (обозначается "rl-tb"),
"top-to-bottom - right-to-left" (обозначается "tb-rl") и другие. См. в разделе [7.27.7 "writing-mode"]
описание свойства "writing-mode".
Обычно значение writing-mode специфицирует два направления: первое - это inline-progression-direction,
которое определяет направление, в котором размещаются слова, а второе - это block-progression-direction,
которое определяет направление, в котором размещаются блоки (и строки), один за
другим.
Кроме того, inline-progression-direction
для последовательности символов может быть определено неявно путём использования
двунаправленных типов символов для символов из Unicode Character Database [UNICODE Character Database]
двунаправленного алгоритма Unicode (BIDI) [UNICODE UAX #9].
Помимо направления, которое явно определено по имени значения свойства "writing-mode",
режим записи определяет и другие направления, необходимые форматировщику, такие
как shift-direction (используемое в под- и надиндексах), и т.д.
Поскольку XML, в отличие от HTML, не имеет встроенной семантики,
отсутствует и встроенное обозначение гипертекстовой ссылки. В данном контексте "link/ссылка"
относится к "hypertext link/гипертекстовой ссылке", как определено в
http://www.w3.org/TR/html401/struct/links.html#h-12.1,
также как и некоторые аспекты "link", как определено в
http://www.w3.org/TR/xlink/#intro,
где "link это соотношение между двумя и более ресурсами или частями ресурсов,
установленное явно связующим элементом XLink". Следовательно,
XSL имеет объект форматирования, который выражает двойственную семантику
форматирования содержимого ссылки и семантику перехода по ссылке.
В XSL имеется несколько механизмов изменения представления целевой посещённой
ссылки. Один из этих механизмов разрешает обозначение ссылки как таковой, другой позволяет управлять размещением целевого ресурса в области просмотра, а
третий имеет несколько ступеней контроля над тем, как целевой ресурс
отображается относительно первоначального документа.
XSL предоставляет также общий механизм изменения способа, которым элементы
форматируются, в зависимости от их активного статуса. Это особенно применимо в
отношении ссылок: обозначить, был ли уже сделан переход по данной ссылке, или
применить заданный стиль, в зависимости от того, например, была ли мышь
проведена над ссылкой, или нет.