Разделение на фрагменты в DocBook 5 ограничивает глубину оглавления и заставляет пропускать числа?

У меня есть документ DocBook V5.0, который раньше был одним .docbook файлом, содержащим всю книгу. В этот момент сгенерированный TOC выглядел нормально. Теперь я разбил входные данные на 4 разных файла .docbook, а также хочу разбить выходные данные.

После этого изменения у меня внезапно возникли две проблемы:

  1. TOC содержит только четыре записи (по одной для каждого .docbook), а не полную глубину, которая использовалась для
  2. Довольно странно, что номера глав в оглавлении — 1, 2 и 4, затем идет глоссарий, у которого нет номера.

Что касается последнего, то, если я удалю вторую главу, я получу 1, 2 и глоссарий, так что я думаю, что содержание второй главы не является причиной неправильной нумерации.

В любом случае, мой вопрос: как мне восстановить обычно выглядящую оглавление, сохранив при этом разбивку ввода и вывода? (Разбиение на фрагменты может быть даже ограничено глубиной одного файла, т. е. один файл на входе, один файл на выходе, но я хочу, чтобы глубина оглавления была намного выше.)

Что я сделал

Я сделал свой основной файл таким:

<!DOCTYPE book [
    <!ENTITY a SYSTEM "a.docbook">
    <!ENTITY b SYSTEM "b.docbook">
    <!ENTITY c SYSTEM "c.docbook">
    <!ENTITY glossary SYSTEM "glossary.docbook">
    <!ENTITY larr "&#x2190;">
    <!ENTITY rarr "&#x2192;">
    <!ENTITY mdash "&#x2014;">
]>
<book xmlns:xl="http://www.w3.org/1999/xlink">
<title>My Title</title>
&a;
&b;
&c;
&glossary;
</book>

Мой XSL похож на предыдущий с добавлением нескольких параметров управления фрагментированием (но без изменений в исходном параметре TOC):

<?xml version='1.0'?>
<xsl:stylesheet  
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">

<xsl:import href="/usr/share/sgml/docbook/xsl-stylesheets/html/chunk.xsl"/>

<xsl:output method="html"
            encoding="UTF-8"
            indent="no"/>
<!--new--><xsl:param name="chunk.quietly" select="1"></xsl:param>
<!--new--><xsl:param name="chunker.output.encoding">UTF-8</xsl:param>
<!--new--><xsl:param name="html.extra.head.links" select="0"></xsl:param>
<xsl:param name="html.stylesheet" select="'main.css'"/>
<xsl:param name="generate.toc">
  book      toc,title
</xsl:param>
<xsl:param name="glossentry.show.acronym">yes</xsl:param>
<xsl:param name="glossary.sort" select="1"></xsl:param>
<!--new--><xsl:param name="use.id.as.filename" select="1"></xsl:param>

</xsl:stylesheet>

Все мои файлы .docbook выглядят так:

A ...

За исключением glossary.doc, который:

Глоссарий

Теперь я понимаю, что может быть немного странно иметь главу внутри главы. Это может быть даже причиной. Однако он проверяется без предупреждения, а также, если вместо этого я сделаю самый внешний тег в данном файле <section>, то весь файл отсутствует в оглавлении.


person Kev    schedule 01.06.2015    source источник


Ответы (2)


СОВЕТ. Замените старый <!ENTITY ...> на xinclude. Это имеет то преимущество, что все может быть хорошо проверено схемой xml. Также редакторам XML лучше обойтись xinclude, чем подключением файла через ENTITY.

Ниже приведен пример:

Файл: book.xml

<?xml version="1.0" encoding="UTF-8"?>

<book version="5.0" xmlns="http://docbook.org/ns/docbook"
      xmlns:xlink="http://www.w3.org/1999/xlink"
      xmlns:xi="http://www.w3.org/2001/XInclude"
      xmlns:db="http://docbook.org/ns/docbook">
  <info>
    <title>This is a book</title>
  </info>

  <chapter>
    <title>This is a chapter</title>

    <section>
      <title>This is a section</title>

      <para>This is a paragraph.</para>
    </section>

    <xi:include href="included_section.xml" />
  </chapter>
</book>

Файл: include_section.xml

<?xml version="1.0" encoding="UTF-8"?>

<section version="5.0" xmlns="http://docbook.org/ns/docbook"
         xmlns:xlink="http://www.w3.org/1999/xlink"
         xmlns:xi="http://www.w3.org/2001/XInclude"
         xmlns:ns5="http://www.w3.org/2000/svg"
         xmlns:ns4="http://www.w3.org/1998/Math/MathML"
         xmlns:ns3="http://www.w3.org/1999/xhtml"
         xmlns:db="http://docbook.org/ns/docbook">
  <title>This is an included section</title>
  <para>This is an included paragraph.</para>

  <mediaobject>
    <imageobject>
      <imagedata fileref="media/martin-luther-king.jpg"></imagedata>
    </imageobject>
  </mediaobject>
</section>

В этом примере также есть каталог media, содержащий файл martin-luther-king.jpg.

Ваш пример выше будет выглядеть так:

<book version="5.0" xmlns="http://docbook.org/ns/docbook"
      xmlns:xlink="http://www.w3.org/1999/xlink"
      xmlns:xi="http://www.w3.org/2001/XInclude"
      xmlns:db="http://docbook.org/ns/docbook">
    <title>My Title</title>
    <xi:include href="chapter-a.xml" />
    <xi:include href="chapter-b.xml" />
    <xi:include href="chapter-c.xml" />
    <xi:include href="glossary.xml" />
</book>

И каждый отдельный файл глава может выглядеть так:

<chapter version="5.0" xmlns="http://docbook.org/ns/docbook"
      xmlns:xlink="http://www.w3.org/1999/xlink"
      xmlns:xi="http://www.w3.org/2001/XInclude"
      xmlns:db="http://docbook.org/ns/docbook">
    <title>This is a chapter</title>

    <section>
      <title>This is a section</title>

      <para>This is a paragraph.</para>
    </section>
</chapter>

А файл глоссария может выглядеть так:

<?xml version="1.0" encoding="UTF-8"?>
<glossary version="5.0" xmlns="http://docbook.org/ns/docbook" 
        xmlns:xi="http://www.w3.org/2001/XInclude" 
        xmlns:xlink="http://www.w3.org/1999/xlink">
    <title>Example Glossary</title>

    <para>
        This is not a real glossary, it's just an example.
    </para>
</glossary>
person Verhagen    schedule 02.06.2015
comment
Спасибо за совет, но разве одной из приятных особенностей использования DocBook V5.0 не является то, что вы можете назвать свой файл .docbook и не использовать пространства имен <?xml... и docbook? В любом случае, ваш синтаксис работал, но результат был тот же (оглавление нумеруется 1, 2 и 4, затем глоссарий; и оглавление также не выходит за пределы этой глубины). ценю вашу тщательность. - person Kev; 03.06.2015
comment
Хорошо, спасибо за объяснение, я не знал, есть ли расширение DocBook. Что касается проблемы, почти похоже, что есть проблема с контентом или улучшенным XSL. Можете ли вы поделиться небольшим примером этих файлов контента? Может быть, GitHub Gist help.github.com/articles/about-gists - person Verhagen; 03.06.2015
comment
Спасибо, просмотр файлов содержимого был ключом к решению проблемы. Ответил ниже. - person Kev; 03.06.2015

Не размещайте главы во включенных .docbook файлах. Используйте chapter для самого внешнего тега и section для всего внутри.

(Несмотря на проверку, я обнаружил, что самый короткий файл, который я пытался реструктурировать, изменив его внешний тег на chapter, а затем его внутренний тег chapter на section, на самом деле имел отсутствующую пару тегов chapter, поэтому в нем была глава с двумя titles. и т. д. Прежде чем заметить это, это приводило к тому, что он не отображался в оглавлении, поэтому я предположил, что доказал, что section-внутри-chapter по какой-то причине не работает, хотя на самом деле это были отсутствующие теги из моей работы по вырезанию и вставке. Не полагайтесь на валидатор!)

person Community    schedule 03.06.2015