Описание Fictionbook

Материал из 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>