Описание Fictionbook
Оргинальный текст: Mike Matsnev
Перевёл на русский язык Майк Эшва
FictionBook основан на XML стандарте от W3C. FictionBook документы являются well-formed XML документами, соответствующими схеме FictionBook. Со времени адаптирования перекрёстных ссылок в FictionBook версии 2.0, пространство имён XML является обязательным для всех FictionBook документов. Главое пространство имён FictionBook - ?http://www.gribuser.ru/xml/fictionbook/2.0?, номер версии в URL пространства имён будет меняться вместе с появлением новых версий стандарта. Ещё одно необходимое пространство имён - ?http://www.w3.org/1999/xlink? для XLink элементов. Оно должно быть включено, если в документе используются перекрёстные ссылки.
Общая структура документа проста и похожа на структуру HTML. Однако главная цель этой работы состоит в том, чтобы спроектировать основанный на XML документ, который фокусируется на логической структуре документа, а не на особенностях визуального представления информации. Важная особенность структурной разметки состоит в том, что она явным образом определяет структуру и семантику материала документа. Она не определяет способы отображения документа при просмотре, печати или как-либо иначе. В данную спецификацию мы сознательно не включили какие-либо прямые способы указания свойств отображения. Единственный способ повлиять на процесс формирования изображения, ? с помощью стилей параграфов и символьных строк. Вместо этого представлены некоторые специальные элементы для различных логических частей книги, таких как: стихи, цитаты и эпиграфы.
Полная схема FictionBook содержится в файлах FictionBook2.xsd, FictionBookGenres.xsd, FictionBookLang.xsd и FictionBookLinks.xsd, так что далее я дам только высокоуровневое описание элементов. Весь текст в документе хранится в следующих элементах типов параграфов: p, v и subtitle. Элемент empty-line, не имеющий содержимого, используется для вставки одной линии вертикального пропуска. Несколько других контейнерных элементов определяются на основе этих базовых элементов: title (содержит любое количество p и empty-line элементов), annotation, poem, cite, epigraph.
Все документы начинаются с корневого элемента FictionBook, под которым могут появляться элементы stylesheet, description, body и binary. Stylesheet элементы сразу после корня содержат таблицы стилей, их атрибут type содержит MIME тип таблицы стилей. Если в документе используются стили, рекомендуется включать одну text/css таблицу стилей для упрощения конвертации в другие форматы. Элементы binary также очень просты и содержат закодированные base64 данные, которые могут потребоваться для отображения документа. Они всегда должны содержать id и content-type атрибуты. Элемент description содержит всю информацию о книге, которая разбивается на четыре главных категории: title-info, document-info, publish-info и custom-info.
Элемент title-info содержит данные о самой книге. Элемент genre определяет жанр книги. Атрибут match используется тогда, когда жанр не может быть точно определён с помощью единственного ключевого слова, например, некоторые книги могут быть одновременно детективами и научной фантастикой. Список авторов хранится в элементе author, который имеет традиционные поля first-name, middle-name, last-name, и добавляет необязательные подэлементы home-page и email. Элемент book-title ? это название книги. Элемент annotation содержит описание книги в свободной форме. Поле keywords перечисляет любые подходящие ключевые слова, которые могут быть использованы поисковыми машинами. Элемент date определяет дату написания книги в любом формате, необязательный атрибут value должен содержать дату в понятном компьютеру формате, если он был использован. Элементы src-lang и lang указывают соответственно язык, на котором книга написана, и язык данного документа, если он является переводом оригинала. Элементы translator имеют точно такую же структуру, как и элементы author, описанные ранее, и используются для перечисления переводчиков книги, в случае если книга является переводной. Информация, непосредственно о данном документе, собрана в элементе document-info, который содержит подэлементы author, program-used, date, src-url, src-ocr, version и history. Элементы author и date имеют тот же тип, что одноимённые элементы из группы title-info. Элемент history имеет тот же тип, что и annotation, и предназначен для перечисления важных изменений, внесённых в документ. Элемент version имеет свободный формат и должен увеличиваться, когда документ меняется.
Блок publish-info используется в случаях, когда документ создан на основе печатного материала и имеет несколько библиографических полей, так как: book-name, publisher, city, year и isbn. Записи в блоке custom-info должны использоваться для хранения информации, которая не соответствует другим ранее описанным полям. Эти записи должны обязательно содержать атрибут info-type. Следующая важная часть FictionBook документа ? это body, которая содержит сам текст книги. Первый элемент body всегда ? главный поддокумент данной книги. Последующие элементы body могут быть использованы для хранения сносок, комментариев и другой информации, которая не укладывается в нормальный поток текста. Каждый элемент body может содержать не обязательные элементы title, epigraph и как минимум один section элемент. Есть две разновидности секций. Одна из них содержит только другие подсекции, другая содержит сами параграфы текста. В текущей версии стандарта FictionBook не допускается смешивание подсекций и параграфов внутри одного и того же контейнера. Каждая секция может иметь несколько не обязательных полей заголовка: title, epigraph, image и annotation. После них должен быть как минимум один параграфный элемент для текстовых секций или как минимум одна подсекция для второго типа секций.
FictionBook предоставляет несколько элементов для поддержки перекрёстных ссылок, важное свойство для электронных документов в наше время. Перекрёстные ссылки в FictionBook основаны на спецификации XLink от консорциума W3 и является подмножеством XLink. В настоящее время в FictionBook поддерживаются только простые связи из XLink. Первый элемент может быть включен в любой параграфный элемент. Он включает два обязательных атрибута: xlink:type с простым фиксированным значением и xlink:href, который определяет место назначения связи на языке XPath/XPointer. Для мест назначения связей в том же документе может быть использована простая форма XPointer-выражения: "#<id>". Необязательный атрибут type может быть использован для дальнейшего определения типа связи. В настоящее время определено лишь одно возможное значение для данного атрибута: "note", используемое для сносок. Второй элемент перекрёстных ссылок ? это image, который также имеет тот же обязательный XLink атрибут, и используется для вставки встроенных в текст изображений. Место назначения ссылки выделяется с помощью атрибута id, который может появляться во всех параграфных элементах, у большей части высокоуровневых контейнеров и на элементах двоичных данных.
Для демонстрации изложенного приведу пример FictionBook, содержащий первые несколько параграфов из ?A study in scarlet?, взятых из Проекта Гутенберга:
<?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> <document-info> <author> <first-name/> <last-name/> <nickname>Haali</nickname> </author> <program-used>vim, perl</program-used> <date value="2002-06-01">2002-06-01</date> <src-ocr> Project Gutenberg, file: study10.txt This etext is prepared directly from an 1887 edition, and care has been taken to duplicate the original exactly, including typographical and punctuation vagaries. Additions to the text include adding the underscore character (_) to indicate italics, and textual end-notes in curly braces ({}). Thanks to Randolph Cox for providing the book for etexting. Etext prepared by Roger Squires rsquires@unm.edu </src-ocr> <version>1.0</version> <history> <p>2002-06-01 Initial version</p> </history> </document-info> </description> <body> <section> <p>Frontispiece, with the caption: "He examined with his glass the word upon the wall, going over every letter of it with the most minute exactness." (<emphasis>Page</emphasis> 23.)</p> </section> <section> <title><p>PART I.</p></title> <section> <p>(<emphasis>Being a reprint from the reminiscences of</emphasis> JOHN H. WATSON, M.D.,<emphasis> late of the Army Medical Department.</emphasis>) <a xlink:href="#N2" type="note">2</a></p> </section> <section> <title><p>CHAPTER I. MR. SHERLOCK HOLMES.</p></title> <p>IN the year 1878 I took my degree of Doctor of Medicine of the University of London, and proceeded to Netley to go through the course prescribed for surgeons in the army. Having completed my studies there, I was duly attached to the Fifth Northumberland Fusiliers as Assistant Surgeon. The regiment was stationed in India at the time, and before I could join it, the second Afghan war had broken out. On landing at Bombay, I learned that my corps had advanced through the passes, and was already deep in the enemy's country. I followed, however, with many other officers who were in the same situation as myself, and succeeded in reaching Candahar in safety, where I found my regiment, and at once entered upon my new duties.</p> <p>The campaign brought honours and promotion to many, but for me it had nothing but misfortune and disaster. I was removed from my brigade and attached to the Berkshires, with whom I served at the fatal battle of Maiwand. There I was struck on the shoulder by a Jezail bullet, which shattered the bone and grazed the subclavian artery. I should have fallen into the hands of the murderous Ghazis had it not been for the devotion and courage shown by Murray, my orderly, who threw me across a pack-horse, and succeeded in bringing me safely to the British lines.</p> </section> </section> </body> <body name="footnotes"> <section> <subtitle id="N2">2</subtitle> <p>"JOHN H. WATSON, M.D.": the initial letters in the name are capitalized, the other letters in small caps. All chapter titles are in small caps. The initial words of chapters are in small caps with first letter capitalized.</p> </section> </body> </FictionBook>