Navigation in logisch-hierarchischen Gliederungen
(Auszug aus "E-Books mit ePUB ─ Von Word zum E-Book mit XML" von Dr. Victor Wang)
Betrachten wir zunächst mit dem folgenden Beispiel den Normalfall einer hierarchischen Gliederung:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE ncx PUBLIC "-//NISO//DTD ncx 2005-1//EN" "http://www.daisy.org/z3986/2005/ncx-2005-1.dtd">
<ncx xmlns="http://www.daisy.org/z3986/2005/ncx/" version="2005-1" xml:lang="de" dir="lfr"> ①
<head>
<meta name="dtb:uid" content="ebookID"/> ②
<meta name="dtb:depth" content="2"/> ③
<meta name="dtb:totalPageCount" content="0"/> ④
<meta name="dtb:maxPageNumber" content="0"/> ⑤
</head>
<docTitle> ⑥
<text>Charles Darwin</text>
</docTitle>
<navMap id="hierarchie"> ⑦
<navPoint id="kap00001" playOrder="1">
<navLabel>
<text>1. Leben und Werk</text>
</navLabel>
<content src="../ops/dokument.htm#kap00001"/>
<navPoint id="kap00002" playOrder="2">
<navLabel>
<text>1.1. Kindheit und Studium</text>
</navLabel>
<content src="../ops/dokument.htm#kap00002"/>
</navPoint>
<navPoint id="kap00003" playOrder="3">
<navLabel>
<text>1.2. Die Reise mit der HMS Beagle</text>
</navLabel>
<content src="../ops/dokument.htm#kap00003"/>
</navPoint>
<navPoint id="kap00004" playOrder="4">
<navLabel>
<text>1.3. Zurück in England – Anfänge der Evolutionstheorie</text>
</navLabel>
<content src="../ops/dokument.htm#kap00004"/>
</navPoint>
<navPoint id="kap00005" playOrder="5">
<navLabel>
<text>1.4. Rückzug nach Down House</text>
</navLabel>
<content src="../ops/dokument.htm#kap00005"/>
</navPoint>
<navPoint id="kap00006" playOrder="6">
<navLabel>
<text>1.5. Über die Entstehung der Arten</text>
</navLabel>
<content src="../ops/dokument.htm#kap00006"/>
</navPoint>
. . .
</navPoint>
. . .
</navMap>
</ncx>
Codebeispiel: Aufbau der NCX-Datei
Das Wurzelelement <ncx> trägt drei Attribute ①: die Version der NCX-Datei ist fix, im Moment lautet sie version="2005-1"; die übrigen beiden Attribute sind für zwei generelle Festlegungen wichtig: xml:lang gibt die Sprache und dir die Leserichtung an, hier mit dem für westliche Sprachen gültigen Normalwert ltr ("left to right"). Außerdem wird für das ganze Dokument der Default-Namensraum xmlns="http://www.daisy.org/z3986/2005/ncx/" deklariert.
Im folgenden Element <head> stehen Metadaten, formuliert in den hier dem NCX-Namensraum angehörigen, generischen <meta>-Elementen. Das in der NCX-Spezifikation vorhandene Element <smilCustomTest> wird in OPF nicht verwendet. Die folgenden vier Metadaten sollten auch in OPF in der NCX-Datei verwendet werden:
- ② dtb:uid: globaler eindeutiger Bezeichner, der mit dem Wert des Attributs unique-identifier von <package> übereinstimmen sollte
- ③ dtb:depth: hierarchische Tiefe der NCX-Datei als Ganzzahl
- ④ dtb:totalPageCount: Anzahl der Elemente <pageTarget> innerhalb von <pageList>; fehlen diese, so steht hier wie im Beispiel einfach der Wert 0.
- ⑤ dtb:maxPageNumber: höchste Seitenzahl eines der <pageTarget>-Elemente; auch hier steht einfach 0, wenn diese fehlen.
Den Metadaten folgt in ⑥ der <docTitle>, also der Titel der NCX-Datei.
Der nun folgende Teil der <navMap> ⑦ beschreibt die eigentliche Hierarchie der Navigation. Die Grundstruktur dieser Hierarchie ist einfach: Jede Ebene wird in einem <navPoint> abgebildet, der einen Titel <navLabel> und eine Inhaltsreferenz <content> sowie – soweit vorhanden – weitere Ebenen, also weitere <navPoint>-Elemente, enthalten kann. Das folgende Beispiel zeigt schematisch, wie eine verschachtelte Hierarchie mit drei Ebenen aussehen würde:
<!-- Ebene 1 -->
<navPoint playOrder="3" id="kap010000">
<navLabel>
<text>Kapitel 1</text>
</navLabel>
<content src="kap01.html"/>
<!-- Ebene 2 -->
<navPoint playOrder="4" id="kap010100">
<navLabel>
<text>Kapitel 1.1</text>
</navLabel>
<content src="kap01-01.html"/>
<!-- Ebene 3 -->
<navPoint playOrder="5" id="kap010101">
<navLabel>
<text>Kapitel 1.1.1</text>
</navLabel>
<content src="kap01-01-01.html"/>
</navPoint>
. . .
</navPoint>
. . .
</navPoint>
Code-Beispiel: Aufbau einer hierarchischen <navPoint>-Struktur innerhalb des NCX
Sehen wir uns die Hierarchie-Elemente genauer an: Der Navigationspunkt <navPoint> ⑦ stellt die logische Hierarchieebene dar. Das Pflicht-Attribut playOrder muss einen ganzzahligen Wert enthalten, der die Abspielreihenfolge der Ebene definiert. Ebenso notwendig ist ein eindeutiger Bezeichner im Attribut id.
Innerhalb von <navPoint> folgt der Titel als Kind-Element <navLabel>. Bei mehrsprachigen Publikationen können mehrere <navLabel> mit den Sprachattributen xml:lang bzw. dir=rtl|ltr angegeben werden. Der eigentliche Text des Titels steht separat in dem Element <text>.
Das zweite Kind-Element <content> ⑧ verweist schließlich auf die eigentliche Inhaltsdatei, auf die aus der Navigation gesprungen werden soll. Das Attribut src ist für den Verweis zwingend und muss einen gültigen URI auf die Zieldatei enthalten.
Mittels dieses recht einfachen, rekursiv verwendbaren Konstrukts kann praktisch jede beliebige Hierarchie abgebildet werden. In der Praxis ist allerdings konzeptionell zu bedenken, welche Tiefe für einen Leser sinnvoll und zumutbar ist. Eine zu tiefe und feingliedrige Hierarchie wird schnell unhandlich und wenig transparent – wer navigiert schon gerne in einem Text mit sieben oder mehr Ebenen, die möglicherweise auch noch durchgehend gezählt werden ("Kapitel 1.2.3.4.5.6.7")?
<< 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