XML-Know How

Der Aufbau eines EPUB-Dokuments

Im Oktober 2007 verabschiedete das International Digital Publishing Forums (IDPF) drei offizielle Standards, die unter dem gebräuchlichen Namen EPUB zusammengefasst sind. EPUB besteht demnach aus

  • dem Standard OCF (Open Container Format), der sich um die Verwaltung und Organisation der für ein EPUB-Dokument benötigten Dateien kümmert;
  • dem Standard OPF (Open Packaging Format), der sich mit dem Aufbau und der Kompression eines EPUB-Dokumentes beschäftigt;
  • sowie dem Standard OPS (Open Publication Structure) für die eigentlichen Inhaltsdaten von EPUB-Dokumenten.

Ein EPUB-Dokument besteht im Kern aus einer festen Verzeichnisstruktur sowie einer Reihe von Steuerdateien – und natürlich den eigentlichen Inhaltsdokumenten (in HTML) und deren Formatierungsinformation (in CSS). Die Steuerdateien selbst sind – bis auf die Standard-Datei mimetype – sämtlich XML-Dateien.

Alle Dateien sind zu einem Zip-Dokument zusammengefasst und komprimiert.

Tipp

Jedes EPUB-Dokument lässt sich mit wenigen Handgriffen (rechte Maustaste: Umbenennen) in ein ZIP-Dokument umbenennen und anschließend entpacken.

Entpackt man das EPUB, kommt beispielsweise folgende Dokument- und Verzeichnisstruktur zum Vorschein:

Die Datei mimetype (sie muss diesen Namen tragen) gibt dem Lesegerät oder der Lesesoftware an, dass es sich beim vorliegenden Dokument um ein EPUB-Dokument handelt.

Info

MIME steht für Multipurpose Internet Mail Extensions. Der MIME-type klassifiziert den Inhalt einer Internet-Datei. Auf diese Weise wird z. B. einem Browser mitgeteilt, welche Art von Daten gerade vom Server gesendet werden (etwa HTML, txt oder auch eine PNG-Grafik).

Die mimetype-Datei ist eine reine Text-Datei. Sie enthält in einem EPUB immer genau folgenden Wortlaut:

application/epub+zip

Die nächste, vom Aufbau her vorgegebene Datei ist die Datei container.xml, die in einem Ordner mit dem Namen META-INF liegen muss. Diese Datei ist der Einstiegspunkt jeder Lesesoftware. Sie ist eine XML-Datei mit folgendem vorgegebenen Aufbau:

Beispiel:

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

<container version="1.0" xmlns="urn:oasis:names:tc:opendocument:xmlns:container">

<rootfiles>

<rootfile full-path="meinOrdner/meinBuch.opf" media-type="application/oebps-package+xml">

</rootfile>

</rootfiles>

</container>

Die Datei container.xml enthält im Wesentlichen den Verweis auf die OPF-Datei der Publikation in unserem Beispiel in der Zeile

<rootfile full-path="meinOrdner/meinBuch.opf" (…)>.

Die OPF-Datei (content.opf) wiederum enthält die Angaben, welche Dokumente (Metadaten, Text, Formatierungsanweisungen, Bilder oder Fonts) zum EPUB-Dokument gehören, wo sie liegen und in welcher Reihenfolge sie präsentiert werden. Jedes OPF-Dokument beginnt mit einem <package>-Element und untergliedert sich in drei Bestandteile:

  • Metadaten für das Dokument, repräsentiert durch das Element <metadata>
  • Auflistung aller zum EPUB-Dokument gehörenden Dokumente, abgebildet im Element <manifest>
  • Festlegung der Reihenfolge bei der Wiedergabe der einzelnen Inhaltsabschnitte, abgebildet im Element <spine>.

Die folgenden Codezeilen zeigt einen Ausschnitt aus der Datei content.opf:

Beispiel:

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

<package version="2.0" unique-identifier="PrimaryID" xmlns="http://www.idpf.org/2007/opf">

<metadata xmlns:dc="http://purl.org/dc/elements/1.1/">

<dc:title>Titel der Publikation</dc:title>

<dc:identifier id="PrimaryID">ID der Publikation </dc:identifier>

<dc:language>Sprachcode</dc:language>

<dc:date>Publikationsjahr</dc:date>

<dc:subject>Genre der Publikation</dc:subject>

</metadata>

<manifest>

<item id="kap1"

href="meinKapitel1.html"

media-type="application/xhtml+xml"/>

<item id="kap2"

href="meinKapitel2.html"

media-type="application/xhtml+xml"/>

<item id="page-css"

href="meinBuch.css"

media-type="text/css"/>

<item id="ncx"

href="meinBuch.ncx"

media-type="application/x-dtbncx+xml"/>

</manifest>

<spine toc="ncx">

<itemref idref="kap1" />

<itemref idref="kap2" />

</spine>

</package>

Der Standard OPF greift bei der Formulierung der Metadaten (in <metadata>) auf das etablierte Format Dublin Core zurück, das eine Reihe an bibliothekarischen Metadaten wie Titel, Datum usw. liefert.

Innerhalb des Elementes <manifest> wird nun auf die für das konkrete E-Book benötigten Dateien verwiesen. Dies sind zum einen die Kapitel meinKapitel1.html und meinKapitel2.html (die auch tatsächlich als XHTML-Dateien vorliegen müssen), die zugehörigen Formatierungsanweisungen in Form einer CSS-Datei (meinBuch.css) und eine Datei, die ein Inhaltsverzeichnis der Publikation zur Verfügung stellt (meinBuch.ncx).

Dieses Inhaltsverzeichnis gehört nicht zum eigentlichen Text des Buches (und liegt entsprechend auch nicht als HTML-Datei vor). Vielmehr handelt es sich um eine Steuerdatei (im XML-Format), über die das jeweilige Lesegerät einen Navigationsbaum aufbauen kann, um auf einzelne Kapitel und Unterkapitel zu navigieren. Innerhalb des Elementes <spine> muss nun noch die Reihenfolge festgelegt werden, in der die einzelnen Inhaltsdokumente präsentiert werden sollen.

Die ncx-Datei hat folgenden Aufbau:

Beispiel:

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

<ncx xmlns="http://www.daisy.org/z3986/2005/ncx/" version="2005-1">

<head>

<meta name="dtb:uid" content="urn:isbn:"/>

<meta name="dtb:depth" content="3"/>

<meta name="dtb:totalPageCount" content="0"/>

<meta name="dtb:maxPageNumber" content="0"/>

</head>

<docTitle>

<text>Titel des Buches</text>

</docTitle>

<navMap>

<navPoint id="c_1" playOrder="1">

<navLabel>

<text>Titel/Name/Überschrift der ersten HTML-Datei, so wie er/sie im Inhaltsverzeichnis auftauchen soll</text>

</navLabel>

<content src="meinKapitel1.html"/>

</navPoint>

<navPoint id="c_2" playOrder="2">

<navLabel>

<text> Titel/Name/Überschrift der zweiten HTML-Datei, so wie er/sie im Inhaltsverzeichnis auftauchen soll</text>

</navLabel>

<content src="meinKapitel2.html"/>

</navPoint>

</navMap>

</ncx>

Von diesen organisatorischen Dateien abgesehen besteht das EPUB-Dokument nur noch aus den eigentlichen Inhaltsdaten – HTML, CSS und ggf. Abbildungen. Es ist dabei nicht zwingend erforderlich, ein Buch kapitelweise in HTML-Dokumente aufzuteilen.

Aufsplitten in Einzeldateien

Da einige ältere Lesegeräte aber immer noch Schwierigkeiten mit dem Laden von HTML-Dateien von mehr als 300 Kilobyte pro Einzeldatei haben, bietet es sich an, ein umfangreiches Werk in mehrere Einzeldateien aufzusplitten. Auch für das Erstellen des Inhaltsverzeichnisses tut man sich dann leichter: So kann häufig für jeden Eintrag des Inhaltsverzeichnisses auf eine eigene HTML-Datei verwiesen werden – andernfalls müsste die HTML-Datei mit internen Sprungankern angereichert werden, auf die dann aus dem Inhaltsverzeichnis verwiesen wird.