Navigation in seitenorientierten Gliederungen
(Auszug aus "E-Books mit ePUB ─ Von Word zum E-Book mit XML" von Dr. Victor Wang)
Das Konzept der NCX-Datei deckt jedoch nicht nur die Navigation in hierarchisch tief strukturierten Inhalten ab, sondern stellt zusätzlich auch eine Navigation für die "klassische" Seitenstruktur zur Verfügung. Dies ist in verschiedenen Szenarien denkbar. In vielen Fällen gibt es ja zunächst nur Daten, die aus dem Produktionsprozess des Drucks abgeleitet werden. Beispiele hierfür könnten Druckdaten (meist im PDF-Format) oder auch einfach eingescannte Buchseiten sein. Aber auch bei vorliegender XML-Struktur können Seiteninformationen parallel zur inhaltlichen Hierarchie erfasst und folglich ausgewertet werden.
Für solche Fälle gibt es <pageList>, ein Element, das die Seitenstruktur und ihre Abfolge widerspiegelt. Leider ist – und das muss an dieser Stelle deutlich gesagt werden – bisher noch kein Lesegerät bekannt, das diese Struktur verarbeitet. Da es sich aber nach Ansicht des Autors um ein richtungweisendes Konzept handelt, wird es hier vorgestellt. Erwähnt sein soll hier jedoch, dass Adobe im Digital Editions mit der so genannten page-map ein ähnliches, allerdings proprietäres Konzept verfolgt.
Zur Veranschaulichung dient der Kinderbuch-Klassiker "Max und Moritz" von Wilhelm Busch. Die Knittelreime und Strichzeichnungen eignen sich bestens für die Anzeige in einem E-Book-Reader. Außerdem ist der Text digital verfügbar, urheberrechtsfrei und wir gehen weiter davon aus, dass die bei Wikisource genannten Seitenangaben (der Wilhelm-Busch-Gesamtausgabe von 1960) in XML vorliegen:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
<title>Max und Moritz</title>
</head>
<body>
<h1>Max und Moritz</h1> ①
<p class="untertitel">Eine Bubengeschichte in sieben Streichen</p>
<p class="jahr">(1865)</p>
<p class="autor">von Wilhelm Busch</p>
<h2>Vorwort</h2> ②
<div class="seite-normal" id="seite0343"/> ③
<p>Ach, was muss man oft von bösen</p>
<p>Kindern hören oder lesen!!</p>
<p>Wie zum Beispiel hier von diesen,</p>
<p>Welche Max und Moritz hießen;</p>
<div class="block-grafik">
<img src="img/Max_und_Moritz_001.png" alt="Max und Moritz"/>
</div>
. . .
<h2>Erster Streich</h2> ④
<div class="seite-normal" id="seite0344"/> ⑤
<p>Mancher gibt sich viele Müh'</p>
. . .
<p>Und ein stolzer Hahn dabei. -</p>
<div class="seite-normal" id="seite0345"/> ⑤
<p>Max und Moritz dachten nun:</p>
. . .
<p>Tak tak tak! – da kommen sie.</p>
<div class="block-grafik">
<img src="img/Max_und_Moritz_006.png" alt="Hühner kommen"/>
</div>
<div class="seite-normal" id="seite0346"/> ⑤
<p>Hahn und Hühner schlucken munter</p>
. . .
<p>Reißen sie sich hin und her,</p>
<div class="block-grafik">
<img src="img/Max_und_Moritz_009.png" alt="Hühner flattern auf"/>
</div>
<div class="seite-normal" id="seite0347"/> ⑤
<p>Flattern auf und in die Höh',</p>
. . .
<p>Und dann kommt der Tod herbei. -</p>
<div class="seite-normal" id="seite0348"/> ⑤
<div class="block-grafik">
<img src="img/Max_und_Moritz_012.png" alt="Witwe Bolte hört"/>
</div>
<p>Witwe Bolte in der Kammer,</p>
. . .
<p>Hängt an diesem Apfelbaum!!"</p>
<div class="seite-normal" id="seite0349"/> ⑤
<div class="block-grafik">
<img src="img/Max_und_Moritz_015.png" alt="Witwe Bolte schneidet ab"/>
</div>
<p>Tiefbetrübt und sorgenschwer</p>
. . .
<p>Dieses war der erste Streich,</p>
<p>Doch der zweite folgt sogleich.</p>
<h2>Zweiter Streich</h2> ⑥
<div class="seite-normal" id="seite0350"/> ⑦
. . .
</body>
</html>
Code-Beispiel: Max und Moritz mit Seitenangaben in XHTML
Die für die Navigation relevanten Strukturen wurden nun grau hinterlegt. Zunächst muss natürlich die hierarchische Struktur des Titels, im Beispiel stark verkürzt auf das Vorwort ② und den ersten Streich in ④, abgebildet werden. Darüber hinaus können aber nun auch die Seitenangaben in ③, ⑤ bzw. ⑦, die jeweils in einem <div class="seite-normal"> stehen, für die Navigation genutzt werden.
In der zugehörigen NCX-Datei würde das dann wie folgt aussehen:
<?xml version="1.0" encoding="UTF-8"?>
<ncx xmlns="http://www.daisy.org/z3986/2005/ncx/" version="2005-1" xml:lang="de" dir="lfr">
<head>
<meta name="dtb:uid" content="BestellNr123456"/>
<meta name="dtb:depth" content="1"/>
<meta name="dtb:totalPageCount" content="8"/> ①
<meta name="dtb:maxPageNumber" content="350"/> ②
</head>
<docTitle>
<text>Max und Moritz</text>
</docTitle>
<navMap id="hierarchie"> ③
<navPoint id="kap0001" playOrder="1">
<navLabel>
<text>Vorwort</text>
</navLabel>
<content src="kap0001.xml"/>
</navPoint>
<navPoint id="kap0002" playOrder="3">
<navLabel>
<text>Erster Streich</text>
</navLabel>
<content src="kap0002.xml"/>
</navPoint>
<navPoint id="kap0003" playOrder="10">
<navLabel>
<text>Zweiter Streich</text>
</navLabel>
<content src="kap0003.xml"/>
</navPoint>
</navMap>
<pageList id="seiten"> ④
<navLabel> ⑤
<text>Liste der Seiten</text>
</navLabel>
<!-- Vorwort (playOrder=1) beginnt auf Seite 343 -->
<pageTarget id="kap0001s0343" playOrder="2" type="normal" value="343"> ⑥
<navLabel>
<text>343</text> ⑦
</navLabel>
<content src="kap0001.xml#seite0343"/> ⑧
</pageTarget>
<!-- 1. Streich (playOrder=3) beginnt auf Seite 344 -->
<pageTarget id="seite0344" playOrder="4"type="normal" value="344">
<navLabel>
<text>344</text>
</navLabel>
<content src="kap0002.xml#seite0344"/>
</pageTarget>
<pageTarget id=" seite0345"playOrder="5"type="normal" value="345">
<navLabel>
<text>345</text>
</navLabel>
<content src="kap0002.xml#seite0345"/>
</pageTarget>
. . .
<pageTarget id="seite0349"playOrder="9"type="normal" value="349">
<navLabel>
<text>349</text>
</navLabel>
<content src="kap0002.xml#seite0349"/>
</pageTarget>
<!-- 2. Streich (playOrder=10) beginnt auf Seite 350 -->
<pageTarget id="seite0350"playOrder="11"type="normal" value="350">
<navLabel>
<text>350</text>
</navLabel>
<content src="kap0003.xml#seite0350"/>
</pageTarget>
. . .
</pageList>
</ncx>
Code-Beispiel: Aufbau der NCX-Datei am Beispiel von Max und Moritz mit Seitenangaben
Die erste Neuerung betrifft die beiden Seiten-Metadaten, die nun bei vorliegendem Element <pageList> sinnvoll befüllt werden können: Der Wert für dtb:totalPageCount ① beträgt "8", es gibt also insgesamt acht Seiteneinträge. Die höchste Seitenzahl in dtb:maxPageNumber ② lautet "350", beides hier willkürliche Angaben, die dem besonderen, stark verkürzten Beispiel von Max und Moritz geschuldet sind.
Das Element <pageList> ④ klammert die Navigationsangaben der Seiten. Zu Beginn steht der Titel der gesamten <pageList> in einem eigenen Element <navLabel> ⑤.
Es folgen die einzelnen Seitenangaben jeweils in einem <pageTarget>-Element ⑥, das jeweils ⑦ den Anzeigewert – die Seitenzahl – sowie die Referenz auf die einzelnen Stellen in den Inhaltsdateien enthält ⑧. Im Element <pageTarget> sollten bzw. müssen die folgenden Attribute verwendet werden:
- type (Pflichtattribut): Der Typ unterscheidet abhängig von der Art der Seitenzählung (Paginierung); bei type="front" wird römische Zählung zu Beginn eines Buches verwendet; die normale arabische Seitenzählung wird mit type="normal" gekennzeichnet; davon abweichende Zählsysteme können den type="special" erhalten. Konzeptionell wichtig ist, dass die Kombination der Attribute type und value eindeutig ist (eine römische Seite I <pageTarget type="front" value="1"> ist auf diese Weise von der arabischen Seite 1 <pageTarget type="normal" value="1"> unterscheidbar).
- value: empfohlenes Attribut für den ganzzahlig normalisierten Seitenwert (römisch "IV" wird zu "4"); eine Unterscheidung des Wertes bei unterschiedlichen Arten der Paginierung wird im Verbund mit dem oben genannten Typ erreicht.
- id (Pflichtattribut): ein eindeutiger Bezeichner
- playOrder (Pflichtattribut): ganzzahliger Wert, der die Abspielreihenfolge des <pageTarget> festlegt; das Attribut ist funktional parallel wie oben im <navPoint> zu sehen. Wird zusätzlich zur <navMap> eine <pageListe> verwendet, so lohnt es sich, die Abspielreihenfolge sauber festzulegen. Im Beispiel wurde sie streng in Leserichtung festgelegt. Enthält ein Kapitel, wie beispielsweise der erste Streich (playOrder=3) mehrere Seiten (hier: 344 bis 349), so erhalten diese die unmittelbar folgenden Werte, also ab playOrder=4. Erst der zweite Streich unterbricht diese Kette wieder (playOrder=10), bevor dann mit den darin enthaltenen Seiten (ab 350) eine neue playOrder-Kette entsteht. Das Ziel ist hier, dass für den Leser unabhängig von der Navigationsart kein anderer Lesefluss entsteht.
Eine erklärende Bemerkung zur Typenvergabe im Beispiel:
Alle <pageTarget>-Elemente tragen eine arabische Paginierung (haben also den Typ normal), obwohl normalerweise zu vermuten wäre, dass der Titel als auch das Vorwort in ③ römisch gezählt würde. Dies liegt daran, dass die zugrunde gelegte Gesamtausgabe alle Werke von Wilhelm Busch nacheinander ausgibt und daher die ursprünglich römisch gezählten Seiten in den arabischen Teil verrutscht sind. Damit schließen wir die Beschreibung des ersten Substandards OPF ab.
<< zurück | vor >> |
Tipp der data2type-Redaktion: Zum Thema ePub bieten wir auch folgende Schulungen zur Vertiefung und professionellen Fortbildung an: |
Copyright © mitp 2011
Für Ihren privaten Gebrauch dürfen Sie die Online-Version ausdrucken.
Ansonsten unterliegt dieses Kapitel aus dem Buch "E-Books mit ePUB" denselben Bestimmungen wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.
Verlagsgruppe Hüthig Jehle Rehm GmbH, Im Weiher 10, 69121 Heidelberg, kundenbetreuung(at)hjr-verlag.de