Анализ технико-экономических показателей разработки и эксплуатации ПП 2 страница


2.2 Расширяемый язык разметки XML

 

XML используется в качестве средства для описания грамматики других языков и контроля над правильностью составления документов. То есть, сам по себе XML не содержит никаких тегов – элементов языка предназначенных для разметки, он просто определяет условия их создания. Теги не заданы в этом языке с самого начала. Программист сам определяет их. Таким образом, если мы считаем, что для обозначения элемента line в документе необходимо использовать тег <line/>; то XML позволяет свободно использовать определяемый нами тег и мы можем включать в документ фрагменты, подобные следующему: <line> данные </line>. Как видно из примера, открывающий <line> и закрывающий </line> содержат в себе данные. Во многих случаях, когда их много, целесообразно

Процесс создания XML документа достаточно прост и требует лишь базовых знаний HTML и понимания тех задач, которые необходимо выполнить, используя XML в качестве языка разметки. Таким образом, у разработчиков появляется уникальная возможность определять собственные команды, позволяющие им наиболее эффективно определять данные, содержащиеся в документе. Автор документа создает его структуру, строит необходимые связи между элементами, используя те команды, которые удовлетворяют его требованиям, и добивается такого типа разметки, которое необходимо ему для выполнения операций просмотра, поиска, анализа документа [2].

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

 


2.3 Язык стилей XSL

 

С помощью XSL возможно форматировать данные в зависимости от их значения (например, показывать отрицательные числа зелёным цветом) и подготавливать для вывода на различные устройства, например, экран, бумагу или звуковое воспроизведение. Фактически язык XML состоит из двух частей: языка преобразований XSLT и языка форматирования XSL-FO.

XSLT – язык преобразования XML в другие типы документов или в другие XML-документы. Он является наиболее важной частью стандарта XSL. XSLT можно применять для преобразования XML документов в формат, знакомый браузерам [2].

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

XSL-FO – язык форматирования, описывающий внешний вид страниц. Он предоставляет более совершенную визуальную модель страницы, нежели HTML и CSS. В отличие от связки последних, XSL-FO поддерживает такие типы форматирования, как направление письма с права на лево и снизу вверх, сноски, заметки на полях документа, перекрёстные ссылки на номера страниц и другие. В отличие от каскадных таблиц стилей CSS, которые преимущественно предназначены для веб-страниц, XSL-FO предназначен для более широкого круга задач. Можно, например, написать таблицу стилей XSL, которая с помощью форматирующих объектов сгенерирует вёрстку целой книги. Другая таблица стилей может “сгенерировать” из того же документа веб-сайт [4].

Подобно другим XML-приложениям, форматирующие XSL-объекты имеют собственное пространство имен http://www.w3.org/1999/XSL/Format (для XSLT пространство имён http://www.w3.org/1999/XSL/Transform), для которого, как правило, используется префикс fo. Например, далее показано, как можно создать блок, который отображает текст "Добрый день" с помощью шрифта sans-serif, размер которого составляет 14 пунктов. При этом используется форматирующий объект <fo:block>:

<fo:block font-family=”sans-serif” line-height=”8pt” font-size=”14pt”>

Добрый день

</fo:block>

В этом примере используется форматирующий объект fo:block, а также его свойства font-fami1у, line-height и font-size, которым присваиваются некоторые значения. После создания документа с использованием fo-объектов, можно воспользоваться специальной программой для получения отформатированного документа.

 


2.4 Текстовые процессоры

 

Для преобразования xml-документа, содержащего данные спецификации, используются текстовые процессоры: XMLConverter, MSXSL и Apache FOP. Первый, из которых, преобразует xml-документ в промежуточный xml-документ. Он добавляет отступы в виде пустых строк в спецификацию, а также дописывает их в конец последней страницы. Второй процессор используется для применения XSLT-инструкций, описанных в xsl-файле, к xml-файлу. В результате чего получается fo-файл. Он содержит данные xml-документа и форматирующие объекты xsl-шаблона. Для преобразования fo-файла в pdf-документ, используется Apache FOP.

 

В рамках текущей главы дана постановка задачи. Продемонстрирована схема механизма преобразования xml-представления групповой спецификации в pdf-документ. Даны общие понятия об объектах, участвующих в преобразовании.


3 РЕАЛИЗАЦИЯ ПРЕДСТАВЛЕНИЯ СПЕЦИФИКАЦИИ В XML-ФОРМАТЕ И ЕЕ ПРЕОБРАЗОВАНИЕ В PDF-ФОРМАТ

 

 

3.1 Разработка структуры xml-файла

 

Информационная структура файла формата XML представляет собой дерево. В роли элементов дерева (предков, потомков и листьев) выступают теги и их атрибуты. Теги используются для разметки документа на фрагменты, содержащие данные разного вида. Атрибуты применяются для обозначения данных разного рода. Атрибуты так же называют объектами. Они состоят из имени и поля, содержащего данные. Зная название тега, позицию в файле и имя атрибута, можно получить доступ к этим данным. Данные имеют строковый тип, но могут интерпретироваться программами как числа.

Файлы описываемого формата являются текстовыми, соответственно их содержимое – это текст. Язык, применяемый для разметки содержимого этих файлов – это язык гипертекстовой разметки XML. Программы, работающие с файлами данного типа, можно отнести к классу текстовых процессоров. Они интерпретируют байты данных xml-файла как символы. Исходя из этого, разработчиками стандартов XML было введено требование, указывать кодировку файла по средствам одного из атрибутов тега xml, относящегося к инструкциям и обозначаемого следующим образом: <?xml version="1.0" encoding="UTF-8" ?>. В приведённом примере это атрибут encoding, имеющий значение поля UTF-8 (однобайтный Unicode). Объект version указывает версию используемого языка разметки XML. [1]

Информационная структура, разрабатываемого файла, содержащего данные спецификации, представлена на рисунке 3.1. Как видно из рисунка, данные, входящие в спецификацию, подразделяются на данные, входящие в штамп, данные, относящиеся к разделу, и данные, входящие в строку. Штамп присутствует в одном экземпляре. Все данные, относящиеся к нему, есть всегда. Наименование раздела отсутствовать не может, так как в противном случае теряется смысл в самом разделе. Строка состоит из следующих данных: формат, зона, позиция, обозначение, наименование, количество на исполнение и примечание. Количеств на исполнение несколько. В зависимости от спецификации их может быть: 10, 30, 39. Счёт начинается с 0. Например, если количеств 10, N будет равен 9.

 

 

Рисунок 3.1

 

Разделов, как и строк, может быть много. Их число определяется данными, сформированными в PartList, а также требованиями соответствующего ГОСТа.

Для представления описанной структуры данных в XML формате воспользуемся тегами и их атрибутами. Для обозначения корневого элемента спецификации будем использовать элементы <specification> и </specification>. Данные, относящиеся к штампу спецификации, ограничим при помощи тега <stamp/>. Разметим содержимое элемента <stamp/> с помощью следующих атрибутов: OBOZNACHENIE, NAIMENOVANIE_1, NAIMENOVANIE_2, NAIMENOVANIE_3, NAIMENOVANIE_4, NAIMENOVANIE_5, RAZRABOTAL, PROVERIL, N_KONTROL, UTVERDIL, NAZVANIE_ORGANIZACII_1, NAZVANIE_ORGANIZACII_2, PERVICH_PRIM, kline_before, kline_after, kpage. Соответствующие значения атрибутов представлены в таблице 3.1. Наименование разбивается, в зависимости от длины, на некоторое количество строк (не больше 5). Атрибут NAZVANIE_ORGANIZACII_2 может отсутствовать, если название организации состоит из одной строки.

 

 

Таблица 3.1 - Атрибуты элемента <stamp/>  
Атрибут Значение
OBOZNACHENIE Обозначение
NAIMENOVANIE_1 Наименование, строка 1
NAIMENOVANIE_2 Наименование, строка 2
NAIMENOVANIE_3 Наименование, строка 3
NAIMENOVANIE_4 Наименование, строка 4
NAIMENOVANIE_5 Наименование, строка 5

 


 

Продолжение Таблицы 3.1  
Атрибут Значение
RAZRABOTAL Разработал
PROVERIL Проверил
N_KONTROL Нормоконтролер
UTVERDIL Утвердил
NAZVANIE_ORGANIZACII_1 Название организации, 1
NAZVANIE_ORGANIZACII_2 Название организации, 2
PERVICH_PRIM Первичная применяемость
kline_before Отступ перед разделом
kline_after Отступ после раздела
Kpage Количество страниц в документе

 

 

Раздел обозначим при помощи тега <section/>. К данному элементу относится только одно поле данных «наименование», обозначим его следующим образом s_NAIMENOVANIE. Символ s в начале имени описываемого элемента служит для идентификации этого атрибута, как атрибута относящегося к тегу <section/>.

Для выделения данных, относящихся к строке, будем использовать тег <line/>. Соответствующие значения атрибутов представлены в таблице 3.2. Примечание может быть представлено в виде одной строки (атрибут PRIMECHANIE), а может быть разбито на две строки (PRIMECHANIE_1 и PRIMECHANIE_2, соответственно).

 

 

Таблица 3.2 - Атрибуты элемента <line/>  
Атрибут Значение
FORM Формат
ZONE Зона
POZICIA Позиция
OBOZNACHENIE Обозначение
NAIMENOVANIE Наименование
Атрибут Значение
KOL-VO_0 Количество 0

 

. .

. .

. .

 

KOL-VO_N Количество N
PRIMECHANIE Примечание
PRIMECHANIE_1 Примечание, строка 1
PRIMECHANIE_2 Примечание, строка 2

 

 

Представим разработанную информационную структуру данных в виде дерева XML. Применим все обозначенные ранее теги и атрибуты. В результате получим следующий документ.

 

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

<specification>

<stamp OBOZNACHENIE="СПЕЦИФИКАЦИЯ" NAIMENOVANIE_1="" NAIMENOVANIE_2="" NAIMENOVANIE_3="Разгонщик" NAIMENOVANIE_4="" NAIMENOVANIE_5="" RAZRABOTAL="Кобыльский" PROVERIL="Гундорова" N_KONTROL="Качанов" UTVERDIL="Кравец"

NAZVANIE_ORGANIZACII_1="ВГТУ, ФАЭМ" NAZVANIE_ORGANIZACII_2="ВМ-022"

PERVICH_PRIM = ""

kline_before="2" kline_after="1" kpage="3"/>

<section s_NAIMENOVANIE="Документация"/>

<line FORM="" ZONE="" POZICIA="" OBOZNACHENIE="Р35-1.00.000 СБ" NAIMENOVANIE="Сборочный чертеж" KOL-VO_0="" PRIMECHANIE="" PRIMECHANIE_1="" PRIMECHANIE_2=""/>

… <!-- Некоторое количество элементов <line … /> -->

<line FORM="" ZONE="" POZICIA="" OBOZNACHENIE="Р35-1.00.000 МЧ" NAIMENOVANIE="Монтажный чертеж" KOL-VO_0="" PRIMECHANIE="" PRIMECHANIE_1="примечание" PRIMECHANIE_2=""/>

 

<section s_NAIMENOVANIE="Сборочные единицы"/>

<line FORM="" ZONE="" POZICIA="1" OBOZNACHENIE="Р34-1.05.000" NAIMENOVANIE="Подъемник" KOL-VO_0="1" PRIMECHANIE="" PRIMECHANIE_1="" PRIMECHANIE_2=""/>

<line FORM="" ZONE="" POZICIA="2" OBOZNACHENIE="Р35-1.01.003" NAIMENOVANIE="Гидроцилиндр" KOL-VO_0="3" PRIMECHANIE="" PRIMECHANIE_1="" PRIMECHANIE_2=""/>

</specification>

 

Для наглядности здесь представлен небольшой документ, не отражающий все данные спецификации, но демонстрирующий её представление в виде xml-документа. Пустые атрибуты (атрибуты, не содержащие данных, например FORM="") могут отсутствовать, они представлены в данном примере для отображения всей информационной структуры xml-файла.

 


3.2 Применение XSLT-инструкций для разработки шаблона XSL

 

Применение XSLT-инструкций обусловлено необходимостью выборки данных из xml-файла. Для их использования в шаблоне XML необходимо указать пространство имён, а именно: <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"/>. Здесь тег xsl из пространства имён xmlns, содержит строку, указывающую на использование в документе пространства имён xsl. Атрибут version указывает версию используемого языка XSL [1].

Для установки соответствия с корневым узлом xml-документа и создания соответствующего шаблона используется элемент <xsl:template> с атрибутом match, указывающим на корневой элемент. Записывается следующим образом: <xsl:template match="specification"> </xsl:template>. Объект specification – это название корневого элемента (тега) преобразуемого xml-файла. В том случае, если в качестве первого узла необходимо выбрать не корневой элемент, указывается путь к этому элементу. К примеру, значение атрибута match="specification/table" указывает, что в качестве превого узла выбран тег table. Путь к элементу указывается через символ /.

Для получения данных, относящихся к определённому элементу документа формата XML, необходимо использовть <xsl:value-of> с трабутом select, содержащим имя выделяемого элемента, либо путь к ниму. Например, select="stamp/@RAZRABOTAL". При этом не указывается ранее пройденный путь. Тоесть, если тег с именем stamp находится следующим, по иерархии, за элементом specification, а последний был выбран с помощью xsl:template, то в атрибуте select (элемента xsl:value-of), путь указывается, начиная с выбранного ранее элемента (в данном случае specification) не включительно. Если выделяемые данные принадлежат атрибуту элемента, при записи пути его имя указывается со знаком @ в начале.

Элемент xsl:template и входящий в него шаблон применяются только по отношению к корневому узлу, либо к узлу, с которого начинается преобразование. Можно также применять шаблон к дочерним элементам узла, с которым установлено соответствие. В этих целях применяется элемент <xsl:apply-templates>. В принадлежащем ему атрибуте math указывается узел, с которого необходимо начать обход дерева.

Пример использования xsl:apply-templates приведён ниже.

 

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

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:template match="specification">

<xsl:apply-templates select="*"/>

</xsl:template>

<xsl:template match="line | section">

….. <!-- Данные шаблона -->

</xsl:template>

<xsl:stylesheet>

 

Рассмотрим приведённый код. При просмотре текста сверху вниз, первые элементы <xsl:template match="specification"> и </xsl:template> являются начальным и конечным элементами шаблона корневого узла specification. Элемент xsl:apply-templates, входящий в рассматриваемый шаблон, указывает на то, что к дочерним элементам узла specification будет применён соответствующий шаблон. Атрибут select рассматриваемого объекта содержит путь к дочерним элементам [1]. В данном случае select содержит символ *, который означает установку соответствия со всеми дочерними элементами тега specification. В этом случае элемент select может быть опущен. Шаблон для этих элементов описан так:

<xsl:template match="line | section">

….. <!-- Данные шаблона -->

</xsl:template>

Содержимое атрибута match указывает на выбор тегов с именами line или section (дочерних тегу specification). Символ | означает логический элемент «или» (дизъюнкцию).

В том случае, когда элементов xsl:apply-templates несколько (более одного), а соответственно и шаблонов, указывается имя, идентифицирующее используемый шаблон. Атрибут содержащий имя, называется mode [4]. Демонстрационный пример xsl-файла приведён ниже.

 

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

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:template match="specification">

<xsl:apply-templates select="*[13>position()]"/>

<xsl:apply-templates select="*[position()>11]" mode="page_B"/>

</xsl:template>

<xsl:template match="line | section">

….. <!-- Данные шаблона -->

</xsl:template>

<xsl:template match="line | section" mode="page_B">

….. <!-- Данные шаблона -->

</xsl:template>

<xsl:stylesheet>

 

В первом, при чтении сверху вниз, элементе xsl:apply-templates не указывается атрибут с именем используемого шаблона. Принадлежащему ему шаблону, размеченному с помощью тегов xsl:template, имя не присваивается. Для второго и последующих объектов xsl:apply-templates указывается арибут с именем используемого шаблона, если не используется первый шаблон без имени. Любой шаблон может использоваться несколькими элементами xsl:apply-templates.

Для описания условий выбора тех или иных элементов используется язык XPath [1]. Объект position() рассматриваемого языка служит для получения позиции просматриваемого узла в документе. Выражение *[position()>11], указывает, что будут выбраны все элементы, позиция которых больше 11. Оператор [ ] применяется для проверки истинности определённого условия. Узлы нумеруются отдельно для потомков каждого предка.

 

3.3 Разработка шаблона XSL

 

При разработке xsl-шаблона применяются расширяемые языки таблицы стилей: XSLT и XSL-FO. Первый применяется для трансформации xml-документа (выборки данных из XML), а второй – для описания представления этих данных.

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

Для описания представления страниц в языке XML-FO предусмотрен ряд элементов. Одним из таких элементов является fo:root. Этот объект содержит один элемент fo:layout-master-set и один или несколько элементов fo:page-sequence. В объекте fo:page-sequence размещается основное содержимое документа. Элемент fo:layout-master-set содержит шаблоны создаваемых страниц, которые также именуются мастер-страницами [4]. Мастер-страница, обозначаемая fo:simple-page-master, задаёт общий макет страницы, включая отступы, размеры заголовков, основную область страницы и так далее. Элемент fo:simple-page-master имеет атрибуты, содержащие значения размеров: страницы и отступов. Соответствующие атрибуты и их описание, представлены в таблице 3.3.

 

Таблица 3.3  
Элемент Описание
Page-height Высота страницы
Page-width Ширина страницы
margin-top Отступ сверху
Margin-bottom Отступ снизу
margin-left Отступ слева
margin-right Отступ справа

 

Спецификация XML-FO предусматривает разбиение страницы на пять областей: центральной, заголовка, футера (нижней области), конечной области (правая часть листа) и начальной области. Рассматриваемы области задаются с помощью дочерних элементов объекта fo:simple-page-master, которые представлены в таблице 3.4.

 

Таблица 3.4  
Элемент Описание области
region-body Центральная
Region-before Заголовок
region-after Футер
region-start Начальная
region-end Конечная

 

Каждый, из рассматриваемых элементов, кроме region-body, имеет атрибут extent. Для region-before и region-after он определяет высоту области. Для region-start и region-end – ширину. Центральной (основной) области отводится вся страница, кроме отступов [4]. То есть, она занимает пространство других областей. Для неё существуют атрибуты, задающие отступы. Можно задать величины отступов таким образом, чтобы основная область не перекрывала другие. Имена рассматриваемых атрибутов, задающих отступы, соответствуют атрибутам страницы. Они представлены в таблице 3.3.

Демонстрационный пример xsl-файла представлен ниже.

 

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

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"

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

<xsl:template match="specification">

<fo:root>

<fo:layout-master-set>

<fo:simple-page-master page-height="210mm"

page-width="297mm"

margin-top="8mm"

margin-bottom="5mm"

margin-left="5mm"

margin-right="5mm">

<fo:region-body margin-top="27mm"

margin-bottom="90mm"

margin-left="0mm"

margin-right="0mm"/>

<fo:region-before extent="27mm"/>

<fo:region-after extent="90mm"/>

</fo:simple-page-master>

</fo:layout-master-set>

<fo:page-sequence>

... <!-- Содержимое документа -->

</fo:page-sequence>

</fo:root>

</xsl:template>

</xsl:stylesheet>

 

Как уже упоминалось ранее, первая страница спецификации, а точнее, её штамп, отличается от штампа, представленного на второй и последующих страницах. Отсюда можно сделать вывод, что представление этих страниц должно быть описано с помощью разных шаблонов. Для этого необходимо каждому макету страницы присвоить имя, а в элементе fo:simple-page-master указать атрибут master-name с именем данного шаблона. Соответствующий объект fo:page-sequence, содержащий описание представления данных на старнице, должен иметь потомка – атрибут master-reference. Описываемый объект должен указывать на имя одной из мастер-страниц в элементе fo:layout-master-set [1].

При использовании нескольких мастер страниц необходима их группировка в элементе fo:page-sequence-master. Рассматриваемый объект является дочерним элементу fo:layout-master-set, в котором с помощью одного или нескольких дочерних элементов задается порядок, в котором будут инициализироваться конкретные мастер-страницы. Таким образом определяется последовательность расположения описанных страниц. Для задания этой последовательности применяется элемент fo:single-page-master-reference с атрибутом master-reference, указывающим на имя одной из мастер-страниц. Пример соответствующего фрагмента файла XSL, приведён ниже.

 

<fo:layout-master-set>

<fo:simple-page-master master-name="page1"

page-height="310mm"

page-width="397mm"

margin-top="8mm"

margin-bottom="5mm"

margin-left="5mm"

margin-right="5mm">

<fo:region-body margin-top="37mm"

margin-bottom="90mm"

margin-left="0mm"

margin-right="0mm"/>

<fo:region-before extent="37mm"/>

<fo:region-after extent="90mm"/>

</fo:simple-page-master>

<fo:simple-page-master master-name="page3"

page-height="310mm"

page-width="397mm"

margin-top="8mm"

margin-bottom="5mm"

margin-left="5mm"

margin-right="5mm">

<fo:region-body

margin-top="37mm"

margin-bottom="15mm"

margin-left="0mm"

margin-right="0mm"/>

<fo:region-before extent="37mm"/>

<fo:region-after extent="15mm"/>

</fo:simple-page-master>

<fo:page-sequence-master master-name="contents">

<fo:single-page-master-reference master-reference="page1"/>

<fo:single-page-master-reference master-reference="page3"/>

</fo:page-sequence-master>

</fo:layout-master-set>

 

Данные, относящиеся к штампу, как было сказано ранее, статичны. Для описания статичных областей применяется элемент fo:static-content с атрибутом flow-name, указывающим на регион, для которого инициализирована мастер страница [2]. То есть, объект fo:static-content является потомком элемента fo:page-sequence. Значения атрибута flow-name указаны в таблице 3.5.

 

 

Таблица 3.5  
Значения атрибута flow-name Описание области
xsl-region-body Центральная
xsl-region-before Заголовок
xsl-region-after Футер
xsl-region-start Начальная
xsl-region-end Конечная

 

 

Содержимое же центральной области страницы, напротив, изменяется. Данные, извлечённые с помощью XSLT из xml-документа, «перетекают» с одного листа на другой. То есть fop-процессор, обрабатывая fo-файл, должен помещать данные на основную область страницы до тех пор, пока на ней хватает места. Как только ресурс листа иссякнет, fop-процессор должен создать новый лист и продолжить добавление данных. Этот процесс должен продолжаться до тех пор, пока все данные из fo-файла не будут внесены в файл формата PDF. Соответственно объём данных, расположенных в файле FO, а ранее в файле XML, определит количество страниц в файле PDF. Для реализации поточного метода выборки и представления данных в спецификации языка XSL-FO предусмотрен элемент fo:flow. Рассматриваемый объект хранит реальное содержимое, которое будет размещаться на страницах в соответствии с мастер-страницами. Это содержимое образуется последовательностью элементов: fo:block, fo:block-container, fo:table [1].

Объект fo:block применяется для задания свойств выводимого текста. Свойства задаются с помощью соответствующих атрибутов. С помощью данного элемента задаются видимые или невидимые границы текста. При описании текстовых данных в xsl-шаблоне применение fo:block обязательно. В этом элементе можно не использовать атрибуты форматирования текста, границ блока и так далее. Fop-процессор просто применит значения по умолчанию (черный цвет шрифта, невидимые границы блока и так далее). Возможно также указание атрибуты форматирования текста в некоторых родительских элементах. Атрибуты, используемые при форматировании текста, и их описание представлены в таблице 3.6.