- PVSM.RU - https://www.pvsm.ru -

Электронные книги и их форматы: FB2 и FB3 — история, плюсы, минусы и принципы работы

В прошлом материале мы рассказывали об особенностях формата DjVu [1]. Сегодня мы решили остановиться на формате FictionBook2, более известном как FB2, и его «наследнике» FB3.

Электронные книги и их форматы: FB2 и FB3 — история, плюсы, минусы и принципы работы - 1 [2]
/ Flickr / Judit Klein [3] / CC [4]

Появление формата

В середине 90-х годов энтузиасты начали [5] оцифровывать советские книги. Они переводили и сохраняли литературу в самых разнообразных форматах. Одна из первых библиотек в Рунете — Библиотека Максима Мошкова [6] — использовала форматированный текстовый файл (TXT).

Выбор в его пользу был сделан из-за устойчивости к повреждению байтов и универсальности — TXT открывается на любой операционной системе. Однако он затруднял [7] обработку хранимой текстовой информации. Например, для перехода на тысячную строку приходилось обрабатывать 999 строк, идущих перед ней. Книги также хранили [8] в «вордовских» документах и PDF — последний было сложно преобразовывать в другие форматы, а слабые компьютеры открывали и отображали [9] PDF-документы с задержками.

Также для «хранения» электронной литературы использовали HTML. Он упростил индексацию, преобразование в другие форматы и создание документов (разметку текста тегами), но привнес собственные недостатки. Одним из самых значимых была «расплывчатость [10]» стандарта: он позволял определенные вольности при написании тегов. Некоторые из них должны были быть закрыты, другие (например, <p>) — закрывать было необязательно. Сами теги могли иметь произвольный порядок вложения.

И хотя подобная работа с файлами не поощрялась — такие документы считались некорректными — стандарт требовал от ридеров попробовать отобразить содержимое. Здесь и возникали сложности, так как в каждом приложении процесс «домысливания» был реализован по-своему. При этом на тот момент имеющиеся на рынке устройства и приложения для чтения понимали [11] один-два специализированных формата. Если книга имелась в одном формате, её приходилось переформатировать, чтобы прочесть. Решить все эти недостатки и был призван FictionBook2 [12], или FB2, который взял на себя первичное «причесывание» текста и конвертацию.

Отметим, что у формата была первая версия — FictionBook1 [13] — однако она носила лишь экспериментальный характер, просуществовала недолго, на сегодняшний день не поддерживается и не имеет обратной совместимости. Поэтому под FictionBook чаще всего подразумевают его «последователя» — формат FB2.

FB2 создала группа разработчиков, возглавляемая Дмитрием Грибовым [14], который является техническим директором компании «ЛитРес», и Михаилом Мацневым, создателем читалки Haali Reader. В основу формата лег XML, который строже, чем HTML, регламентирует работу с незакрытыми и вложенными тегами. XML-документ сопровождается так называемой XML-схемой. XML-схема — это специальный файл, в котором собраны все теги и описаны правила их применения (последовательность, вложенность, обязательность и необязательность и др.). В FictionBook схема находится в файле FictionBook2.xsd. Пример XML-схемы вы можете найти по ссылке [15] (она используется магазином электронных книг «ЛитРес»).

Структура документа FB2

Текст в документе хранится [16] в специальных тегах — элементах типов параграфов: <p>, <v> и <subtitle>. Также есть элемент <empty-line>, который не имеет содержимого и используется для вставки пропусков.

Все документы начинаются с корневого тега <fictionbook>, ниже которого могут появляться <stylesheet>, <description>, <body> и <binary>.

Тег <stylesheet> содержит таблицы стилей, чтобы облегчить конвертацию в другие форматы. В <binary> лежат закодированные с помощью base64 [17] данные, которые могут понадобится для рендеринга документа.

Элемент <description> содержит всю необходимую информацию о книге: жанр произведения, список авторов (Ф. И. О., адрес электронной почты и сайт в интернете), название, блок с ключевыми словами, аннотацию. Также в нем может быть информация о вносимых в документ изменениях и данные об издателе книги, если она выпускалась на бумажном носителе.

Вот так выглядит часть блока <description> в записи FictionBook для произведения [18] «Этюд в багровых тонах» Артура Конана Дойла, взятого из Проекта «Гутенберг» [19]:

<?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 [20], разработанной консорциумом W3C [21] специально для создания ссылок между различными ресурсами в XML-документах.

Достоинства формата

Стандарт FB2 включает в себя лишь минимально необходимый набор тегов (достаточный для «оформления» художественной литературы), что упрощает его обработку ридерами. Причем в случае прямой работы ридера с форматом FB, пользователь получает возможность настроить под себя практически все параметры отображения.

Строгая структура документа позволяет автоматизировать процесс преобразования из формата FB в любой другой. Эта же структура дает возможность работать с отдельными элементами документов — настраивать фильтры по авторам книг, названию, жанру и др. По этой причине формат FB2 и приобрел популярность в Рунете, став стандартом по умолчанию в российских электронных библиотеках и библиотеках стран СНГ.

Недостатки формата

Простота формата FB2 является его достоинством и недостатком одновременно. Это ограничивает функционал для сложной верстки текста (например, примечаний на полях). В нем нет векторной графики и поддержки нумерованных списков. По этой причине формат не очень подходит [5] для учебников, справочников и технической литературы (об этом даже говорит само название формата — fiction book, или «художественная книга»).

При этом, чтобы отобразить минимальную информацию о книге — название, автора и обложку — программе требуется обработать практически весь XML-документ. Это связано с тем, что метаданные располагаются в начале текста, а изображения — в конце.

FB3 — развитие формата

В связи с возросшими требованиями к форматированию текстов книг (и чтобы нивелировать некоторые из недостатков FB2), Грибов начал работу над форматом FB3. Позже разработка остановилась, но в 2014 году была возобновлена [11].

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

В новой спецификации формат FictionBook представляет собой zip-архив, в котором отдельными файлами хранятся метаданные, изображения и текст. Требования к формату zip-файла и соглашения о его организации прописаны в стандарте ECMA-376 [22], определяющем Open XML.

Был сделан ряд улучшений, связанных с форматированием (разрядка, подчеркивание) и добавлен новый объект — «блок» — оформляющий произвольный фрагмент книги в виде четырехугольника и способный внедряться в текст с обтеканием. Появилась поддержка нумерованных и маркированных списков.

FB3 распространяется по свободной лицензии и имеет открытый код, поэтому издателям и пользователям доступны все утилиты: конвертеры, облачные редакторы, читалки. Текущую версию [23] формата, читалку [24] и редактор [25] можно найти в репозитории проекта на GitHub.

В целом FictionBook3 пока менее распространён, чем его старший брат, однако книги в этом формате уже предлагают несколько электронных библиотек. А в «ЛитРес» еще пару лет назад заявляли о намерении перевести весь свой каталог на новый формат. Часть ридеров уже поддерживает весь необходимый функционал FB3. Например, работать с этим форматом «из коробки» умеют все современные модели ридеров ONYX, например, Darwin 3 [26] или Cleopatra 3 [27].

Электронные книги и их форматы: FB2 и FB3 — история, плюсы, минусы и принципы работы - 2
/ ONYX BOOX Cleopatra 3 [27]

Более широкое распространение FictionBook3 позволит сформировать экосистему, ориентированную [28] на полноценную и эффективную работу с текстом на любом устройстве с ограниченными ресурсами: черно-белым или небольшим дисплеем, низким объемом памяти и др. По словам разработчиков, единожды сверстанная книга будет максимально удобной в любой среде.


P.S. Предлагаем вашему вниманию несколько обзоров ридеров ONYX BOOX:

Автор: IvanPavlov

Источник [33]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/soft/278946

Ссылки в тексте:

[1] особенностях формата DjVu: https://geektimes.com/company/maccentre/blog/299737/

[2] Image: https://geektimes.com/company/maccentre/blog/300385/

[3] Judit Klein: https://www.flickr.com/photos/juditk/4830334394/

[4] CC: https://creativecommons.org/licenses/by-nd/2.0/

[5] начали: https://ru.wikipedia.org/wiki/FictionBook

[6] Библиотека Максима Мошкова: https://ru.wikipedia.org/wiki/%D0%91%D0%B8%D0%B1%D0%BB%D0%B8%D0%BE%D1%82%D0%B5%D0%BA%D0%B0_%D0%9C%D0%B0%D0%BA%D1%81%D0%B8%D0%BC%D0%B0_%D0%9C%D0%BE%D1%88%D0%BA%D0%BE%D0%B2%D0%B0

[7] затруднял: https://ru.wikipedia.org/wiki/%D0%A2%D0%B5%D0%BA%D1%81%D1%82%D0%BE%D0%B2%D1%8B%D0%B9_%D1%84%D0%B0%D0%B9%D0%BB

[8] хранили: http://www.fictionbook.org/index.php/%D0%9C%D0%B5%D1%81%D1%82%D0%BE_%D1%81%D1%82%D0%B0%D0%BD%D0%B4%D0%B0%D1%80%D1%82%D0%B0_%D0%B2_%D0%BC%D0%B8%D1%80%D0%B5_%D1%8D%D0%BB%D0%B5%D0%BA%D1%82%D1%80%D0%BE%D0%BD%D0%BD%D0%BE%D0%B9_%D0%BB%D0%B8%D1%82%D0%B5%D1%80%D0%B0%D1%82%D1%83%D1%80%D1%8B

[9] отображали: https://ru.wikipedia.org/wiki/Portable_Document_Format

[10] расплывчатость: http://www.fictionbook.org/index.php/%D0%A7%D1%82%D0%BE_%D1%82%D0%B0%D0%BA%D0%BE%D0%B5_FictionBook

[11] понимали: https://vc.ru/7998-litres-history

[12] FictionBook2: http://www.gribuser.ru/xml/fictionbook/

[13] FictionBook1: http://www.gribuser.ru/xml/fictionbook/history/1.0/index.html

[14] Дмитрием Грибовым: https://www.litres.ru/o-kompanii/biografii/dmitriy-gribov/

[15] ссылке: http://fictionbook.org/index.php/XML_%D1%81%D1%85%D0%B5%D0%BC%D0%B0_FictionBook2.2

[16] хранится: http://fictionbook.org/index.php/Eng:FictionBook_description

[17] base64: https://ru.wikipedia.org/wiki/Base64

[18] произведения: http://www.gutenberg.org/ebooks/244

[19] Проекта «Гутенберг»: https://en.wikipedia.org/wiki/Project_Gutenberg

[20] XLink: https://ru.wikipedia.org/wiki/XLink

[21] W3C: https://ru.wikipedia.org/wiki/%D0%9A%D0%BE%D0%BD%D1%81%D0%BE%D1%80%D1%86%D0%B8%D1%83%D0%BC_%D0%92%D1%81%D0%B5%D0%BC%D0%B8%D1%80%D0%BD%D0%BE%D0%B9_%D0%BF%D0%B0%D1%83%D1%82%D0%B8%D0%BD%D1%8B

[22] ECMA-376: http://www.ecma-international.org/publications/standards/Ecma-376.htm

[23] версию: https://github.com/gribuser/FB3

[24] читалку: https://github.com/Litres/FB3Reader

[25] редактор: https://github.com/Litres/FB3Editor

[26] Darwin 3: https://onyx-boox.ru/boox_darwin3

[27] Cleopatra 3: https://onyx-boox.ru/boox_cleopatra3

[28] ориентированную: http://www.fictionbook.org/index.php/FictionBook_3.0_beta_-_%D0%BA%D1%80%D0%B0%D1%82%D0%BA%D0%BE%D0%B5_%D0%BE%D0%BF%D0%B8%D1%81%D0%B0%D0%BD%D0%B8%D0%B5

[29] Обзор ONYX BOOX Darwin 3: больше, чем электронная книга: https://onyx-boox.ru/review/ebook-onyx-boox-darwin3-4pda/

[30] Технологии против «античности»: обзор ридера ONYX BOOX Chronos: https://onyx-boox.ru/review/ebook-onyx-boox-chronos-geektimes/

[31] Царица изволит почитать: обзор электронной книги ONYX BOOX Cleopatra 3: https://onyx-boox.ru/review/ebook-onyx-boox-cleopatra3-geektimes/

[32] Обзор ONYX BOOX Darwin 4: лучшая электронная книга на E-Ink: https://onyx-boox.ru/review/ebook-onyx-boox-darwin4-megaobzor/

[33] Источник: https://geektimes.com/post/300385/?utm_campaign=300385