За время, которое заняло написание этой книги, формат несколько модернизировался. В частности, были внесены следующие изменения.
В феврале 2007 г. «в связи с планируемой унификацией работы библиотек и несколькими другими техническими изменениями» было произведено несколько косметических изменений.
1. В authorType добавлено поле id, которое может присутствовать наряду с остальными полями. Предназначено для однозначной идентификации авторов в библиотеке. Содержимое аналогично ID книги.
2. В document-info добавлен необязательный узел publisher типа authorType — правообладатель.
В январе 2008 г. изменения претерпел список жанров. Был убран жанр sci_business (Деловая литература), вместо него добавлен целый раздел c жанрами job_hunting (Поиск работы, карьера), management (Управление, подбор персонала), marketing (Маркетинг, PR, реклама), banking (Банковское дело), stock (Ценные бумаги, инвестиции), accounting (Бухучет, налогообложение, аудит), global_economy (Внешнеэкономическая деятельность), economics (Экономика), industries (Отраслевые издания), org_behavior (Корпоративная культура), personal_finance (Личные финансы), real_estate (Недвижимость).
Еще стало возможным добавление подзаголовков в стихи.
Поступательная эволюция формата еще раз подтверждает необходимость в стандартных читалке и редакторе.
Часть II
Подробное описание формата FictionBook
§ 2.1 Структура файла FictionBook.
Базовые понятия
Книга FictionBook представляет собой XML-файл.
Структурно этот файл можно разделить на три части.
1) Desсription — заголовок (описание) книги;
2) Body — непосредственно текст книги. В книге может быть несколько body.
3) Binary — необязательная часть. Содержит бинарные файлы, в кодировке BASE64. [2.1] Как правило, это картинки.
§ 2.2 Пример книги в формате FictionBook
Cпецификация (schema) FictionBook находится на сайте Дмитрия Грибова, а также входит в комплект FB Tools. Поэтому размещать ее в электронной версии книги смысла нет.
Но пример книги в формате FictionBook привести необходимо:
<?xml version="1.0" encoding="windows-1251"?>
<FictionBook xmlns="http://www.gribuser.ru/xml/fictionbook/2.0" xmlns:l="http://www.w3.org/1999/xlink">
<description>
<title-info>
<genre>reference</genre>
<author>
<first-name>Имя автора</first-name>
<last-name>Фамилия автора</last-name>
<nickname>Юзич</nickname>
</author>
<book-title>Пример книги в формате FictionBook 2.1</book-title>
<annotation>
<p>Это пример книги в формате FictiionBook</p>
</annotation>
<date value="2006-04-14">14 апреля 2006 г.</date>
<lang>ru</lang>
</title-info>
<document-info>
<author>
<nickname>Юзич</nickname>
</author>
<program-used>FB Tools</program-used>
<date value="2006-04-14">2006-04-14</date>
<id>1E693E16-8A80-4391-9800-C1A91A5E29A7</id>
<version>1.0</version>
<history>
<p>v 1.0 — создание книги (Юзич)</p>
</history>
</document-info>
</description>
<body>
<title>
<p>Юзич</p>
<p>ПРИМЕР КНИГИ В ФОРМАТЕ FictionBook 2.1</p>
</title>
<epigraph>
<p>Это эпиграф</p>
<text-author>Автор эпиграфа</text-author>
</epigraph>
<section>
<title>
<p>Первая секция</p>
</title>
<p>Секции обычно содержат текст.</p>
<empty-line/>
<p>Текст может разделяться пустыми строками.</p>
<subtitle>Подзаголовок</subtitle>
<p>Или подзаголовками.</p>
</section>
<section>
<title>
<p>Вторая секция</p>
</title>
<section>
<title>
<p>Первая вложенная секция</p>
</title>
<p>Текст может быть <strong>полужирным</strong> или <emphasis>курсивным</emphasis>.</p>
<p>Содержать <a l:href="#Sect3">линки</a> и <a l:href="#note01" type="note">[сноски]</a>.</p>
<p>В тексте могут быть картинки.</p>
<image l:href="#sampl.png"/>
<empty-line/>
</section>
<section>
<title>
<p>Вторая вложенная секция</p>
</title>
<cite>
<p>Это цитата.</p>
<text-author>Автор цитаты.</text-author>
</cite>
<p>Снова текст.</p>
</section>
</section>
<section id="Sect3">
<title>
<p>Третья секция</p>
</title>
<p>Стихи:</p>
<poem>
<title>
<p>Парус</p>
</title>
<stanza>
<v>А у дельфина взрезано брюхо винтом.</v>
<v>Выстрела в спину не ожидает никто.</v>
<v>На батарее нету снарядов уже.</v>
<v>Надо быстрее на вираже.</v>
</stanza>
<stanza>
<v>Но парус! Порвали парус!</v>
<v>Каюсь! Каюсь! Каюсь!</v>
</stanza>
<text-author>Владимир Высоцкий</text-author>
</poem>
<p>Снова обычный текст.</p>
</section>
</body>
<body name="notes">
<title>
<p>Примечания</p>
</title>
<section id="note01">
<title>
<p>1</p>
</title>
<p>Текст сноски.</p>
</section>
</body>
<binary id="sampl.png" content-type="image/png">iVBORw0KGgoAAAANSUhEUgAAAAkAAAAICAMAAAAcEyWHAAAABGdBTUEAAK/INwWK6QAAABl0
RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAAGUExURQEBAf///+tZAq0AAAAY
SURBVHjaYmBAAEZGRjDGzsKvDgYAAgwABR4AH2mwMFgAAAAASUVORK5CYII=</binary>
</FictionBook>
§ 2.3 Элементы описания книги.
Базовые структурные элементы
В самом начале любого файла книги идет признак формата XML
<?xml version="1.0" encoding="windows-1251"?>
Здесь указана сигнатура принадлежности к формату XML, его версия и кодировка файла. Для русскоязычных FictionBook это обычно windows-1251 или utf-8. [2.2]
За ним в обязательном порядке следует:
Элемент FictionBook
Корневой элемент.
Cинтаксис: <FictionBook>content</FictionBook>.
Фактически, всегда используется в виде:
<FictionBook xmlns="http://www.gribuser.ru/xml/fictionbook/2.0" xmlns:l="http://www.w3.org/1999/xlink">
content
</FictionBook>.
Используется в элементах: корневой элемент
Вложенные элементы: stylesheet, description, body, binary
Количество вхождений: одно
Атрибуты: xmlns
Версия формата: 2.0
Пример: см. пример книги FictionBook, § 2.2
Элемент stylesheet
Список стилей, позволяющих конкретно определить, как будет выглядеть книга на экране устройства для чтения. До последнего времени читалками не поддерживался и практически не использовался. Лишь в конце 2007 года появился CoolReader 3.09 с экспериментальной поддержкой stylesheet.
Cинтаксис: <stylesheet>content</stylesheet>.
Используется в элементах: FictionBook
Вложенные элементы: нет
Количество вхождений: одно или отсутствует.
Атрибуты: type
Версия формата: 2.0
Пример:
<stylesheet type="text/css">
.body{font-family : Verdana, Geneva, Arial, Helvetica, sans-serif;}
.p{margin:0.5em 0 0 0.3em; padding:0.2em; text-align:justify;}
</stylesheet>
Элемент description
Заголовок (описание) книги.
Cинтаксис: <description>content</description>.
Используется в элементах: FictionBook
Вложенные элементы: title-info, src-title-info, document-info, publish-info, custom-info, output
Количество вхождений: одно
Атрибуты: нет
Версия формата: 2.0
Пример:
<description>
<title-info>
<genre>nonfiction</genre>
<author>
<first-name>Имя автора</first-name>
<last-name>Фамилия автора</last-name>
</author>
<book-title>Название книги</book-title>
<date>2007 г.</date>
<lang>ru</lang>
</title-info>
<document-info>
<author>
<nickname>Юзич</nickname>
</author>
<program-used>FB Tools</program-used>
<date value="2006-07-10">2006-07-10</date>
<id>46C35002-014D-4AE4-8FE4-5E7881D72B0D</id>
<version>1.0</version>
</document-info>
</description>
Элемент body
Тело книги. Допускаются дополнительные body для примечаний и дополнительных материалов.
Cинтаксис: <body>content</body>.