В прошлом материале мы рассказывали об особенностях формата DjVu. Сегодня мы решили остановиться на формате FictionBook2, более известном как FB2, и его «наследнике» FB3.
![](https://habrastorage.org/r/w780q1/webt/um/qn/2r/umqn2rwomfyrotoqxefcqe5qhfc.jpeg)
/ Flickr / Judit Klein / CC
В середине 90-х годов энтузиасты начали оцифровывать советские книги. Они переводили и сохраняли литературу в самых разнообразных форматах. Одна из первых библиотек в Рунете — Библиотека Максима Мошкова — использовала форматированный текстовый файл (TXT).
Выбор в его пользу был сделан из-за устойчивости к повреждению байтов и универсальности — TXT открывается на любой операционной системе. Однако он затруднял обработку хранимой текстовой информации. Например, для перехода на тысячную строку приходилось обрабатывать 999 строк, идущих перед ней. Книги также хранили в «вордовских» документах и PDF — последний было сложно преобразовывать в другие форматы, а слабые компьютеры открывали и отображали PDF-документы с задержками.
Также для «хранения» электронной литературы использовали HTML. Он упростил индексацию, преобразование в другие форматы и создание документов (разметку текста тегами), но привнес собственные недостатки. Одним из самых значимых была «расплывчатость» стандарта: он позволял определенные вольности при написании тегов. Некоторые из них должны были быть закрыты, другие (например, <p>) — закрывать было необязательно. Сами теги могли иметь произвольный порядок вложения.
И хотя подобная работа с файлами не поощрялась — такие документы считались некорректными — стандарт требовал от ридеров попробовать отобразить содержимое. Здесь и возникали сложности, так как в каждом приложении процесс «домысливания» был реализован по-своему. При этом на тот момент имеющиеся на рынке устройства и приложения для чтения понимали один-два специализированных формата. Если книга имелась в одном формате, её приходилось переформатировать, чтобы прочесть. Решить все эти недостатки и был призван FictionBook2, или FB2, который взял на себя первичное «причесывание» текста и конвертацию.
FB2 создала группа разработчиков, возглавляемая Дмитрием Грибовым, который является техническим директором компании «ЛитРес», и Михаилом Мацневым, создателем читалки Haali Reader. В основу формата лег XML, который строже, чем HTML, регламентирует работу с незакрытыми и вложенными тегами. XML-документ сопровождается так называемой XML-схемой. XML-схема — это специальный файл, в котором собраны все теги и описаны правила их применения (последовательность, вложенность, обязательность и необязательность и др.). В FictionBook схема находится в файле FictionBook2.xsd. Пример XML-схемы вы можете найти по ссылке (она используется магазином электронных книг «ЛитРес»).
Текст в документе хранится в специальных тегах — элементах типов параграфов: <p>, <v> и <subtitle>. Также есть элемент <empty-line>, который не имеет содержимого и используется для вставки пропусков.
Все документы начинаются с корневого тега <fictionbook>, ниже которого могут появляться <stylesheet>, <description>, <body> и <binary>.
Тег <stylesheet> содержит таблицы стилей, чтобы облегчить конвертацию в другие форматы. В <binary> лежат закодированные с помощью base64 данные, которые могут понадобится для рендеринга документа.
Элемент <description> содержит всю необходимую информацию о книге: жанр произведения, список авторов (Ф. И. О., адрес электронной почты и сайт в интернете), название, блок с ключевыми словами, аннотацию. Также в нем может быть информация о вносимых в документ изменениях и данные об издателе книги, если она выпускалась на бумажном носителе.
Вот так выглядит часть блока <description> в записи FictionBook для произведения «Этюд в багровых тонах» Артура Конана Дойла, взятого из Проекта «Гутенберг»:
Ключевым компонентом FictionBook-документа является <body>. Он содержит непосредственно текст книги. Во всем документе этих тегов может быть несколько — дополнительные блоки используются для хранения сносок, комментариев и примечаний.
FictionBook также предоставляет несколько тегов для работы с гиперссылками. Они основываются на спецификации XLink, разработанной консорциумом W3C специально для создания ссылок между различными ресурсами в XML-документах.
Стандарт FB2 включает в себя лишь минимально необходимый набор тегов (достаточный для «оформления» художественной литературы), что упрощает его обработку ридерами. Причем в случае прямой работы ридера с форматом FB, пользователь получает возможность настроить под себя практически все параметры отображения.
Строгая структура документа позволяет автоматизировать процесс преобразования из формата FB в любой другой. Эта же структура дает возможность работать с отдельными элементами документов — настраивать фильтры по авторам книг, названию, жанру и др. По этой причине формат FB2 и приобрел популярность в Рунете, став стандартом по умолчанию в российских электронных библиотеках и библиотеках стран СНГ.
Простота формата FB2 является его достоинством и недостатком одновременно. Это ограничивает функционал для сложной верстки текста (например, примечаний на полях). В нем нет векторной графики и поддержки нумерованных списков. По этой причине формат не очень подходит для учебников, справочников и технической литературы (об этом даже говорит само название формата — fiction book, или «художественная книга»).
При этом, чтобы отобразить минимальную информацию о книге — название, автора и обложку — программе требуется обработать практически весь XML-документ. Это связано с тем, что метаданные располагаются в начале текста, а изображения — в конце.
В связи с возросшими требованиями к форматированию текстов книг (и чтобы нивелировать некоторые из недостатков FB2), Грибов начал работу над форматом FB3. Позже разработка остановилась, но в 2014 году была возобновлена.
По словам авторов, они изучили реальные потребности при издании технической литературы, посмотрели учебники, справочники, пособия и очертили более конкретный набор тегов, который бы позволил отобразить любую книгу.
В новой спецификации формат FictionBook представляет собой zip-архив, в котором отдельными файлами хранятся метаданные, изображения и текст. Требования к формату zip-файла и соглашения о его организации прописаны в стандарте ECMA-376, определяющем Open XML.
Был сделан ряд улучшений, связанных с форматированием (разрядка, подчеркивание) и добавлен новый объект — «блок» — оформляющий произвольный фрагмент книги в виде четырехугольника и способный внедряться в текст с обтеканием. Появилась поддержка нумерованных и маркированных списков.
FB3 распространяется по свободной лицензии и имеет открытый код, поэтому издателям и пользователям доступны все утилиты: конвертеры, облачные редакторы, читалки. Текущую версию формата, читалку и редактор можно найти в репозитории проекта на GitHub.
В целом FictionBook3 пока менее распространён, чем его старший брат, однако книги в этом формате уже предлагают несколько электронных библиотек. А в «ЛитРес» еще пару лет назад заявляли о намерении перевести весь свой каталог на новый формат. Часть ридеров уже поддерживает весь необходимый функционал FB3. Например, работать с этим форматом «из коробки» умеют все современные модели ридеров ONYX, например, Darwin 3 или Cleopatra 3.
![](https://habrastorage.org/r/w1560/webt/-k/rs/aq/-krsaqteiptpyfowyc-hc2riax8.png)
/ ONYX BOOX Cleopatra 3
Более широкое распространение FictionBook3 позволит сформировать экосистему, ориентированную на полноценную и эффективную работу с текстом на любом устройстве с ограниченными ресурсами: черно-белым или небольшим дисплеем, низким объемом памяти и др. По словам разработчиков, единожды сверстанная книга будет максимально удобной в любой среде.
P.S. Предлагаем вашему вниманию несколько обзоров ридеров ONYX BOOX:
![](https://habrastorage.org/webt/um/qn/2r/umqn2rwomfyrotoqxefcqe5qhfc.jpeg)
/ Flickr / Judit Klein / CC
Появление формата
В середине 90-х годов энтузиасты начали оцифровывать советские книги. Они переводили и сохраняли литературу в самых разнообразных форматах. Одна из первых библиотек в Рунете — Библиотека Максима Мошкова — использовала форматированный текстовый файл (TXT).
Выбор в его пользу был сделан из-за устойчивости к повреждению байтов и универсальности — TXT открывается на любой операционной системе. Однако он затруднял обработку хранимой текстовой информации. Например, для перехода на тысячную строку приходилось обрабатывать 999 строк, идущих перед ней. Книги также хранили в «вордовских» документах и PDF — последний было сложно преобразовывать в другие форматы, а слабые компьютеры открывали и отображали PDF-документы с задержками.
Также для «хранения» электронной литературы использовали HTML. Он упростил индексацию, преобразование в другие форматы и создание документов (разметку текста тегами), но привнес собственные недостатки. Одним из самых значимых была «расплывчатость» стандарта: он позволял определенные вольности при написании тегов. Некоторые из них должны были быть закрыты, другие (например, <p>) — закрывать было необязательно. Сами теги могли иметь произвольный порядок вложения.
И хотя подобная работа с файлами не поощрялась — такие документы считались некорректными — стандарт требовал от ридеров попробовать отобразить содержимое. Здесь и возникали сложности, так как в каждом приложении процесс «домысливания» был реализован по-своему. При этом на тот момент имеющиеся на рынке устройства и приложения для чтения понимали один-два специализированных формата. Если книга имелась в одном формате, её приходилось переформатировать, чтобы прочесть. Решить все эти недостатки и был призван FictionBook2, или FB2, который взял на себя первичное «причесывание» текста и конвертацию.
Отметим, что у формата была первая версия — FictionBook1 — однако она носила лишь экспериментальный характер, просуществовала недолго, на сегодняшний день не поддерживается и не имеет обратной совместимости. Поэтому под FictionBook чаще всего подразумевают его «последователя» — формат FB2.
FB2 создала группа разработчиков, возглавляемая Дмитрием Грибовым, который является техническим директором компании «ЛитРес», и Михаилом Мацневым, создателем читалки Haali Reader. В основу формата лег XML, который строже, чем HTML, регламентирует работу с незакрытыми и вложенными тегами. XML-документ сопровождается так называемой XML-схемой. XML-схема — это специальный файл, в котором собраны все теги и описаны правила их применения (последовательность, вложенность, обязательность и необязательность и др.). В FictionBook схема находится в файле FictionBook2.xsd. Пример XML-схемы вы можете найти по ссылке (она используется магазином электронных книг «ЛитРес»).
Структура документа FB2
Текст в документе хранится в специальных тегах — элементах типов параграфов: <p>, <v> и <subtitle>. Также есть элемент <empty-line>, который не имеет содержимого и используется для вставки пропусков.
Все документы начинаются с корневого тега <fictionbook>, ниже которого могут появляться <stylesheet>, <description>, <body> и <binary>.
Тег <stylesheet> содержит таблицы стилей, чтобы облегчить конвертацию в другие форматы. В <binary> лежат закодированные с помощью base64 данные, которые могут понадобится для рендеринга документа.
Элемент <description> содержит всю необходимую информацию о книге: жанр произведения, список авторов (Ф. И. О., адрес электронной почты и сайт в интернете), название, блок с ключевыми словами, аннотацию. Также в нем может быть информация о вносимых в документ изменениях и данные об издателе книги, если она выпускалась на бумажном носителе.
Вот так выглядит часть блока <description> в записи FictionBook для произведения «Этюд в багровых тонах» Артура Конана Дойла, взятого из Проекта «Гутенберг»:
<?xml version="1.0" encoding="iso-8859-1"?>
<FictionBook xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns="http://www.gribuser.ru/xml/fictionbook/2.0">
<description>
<title-info>
<genre match="100">detective</genre>
<author>
<first-name>Arthur</first-name>
<middle-name>Conan</middle-name>
<last-name>Doyle</last-name>
</author>
<book-title>A Study in Scarlet</book-title>
<annotation>
</annotation>
<date value="1887-01-01">1887</date>
</title-info>
</description>
Ключевым компонентом FictionBook-документа является <body>. Он содержит непосредственно текст книги. Во всем документе этих тегов может быть несколько — дополнительные блоки используются для хранения сносок, комментариев и примечаний.
FictionBook также предоставляет несколько тегов для работы с гиперссылками. Они основываются на спецификации XLink, разработанной консорциумом W3C специально для создания ссылок между различными ресурсами в XML-документах.
Достоинства формата
Стандарт FB2 включает в себя лишь минимально необходимый набор тегов (достаточный для «оформления» художественной литературы), что упрощает его обработку ридерами. Причем в случае прямой работы ридера с форматом FB, пользователь получает возможность настроить под себя практически все параметры отображения.
Строгая структура документа позволяет автоматизировать процесс преобразования из формата FB в любой другой. Эта же структура дает возможность работать с отдельными элементами документов — настраивать фильтры по авторам книг, названию, жанру и др. По этой причине формат FB2 и приобрел популярность в Рунете, став стандартом по умолчанию в российских электронных библиотеках и библиотеках стран СНГ.
Недостатки формата
Простота формата FB2 является его достоинством и недостатком одновременно. Это ограничивает функционал для сложной верстки текста (например, примечаний на полях). В нем нет векторной графики и поддержки нумерованных списков. По этой причине формат не очень подходит для учебников, справочников и технической литературы (об этом даже говорит само название формата — fiction book, или «художественная книга»).
При этом, чтобы отобразить минимальную информацию о книге — название, автора и обложку — программе требуется обработать практически весь XML-документ. Это связано с тем, что метаданные располагаются в начале текста, а изображения — в конце.
FB3 — развитие формата
В связи с возросшими требованиями к форматированию текстов книг (и чтобы нивелировать некоторые из недостатков FB2), Грибов начал работу над форматом FB3. Позже разработка остановилась, но в 2014 году была возобновлена.
По словам авторов, они изучили реальные потребности при издании технической литературы, посмотрели учебники, справочники, пособия и очертили более конкретный набор тегов, который бы позволил отобразить любую книгу.
В новой спецификации формат FictionBook представляет собой zip-архив, в котором отдельными файлами хранятся метаданные, изображения и текст. Требования к формату zip-файла и соглашения о его организации прописаны в стандарте ECMA-376, определяющем Open XML.
Был сделан ряд улучшений, связанных с форматированием (разрядка, подчеркивание) и добавлен новый объект — «блок» — оформляющий произвольный фрагмент книги в виде четырехугольника и способный внедряться в текст с обтеканием. Появилась поддержка нумерованных и маркированных списков.
FB3 распространяется по свободной лицензии и имеет открытый код, поэтому издателям и пользователям доступны все утилиты: конвертеры, облачные редакторы, читалки. Текущую версию формата, читалку и редактор можно найти в репозитории проекта на GitHub.
В целом FictionBook3 пока менее распространён, чем его старший брат, однако книги в этом формате уже предлагают несколько электронных библиотек. А в «ЛитРес» еще пару лет назад заявляли о намерении перевести весь свой каталог на новый формат. Часть ридеров уже поддерживает весь необходимый функционал FB3. Например, работать с этим форматом «из коробки» умеют все современные модели ридеров ONYX, например, Darwin 3 или Cleopatra 3.
![](https://habrastorage.org/webt/-k/rs/aq/-krsaqteiptpyfowyc-hc2riax8.png)
/ ONYX BOOX Cleopatra 3
Более широкое распространение FictionBook3 позволит сформировать экосистему, ориентированную на полноценную и эффективную работу с текстом на любом устройстве с ограниченными ресурсами: черно-белым или небольшим дисплеем, низким объемом памяти и др. По словам разработчиков, единожды сверстанная книга будет максимально удобной в любой среде.
P.S. Предлагаем вашему вниманию несколько обзоров ридеров ONYX BOOX: