Digitale Bücher im Format EPUB selbst erstellen: Navigation

Erst durch lesen lernt man, wie viel man ungelesen lassen kann.
Wilhelm Raabe

Kurzanleitung

Inhalt

Das Inhaltsverzeichnis für den Leser oder die Navigation wird im Element navMap der NCX-Datei notiert. navMap ist ein Kindelement von ncx, welches auf die Kopfinformationen folgt.
Im einfachsten Falle wird für jedes Kapitel darin ein Navigationspunkt notiert. Dies ist jeweils ein Element navPoint mit entsprechenden Angaben zum Navigationspunkt.

Auf navMap kann dann optional ein Element pageList mit Informationen zu allen Seiten oder eher Dokumenten im Buch folgen, also ähnlich dem bereits für das OPF-Dokument diskutierten spine, nur hier für den Leser aufbereitet.
Optional folgen darauf weitere Elemente navList. Ähnlich wie mit navMap kann damit eine Navigation umgesetzt werden, aber ähnlich wie bei guide im OPF-Dokument besteht sie nur aus direkten Einstiegspunkten ohne weitere Verschachtelung.

Als wichtiger Hinweis: Die meisten Darstellungsprogramme scheinen nur Inhalte der navMap im Inhaltsverzeichnis zu berücksichtigen. Möchte man also einigermaßen sichergehen, daß auch alles Aufgeführte angezeigt wird, sollten alle Navigationspunkte in der navMap aufgeführt sind. Abweichend von der NCX-Empfehlung sollte man dann also darauf folgende optional mögliche Elemente nicht verwenden, damit dem Leser nicht durch grobe Mängel und Fehler der Darstellungsprogramme Teile des Inhaltsverzeichnisses verborgen bleiben.
Da hier allerdings primär die Empfehlung erläutert wird, werden auch die weiteren Möglichkeiten erklärt.

Die Seitenliste

Auf navMap folgt optional ein Element pageList mit Informationen zu allen Seiten oder eher Dokumenten im Buch, also ähnlich dem bereits für das OPF-Dokument diskutierte spine, nur hier für den Leser aufbereitet.

Als Inhalt hat pageList optional die bereits beschriebenen Elemente navInfo und navLabel in beliebiger Anzahl und es muß wenigstens ein Element pageTarget enthalten.
Für jedes Inhaltsdokument des Buches sollte ein pageTarget notiert werden.

Optional können bei pageList auch id und class mit beschriebener Bedeutung notiert werden.

Die Seiten der Seitenliste

Innerhalb von pageList werden mittels pageTarget Dokumente in der Seitenliste referenziert. Der Inhalt von pageTarget entspricht weitgehend dem eines Navigationspunktes, aber ohne weitere Unterlisten.

Zunächst können navInfo und navLabel notiert werden, mindestens ein navLabel. Dann ist ein content zu notieren.

Erforderliche Attribute von pageTarget sind id und playOrder wie für navPoint bereits beschrieben. Optional ist hier auch wieder class.

type ist ein weiteres erforderliches Attribut. Es kann die Werte 'front', 'normal' oder 'special' haben.
'front' bedeutet, daß eine Seite des Buches vorne vor dem eigentliche Inhalt mit römischer Numerierung angeordnet ist.
'normal' steht für normale Inhaltsseiten mit arabischer Numerierung.
'special' steht für sonstige Inhalte.

Optional ist ein Attribut value. Wert ist eine positive ganze Zahl als Seitenzahl der referenzierten Seite. Sofern das Attribut value verwendet wird, muß die Zuordnung der Seitenzahlen für jeden Wert von type eindeutig sein, dieselbe Zahl darf also nicht für mehrere Seiten des selben Typs notiert werden.

Beispiel: Seitenliste

Dazu ein ausführlicheres Beispiel:

  <pageList>
    <navInfo>
      <text>
        Übersicht über alle Pflanzenseiten.
      </text>       
      <img src="Logo.svg" />
    </navInfo>
    <navLabel>
      <text>Pflanzenblüten</text>
      <img src="Logo.svg" />
    </navLabel> 

    <pageTarget 
            id="titelnav" 
            playOrder="117"
            type="front">
      <navLabel>
        <text>Titel</text>
        <img src="titelnav.svg" />
      </navLabel>
      <content src="titelseite.xhtml"/> 
    </pageTarget>
        
    <!-- ... viele Seiten mit Blütenbildern ... -->   
    
    <pageTarget 
            id="lwz" 
            playOrder="158"
            type="normal">
      <navLabel>
        <text>Löwenzahn</text>
        <img src="Lwz02.jpg" />
      </navLabel>
      <content src="lwz.xhtml"/> 
    </pageTarget>    
    <pageTarget 
            id="gaensebl" 
            playOrder="159"
            type="normal">
      <navLabel>
        <text>Löwenzahn</text>
        <img src="Gaensebl02.jpg" />
      </navLabel>
      <content src="gaensebl.xhtml"/> 
    </pageTarget>    
    <!-- ... viele weitere Seiten mit Blütenbildern ... -->
    
    <pageTarget 
            id="pfindex" 
            playOrder="251"
            type="special">
       <navLabel>
        <text>Pflanzenindex</text>
        <img src="pfindex.svg" />
       </navLabel>
       <content src="pfindex.xhtml"/> 
    </pageTaget>   
  </pageList>