FB2 и оглавление
Goto page 1, 2  Next
 
Libroom Forum IndexПрограммное обеспечение
AuthorMessage

MaLS
Зрелый участник форума

Зрелый участник форума



Joined: 16 Apr 2009
Posts: 33


Location: Санкт-Петербург

Posted: 21.11.2013 21:16    

Здравствуйте

Поделитесь своим виденьем формата FB2.
FB2 подразумевает создание иерархии в оглавлении?
Или по нему можно построить только линейное оглавление используя элемент title, вложенные в элемент section?

Сначала, я предполагал, что при помощи элементов title и section можно создать иерархическую структуру книги, т.е. если в файле имеется:
Code:
<body>
  <section>
    <title><p>Header 1</p></title>
    <section>
      <title><p>Header 1.1</p></title>
      <p>text</p>
    </section>
    <section>
      <title><p>Header 1.2</p></title>
      <p>text</p>
    </section>
  </section>
  <section>
    <title><p>Header 2</p></title>
    <section>
      <title><p>Header 2.1</p></title>
      <p>text</p>
    </section>
    <section>
      <title><p>Header 2.2</p></title>
      <p>text</p>
    </section>
  </section>
</body>

, то оглавление должно быть таким:
Code:
Header 1
  Header 1.1
  Header 1.2
Header 2
  Header 2.1
  Header 2.2

Но рассмотрев элемент output, у меня возникло предположение , что section предназначен для работы с output, чтобы определять куски текста для отображения. Т.е. можно набить секции так, что никакой иерархии в оглавлении не будет.

Таким образом, если в FB2 подразумевается создание иерархического в оглавления, то как его вычислить?
 
View user's profile ^

Alan
Член клуба The eBook

Член клуба The eBook



Joined: 20 Mar 2006
Posts: 2668



Posted: 21.11.2013 22:27    

Quote:
Сначала, я предполагал, что при помощи элементов title и section можно создать иерархическую структуру книги


да, так и есть.
_________________
AlReader 4 Onyx
 
View user's profile ^

MaLS
Зрелый участник форума

Зрелый участник форума



Joined: 16 Apr 2009
Posts: 33


Location: Санкт-Петербург

Posted: 22.11.2013 10:32    

Alan, что то у меня не получается.

Например, рассмотрим такое:
Code:
<body>
  <section>
    <title><p>Header 1</p></title>
    <section>
      <title><p>Header 1.1</p></title>
      <p>text 1.1</p>
    </section>
    <section id="s2">
      <title><p>Header 1.2</p></title>
      <p>text 1.1</p>
    </section>
  </section>
  <section id="s1">
    <p>text 1</p>
  </section>
</body>

Как выводить текст в секции s1?
Он не имеет собственного заголовка, а значит логически не отделён. Также он идет после заголовка секции s2, а значит логически должен относиться к заголовку "Header 1.2", т.е. получиться так:
Code:
Header 1
Header 1.1
  text 1.1
Header 1.2
  text 1.1
  text 1

У меня пока напрашивается вывод, что элемент section нужны только для определение видимости частей текста и он не играет роли в создании иерархического оглавления.

Пожалуйста, контраргументируйте, если я неправ. Очень хочется получить четкое виденье формата.
 
View user's profile ^

iMaxim
Кандидат в члены клуба The eBook

Кандидат в члены клуба The eBook



Joined: 18 Aug 2010
Posts: 326


Location: Омск

Posted: 22.11.2013 16:37    

MaLS
А не проще ли сделать это в FictionBookEditor. Редактор специально заточенный под fb2 с кучей плюшек. Уровень вложенности глав, например, изменяется с помощью этих стрелок(выделив нужный заголовок):
:


И сразу видно где главы, а где вложенные "подглавы".

Ваш первый пример:
Code:
Header 1
  Header 1.1
  Header 1.2
Header 2
  Header 2.1
  Header 2.2

у меня в FictionBookEditor выглядит так:
Code:

  <section>
   <title>
    <p>Header 1</p>
   </title>
   <p> text 1</p>
   <section>
    <title>
     <p>Header 1.1</p>
    </title>
    <p> text 1.1</p>
   </section>
   <section>
    <title>
     <p>Header 1.2</p>
    </title>
    <p> text 1.2</p>
   </section>
  </section>
  <section>
   <title>
    <p>Header 2</p>
   </title>
   <p> text 2</p>
  </section>

Конструкции с id="s1" вообще ни разу не встречал в книгах.
_________________
Nook ST(root) и Kindle 3(Cool Reader)
 
View user's profile ^

MaLS
Зрелый участник форума

Зрелый участник форума



Joined: 16 Apr 2009
Posts: 33


Location: Санкт-Петербург

Posted: 22.11.2013 18:18    

Здравствуйте, iMaxim

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

Дело в том, что я не писатель книг. Я дотошный программист, который пытается написать эту программку. Моя цель правильно отобразить содержание FB2 файла.

Я просмотрел материалы сайта fictionbook.org, а точнее XML схему FictionBook2.1 и описание Элементов стандарта FictionBook, и пришел к следующим выводам:
FB2 файл является корректным, если
1) он проходит проверку по средствам схемы
2) Все ссылки в нем корректны
3) Все элементы binary содержат корректные изображения.

Так вот, на данный момент я решаю задачу построения оглавления и пришел к заключению, что формат FB2 не подразумевает постарения иерархического оглавления.

Поначалу я тоже думал, что при помощи вложенных элементов section можно определить иерархическую структуру оглавления. Но дело в том, что в элементах section элемент title является необязательным. А без элемента title смысл элемента section в определении иерархической структуры оглавления пропадает. Т.е. элемент section, по моему, вообще не имеет отношения к определении иерархии оглавления. Таким образом иерархия оглавления в FB2 формате не определяется, оглавление может быть только линейным.

Вариант тела файла
Code:
<body>
  <section>
    <title><p>Header 1</p></title>
    <section>
      <title><p>Header 1.1</p></title>
      <p>text 1.1</p>
    </section>
    <section id="s2">
      <title><p>Header 1.2</p></title>
      <p>text 1.1</p>
    </section>
  </section>
  <section id="s1">
    <p>text 1</p>
  </section>
</body>

является корректным, только вот он разрушает логику построения иерархического оглавления по вложенным элементам section.

Как мне видеться, вложенность элементов section нужна для логики отображения и скрытия содержания, которая определяется элементом output.

Так что, iMaxim, ваше утверждение:
Quote:
Уровень вложенности глав, например, изменяется с помощью этих стрелок(выделив нужный заголовок)

мне видеться неверным.

P.S. Четкость представления формата влияет на его распространение и популярность. Так что дотошность здесь к месту. Smile
_________________
Поддержи программу FB2 Add-In.
 
View user's profile ^

pkb
Член клуба The eBook

Член клуба The eBook



Joined: 01 Nov 2006
Posts: 1043



Posted: 22.11.2013 20:46    

MaLS wrote:
У меня пока напрашивается вывод, что элемент section нужны только для определение видимости частей текста и он не играет роли в создании иерархического оглавления.

В приведенном Вами описании сказано, что Секция, основной структурный блок книги. Как такое может быть, что, то, что задает структуру книги не играет роли в создании оглавления?
MaLS wrote:
Как мне видеться, вложенность элементов section нужна для логики отображения и скрытия содержания, которая определяется элементом output.

Элемент output появился в версии 2.1, для чего нужна была вложенность в версии 2.0?
MaLS wrote:
т.е. получиться так:
Code:

Header 1
Header 1.1
  text 1.1
Header 1.2
  text 1.1
  text 1


Помоему именно так и должно выглядеть оглавление в Вашем примере.
Вернее так (текст жеж в оглавлении не кажется):
Code:

Header 1
  Header 1.1
  Header 1.2
 
View user's profile ^

Alan
Член клуба The eBook

Член клуба The eBook



Joined: 20 Mar 2006
Posts: 2668



Posted: 23.11.2013 00:12    

Quote:
Так вот, на данный момент я решаю задачу построения оглавления и пришел к заключению, что формат FB2 не подразумевает постарения иерархического оглавления.

Quote:
Таким образом иерархия оглавления в FB2 формате не определяется, оглавление может быть только линейным.


вы меня извините, но вы уверены, что данная задача вам по силам? А то как-то странно получается - десятки программ строят иерархическое оглавление фб2, а у вас это мало того, что вызывает какие-то непонятные и надуманные затруднения, так вы еще и не можете поставить любую программу-читалку и просто посмотреть как и что выводится в зависимости от содержимого фб2. Экспериментов то на 5 минут...
_________________
AlReader 4 Onyx
 
View user's profile ^

iMaxim
Кандидат в члены клуба The eBook

Кандидат в члены клуба The eBook



Joined: 18 Aug 2010
Posts: 326


Location: Омск

Posted: 24.11.2013 18:08    

MaLS wrote:
Только вот дерево элементов отображаемое FictionBookEditor показывает элементы файла, а не возможную иерархию оглавление.

MaLS wrote:
Т.е. элемент section, по моему, вообще не имеет отношения к определении иерархии оглавления. Таким образом иерархия оглавления в FB2 формате не определяется, оглавление может быть только линейным.

Странные вы вещи говорите. Как может не быть иерархического оглавления, если я им регулярно пользуюсь? Иерархическая структура, создаваемая в FictionBookEditor тем способом, который я указал выше, прекрасно отображается в Cool reader и Alreader, например? Исходный код Cool reader открыт посмотрите как там это реализовано.
_________________
Nook ST(root) и Kindle 3(Cool Reader)
 
View user's profile ^

MaLS
Зрелый участник форума

Зрелый участник форума



Joined: 16 Apr 2009
Posts: 33


Location: Санкт-Петербург

Posted: 25.11.2013 18:11    

Здравствуйте

pkb wrote:
Как такое может быть, что, то, что задает структуру книги не играет роли в создании оглавления?

Вы можете мне показать где это декларировано?

Alan wrote:
Экспериментов то на 5 минут...

Хорошо. Попробуем.
Возьмём FB2 файл:

Code:
<?xml version="1.0" encoding="utf-8"?>
<FictionBook xmlns="http://www.gribuser.ru/xml/fictionbook/2.0" xmlns:l="http://www.w3.org/1999/xlink">
 <description>
  <title-info>
   <genre>sf_cyberpunk</genre>
   <author><nickname>MaLS</nickname></author>
   <book-title>Тест</book-title>
   <date></date>
   <lang>ru</lang>
  </title-info>
  <document-info>
   <author><nickname>MaLS</nickname></author>
   <program-used>VS, FictionBook Editor Release 2.6.6</program-used>
   <date value="2013-11-25">25 November 2013</date>
   <id>75610AE0-7DD8-42E2-B283-FCB0C161D4EB</id>
   <version>1.0</version>
  </document-info>
 </description>
 <body>
  <section id="s1">
   <section id="s2">
    <title><p>Заголовок А</p></title>
    <p>Текст</p>
   </section>
   <section id="s3">
    <title><p>Заголовок B</p></title>
    <p>Текст</p>
   </section>
  </section>
  <section>
   <title><p>Заголовок B</p></title>
   <p>Текст</p>
  </section>
 </body>
</FictionBook>

С точки зрения формата FB2 он является корректным, т.е. удовлетворяет схеме и в нем нет битых ссылок.

Вот он в FictionBook Editor:

Вот оглавление в CoolReader:

Вот оглавление в AlReader:


Данное отображения оглавлений является очень странным. А дело в том, что они отображают структуру файла, а не логическое построение содержимого. Ведь мы ожидаем, что "Заголовок А" будет верхнем и корневым.
Что же касается заголовка "Заголовок B", неоднозначность проявляется в том, что неизвестно по какому критерию оценить его состояние. Является заголовком верхнего первого уровня потому, что он находится на одном уровне с "Заголовок А" или является заголовком второго уровня, так как находится во вложенной секции?

Пока, я не нашёл какой-либо спецификации по этому поводу, поэтому исхожу из наиболее обобщённой ситуации: оглавление будет линейным.
_________________
Поддержи программу FB2 Add-In.
 
View user's profile ^

biv_sumy
Член клуба The eBook

Член клуба The eBook



Joined: 20 Jul 2009
Posts: 18808


Location: Сумы, Украина

Posted: 25.11.2013 18:21    

MaLS wrote:
Возьмём FB2 файл:

А вы не думали над тем что для нормального построения Оглавления каждая секция section должна иметь в начале title + Р и тогда у вас не будет проблем?
Добавте в первую секцию id="s1" перед id="s2" заголовок и посмотрите что получиться.
_________________
PB 602Grey, PB A7, NSTGL
+PB Power Bank.
 
View user's profile ^

pkb
Член клуба The eBook

Член клуба The eBook



Joined: 01 Nov 2006
Posts: 1043



Posted: 25.11.2013 19:14    

MaLS wrote:
Вы можете мне показать где это декларировано?

Что конкретно декларировано? Вам нужен какой-то официальный документ или чего Вы хотите? Вот описание формата где сказано:
Quote:

Разделы <section> должны иметь вложенную структуру согласно иерархии оглавления. Например, если документ делится на части, которые в свою очередь делятся на главы, то части будут будут описаны в разделе <section> первого уровня, а главы - в подразделе второго уровня.

MaLS wrote:
Данное отображения оглавлений является очень странным. А дело в том, что они отображают структуру файла, а не логическое построение содержимого. Ведь мы ожидаем, что "Заголовок А" будет верхнем и корневым.

Какой документ такое и отображение Smile Если мы ожидаем его на верхнем уровне, то зачем мы его вложили в секцию? Логическое построение содержимого оно где живет в структуре файла или же в Вашей голове?
Типичный use case для безымянной секции приведен здесь:
Code:

 Глава 1

Текст текст текст текст. Текст текст текст текст.
Текст текст текст текст. Текст текст текст текст.

          Подглава 1

Текст текст текст текст. Текст текст текст текст.
Текст текст текст текст. Текст текст текст текст.

Ваш пример для чего-то нужен, кроме как показать, что документ может быть валидным с точки зрения схемы и иметь странную структуру?
 
View user's profile ^

Alan
Член клуба The eBook

Член клуба The eBook



Joined: 20 Mar 2006
Posts: 2668



Posted: 25.11.2013 20:27    

Quote:
Ведь мы ожидаем, что "Заголовок А" будет верхнем и корневым.


не стоит обобщать. Мы такого не ожидаемSmile
я вообще не представляю логики с помощью которой корневой якобы заголовок поместили во вложенную секцию. Впрочем - об этом уже вполне доходчиво и понятно написано вышеSmile
_________________
AlReader 4 Onyx
 
View user's profile ^

MaLS
Зрелый участник форума

Зрелый участник форума



Joined: 16 Apr 2009
Posts: 33


Location: Санкт-Петербург

Posted: 25.11.2013 22:33    

Здравствуйте

biv_sumy, я вообще не имею практики создания электронных книг и опыта их распространения. Просто у меня есть знание в определённой части IT технологий, и я решил попробовать их применить. Сейчас я ещё не получил достаточного понимания формата FB2, так как в интернете очень мало информации по нему, а обсуждений практически нет. Если знаете полезные ресурсы, поделитесь пожалуйста.

Сейчас к пониманию формата, я иду через спецификацию формата FB2 и по поводу
biv_sumy wrote:
А вы не думали над тем что для нормального построения Оглавления каждая секция section должна иметь в начале title + Р и тогда у вас не будет проблем?

в схеме FB2 четко указано, что элемент title является опциональным:

Quote:
<title> 0..1 (опционально);



Quote:
<xs:element name="title" type="titleType" minOccurs="0">


а, это значит, что отсутствие элемента title является нормальным состоянием. Но как при этом состоянии определять иерархию оглавления? Ни как, она просто не подразумевается.

pkb

pkb wrote:

Вот описание формата где сказано:
Quote:

Разделы <section> должны иметь вложенную структуру согласно иерархии оглавления. Например, если документ делится на части, которые в свою очередь делятся на главы, то части будут будут описаны в разделе <section> первого уровня, а главы - в подразделе второго уровня.


Спасибо, за хороший аргумент. Признаюсь, пропустил. Но сложно воспринять его как руководство к действию. Всё таки это:
Quote:
пример простого кулинарного рецепта

, т.е. некоторой практики, в которую включили ограничение. Из-за малого обсуждения данного материала в интернете, сложно воспринимать его как авторитетное. Всё таки аргумент о линейном оглавлении выглядит надёжней.

pkb wrote:
Какой документ такое и отображение

Обычно это мнение пользователь, а не разработчиков.

pkb wrote:
Типичный use case для безымянной секции приведен здесь:


Ещё раз спасибо за ссылку. Но, к сожаление, это не относиться напрямую к оглавлению. Надо подумать. Всё таки отсутствие явных моментов связанных с оглавлением усложняет общую картину.

pkb wrote:
Ваш пример для чего-то нужен, кроме как показать, что документ может быть валидным с точки зрения схемы и иметь странную структуру?

Я его создал для теста в сценарии отображение-скрытие содержания. Элемент output я убрал для краткости.
_________________
Поддержи программу FB2 Add-In.
 
View user's profile ^

pkb
Член клуба The eBook

Член клуба The eBook



Joined: 01 Nov 2006
Posts: 1043



Posted: 26.11.2013 06:03    

MaLS wrote:
Но сложно воспринять его как руководство

Хе-хе, Ну раз сложно, тогда Вам к GribUser попросите его прокомментировать.
MaLS wrote:
Всё таки аргумент о линейном оглавлении выглядит надёжней.

Я пока аргументов о линейном оглавлении не увидел.
MaLS wrote:
Но, к сожаление, это не относиться напрямую к оглавлению.

Относится, ибо объясняет зачем нужна section с опциональным title.
Вы же, как-то странно зафиксировались на элементе output, который кроме Вас, наверное и не использует никто Smile
 
View user's profile ^

booBot
Зрелый участник форума

Зрелый участник форума



Joined: 16 Dec 2013
Posts: 38


Location: Saint-Petersburg, Russia

Posted: 22.10.2014 17:57    

iMaxim wrote:
MaLS
А не проще ли сделать это в FictionBookEditor. Редактор специально заточенный под fb2 с кучей плюшек. Уровень вложенности глав, например, изменяется с помощью этих стрелок(выделив нужный заголовок):
:



Пожалуйста, помогите разобраться, как используются эти стрелки.

Есть fb2-файл, в котором просто текст.
Некоторые строки - явно были (в бумажном оригинале) заголовками. Как назначить их заголовками?
(у меня получается назначить только одну из - любую, но единственную! - таких строк. Отмечаю её (выделяю курсором) и нажимаю "Вставка->Заголовок Ctrl-T". Если отмеченная строка была в середине файла - даже и тогда она выпрыгивает вверх всей книги. Повторить фокус с другой строкой не получается - пункт меню "Вставка->Заголовок Ctrl-T" недоступен.)
_________________
PocketBook 360Plus New
H/W: nx512, F/W: E512.15.7.20120423_100238
 
View user's profile ^

Дмитрий Шкарин
Член клуба The eBook

Член клуба The eBook



Joined: 31 Jul 2009
Posts: 1926



Posted: 23.10.2014 14:36    

booBot
Книга состоит из секций, вне секций текста быть не может, секция может иметь заголовок, секции могут быть вложенными. Попробуйте ввести название книги вверху, до текста, и сделать его заголовком.
 
View user's profile ^

booBot
Зрелый участник форума

Зрелый участник форума



Joined: 16 Dec 2013
Posts: 38


Location: Saint-Petersburg, Russia

Posted: 23.10.2014 14:43    

Хорошо, это я могу.
Но как разбивать на секции остальной текст?
_________________
PocketBook 360Plus New
H/W: nx512, F/W: E512.15.7.20120423_100238
 
View user's profile ^

Дмитрий Шкарин
Член клуба The eBook

Член клуба The eBook



Joined: 31 Jul 2009
Posts: 1926



Posted: 23.10.2014 15:11    

booBot
Выделяете будущий подзаголовок, нажимаете Ctrl-Enter, получаете подзаголовок. На панели оглавления выделяете подзаголовок, нажимаете правую кнопку мыши, меняете уровень вложенности подзаголовка.
 
View user's profile ^

Roman
Developer

Developer



Joined: 19 May 2007
Posts: 4412


Location: Деревня Израиловка

Posted: 27.10.2014 18:08    

По теме.
Элементом структуры книги является section , элемент title может задавать название (точнее заголовок, текст) для элемента вложенности, а может не задавать, оно не обязательно. Что отображать в данном случае, конкретно в TOC, это уже вопрос имплементации (ибо такого понятия как TOC в FB2 нет, его можно построить, но тогда конкретная реализация "на совести" того кто строит), хоть троеточие ставьте если тайтла нет, хоть пару слов с первого параграфа секции, но логически каждая секция это элемент структуры.

Соответственно секции ВЛОЖЕННЫЕ в другие секции, задают иерархическую вложенность и да:
Code:

<body>
  <section>
    <title><p>Header 1</p></title>
    <section>
      <title><p>Header 1.1</p></title>
      <p>text</p>
    </section>
    <section>
      <title><p>Header 1.2</p></title>
      <p>text</p>
    </section>
  </section>
  <section>
    <title><p>Header 2</p></title>
    <section>
      <title><p>Header 2.1</p></title>
      <p>text</p>
    </section>
    <section>
      <title><p>Header 2.2</p></title>
      <p>text</p>
    </section>
  </section>
</body>



Это именно:
Quote:

Header 1
Header 1.1
Header 1.2
Header 2
Header 2.1
Header 2.2



И рассматривать output незачем, так как в каждом конкретном случае это вопрос имплементации и отображения, а FB2 задает данные и структуру/метадату.
Как отображать это уже как программисту в голову стукнет Wink
 
View user's profile ^

LonerD
Член клуба The eBook

Член клуба The eBook



Joined: 08 Oct 2012
Posts: 1175


Location: Новороссия

Posted: 21.07.2015 03:07    

А каким образом можно отредактировать оглавление в fb2-файлах, оставив оригинальный текст в сохранности?
В книге имеются сноски в заголовках. И они попадают в оглавление, преобразовываясь в обычный текст. Это совершенно излишне и выглядит некрасиво.Confused
:


_________________
Amazon Kindle Paperwhite (2012) + Kindle Fire HD 8.9" + Samsung Galaxy S i9000
 
View user's profile ^
Libroom Forum IndexПрограммное обеспечениеAll times are GMT + 4 Hours
Goto page 1, 2  Next
Page 1 of 2

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum

© Libroom, 2021