XML-Know How

Der Aufbau eines EPUB-Dokuments

Im Oktober 2007 verabschiedete die Arbeitsgruppe des International Digital Publishing Forums (IDPF) drei offizielle Standards, die unter dem gebräuchlichen Namen EPUB zusammengefasst sind[1]. 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 somit im Kern aus einer festen Verzeichnisstruktur sowie einer Reihe von Steuerdateien und den eigentlichen Inhaltsdokumenten. Alle diese Dateien sind zu einem Zip-Dokument zusammengefasst und komprimiert. Umgekehrt formuliert: Jedes EPUB-Dokument lässt sich mit wenigen Handgriffen (rechte Maustaste: Umbenennen) in ein ZIP-Dokument umwandeln und anschließend entpacken. Zum Vorschein kommt dann minimal beispielsweise folgende Dokument- und Verzeichnisstruktur:

      mimetype
META-INF/
container.xml
OPS
MobyDick.opf
MobyDick.ncx
MobyDick.css
main0.html
main1.html
… weitere html-Files für weitere Kapitel

Die Datei mimetype gibt dem Lesegerät oder der Lesesoftware an, dass es sich beim vorliegenden Dokument um ein EPUB-Dokument handelt. Typischerweise wird dafür der folgende MIME-Type[5] verwendet: application/epub+zip.

Außerdem findet man die Datei container.xml im Verzeichnis META-INF. Diese Datei ist der Einstiegspunkt jeder Lesesoftware. Sie ist eine reine XML-Datei mit folgendem, vorgegebenen Aufbau:

<?xml version="1.0" encoding="UTF-8" ?>
<container version="1.0"
xmlns="urn:oasis:names:tc:opendocument:xmlns:container">
<rootfiles>
<rootfile full-path="OPS/MobyDick.opf"
media-type="application/oebps-package+xml">
</rootfile>
</rootfiles>
</container>

In container.xml ist ein Verweis auf die jeweilige OPF-Datei der Publikation zu finden (in unserem Beispiel in der Zeile <rootfile full-path="OPS/MobyDick.opf" (…)>.

Die OPF-Datei 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>.

Der folgende Code zeigt einen Ausschnitt aus der Datei content.opf:

<?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>Moby Dick</dc:title>
   <dc:identifier id="PrimaryID">c7035976</dc:identifier>
   <dc:language>en</dc:language>
   <dc:date>1851</dc:date>
   <dc:subject>Novels</dc:subject>
</metadata>
 
<manifest>
<item id="main0"
      href="main0.html"
      media-type="application/xhtml+xml"/>
 
<item id="main1"
      href="main1.html"
      media-type="application/xhtml+xml"/>
 
<item id="page-css"
      href="MobyDick.css"
      media-type="text/css"/>
 
<item id="ncx"
      href="MobyDick.ncx"
      media-type="application/x-dtbncx+xml"/>
</manifest>
 
<spine toc="ncx">
   <itemref idref="main0" />
   <itemref idref="main1" />
</spine>
 
</package>

Der Standard OPF greift bei der Adressierung von Metadaten auf das etablierte Format Dublin Core zurück, der 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 main0 und main1 (die als XHTML-Dateien vorliegen), die zugehörigen Formatierungsanweisungen in Form eines Cascading-Stylesheets (MobyDick.css) und eine Datei, die ein Inhaltsverzeichnis der Publikation zur Verfügung stellt (MobyDick.ncx). Mit letzterem kann auf dem jeweiligen Lesegerät auf einzelne Kapitel und Unterkapitel navigiert werden. Innerhalb des Elementes <spine> muss nun noch die Reihenfolge festgelegt werden, in der die einzelnen Inhaltsdokumente präsentiert werden sollen.

Viel wichtiger als die Dateien zur Organisation eines EPUB-Dokumentes sind die eigentlichen Inhaltsdaten der Publikation. Wie eingangs bereits erwähnt, handelt es sich hierbei um HTML- bzw. XHTML-Dokumente. Diese Struktur kennen wir bereits von Dokumenten im Internet[6] – sobald wir unsere Inhalte also für das Web aufbereiten können, sollte auch eine Umsetzung als EPUB keine grundlegenden technischen Schwierigkeiten bieten. Die Formatierung dieser Dokumente, also die Festlegung der Darstellung der Inhalte auf dem Lesegerät, erfolgt mittels CSS (mit all seinen Einschränkungen im Bereich der Seitenformatierung).

Folgendes Codebeispiel zeigt die Inhaltsdatei main1.html sowie die CSS-Datei MobyDick.css unseres EPUB-Dokumentes:

main1.html

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Moby-Dick</title>
<link rel="stylesheet" href="MobyDick.css" type="text/css" />
<meta http-equiv="Content-Type"
content="application/xhtml+xml; charset=utf-8" />
</head>
<body>
<div class="chapter">
<h2><span class="chapterHeader"><span class=
"translation">Chapter</span> <span class="count">5</span></span>
Breakfast</h2>
<p>I quickly followed suit, and descending into the bar-room
accosted the grinning landlord very pleasantly. I cherished no
malice towards him, though he had been skylarking with me not a
little in the matter of my bedfellow. ... </p>
</div>
</body>
</html>

MobyDick.css

@page {
margin-top: 0.8em;
margin-bottom: 0.8em;
margin-left: 1em;
margin-right: 1em;
}

body {
font-family: serif;
padding: 0;
}

div.chapter {padding-top: 3.0em;}

h2 {
font-size: 1.2em
margin-top: 1em;
margin-bottom: 0.3em;
}

p {
margin-top: 0.3em;
margin-bottom: 0.3em;
text-indent: 1.0em;
}

Die Einbindung der CSS-Datei erfolgt also genau so, wie wir das bisher aus HTML kennen – das Element <link> im <head> innerhalb von main1.html verweist auf die CSS-Datei MobyDick.css, die alle Informationen zur Formatierung des EPUB-Dokumentes enthält.

Neben den gängigen Formatierungsanweisungen wie Schriftgröße, Schriftart und Abständen müssen für eine professionelle Formatierung aufgrund der
Seitenorientierung des Mediums noch weitere Angaben enthalten sein.

Anders als im Internet, wo im Allgemeinen jede HTML/XHTML-Datei eine Seite repräsentiert, kommt ein E-Book ohne Scrollbalken aus. Es verfügt statt dessen über eine »buchähnliche« Umblätter-Funktion. Wieviel jeweils auf eine »Seite« passt, hängt von der Displaygröße des Endgerätes sowie den voreingestellten Schriftgrößen ab. Der Zeilen- und Seitenumbruch wird dann automatisiert vorgenommen. Daher ist es notwendig, einen einfachen Satzspiegel zu definieren. Die Seitenränder lassen sich mit dem Aufruf @page gemäß CSS2 entsprechend einstellen.

Auch für erweiterte seitenspezifische Einstellungen (z.B. die Vermeidung von Schusterjungen und Hurenkindern) oder explizite Seitenumbrüche stellt CSS2 entsprechende Befehle zur Verfügung.[7]


     

  • [5]    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, welcher Art Daten gerade vom Server gesendet werden (etwa HTML, txt oder auch eine PNG-Grafik).
  • [6]    Der Standard OPS lässt neben HTML/XHTML noch weitere Strukturen als Inhaltsdaten zu. Zu erwähnen wäre hier der Standard DTBook (Digital Talking Book) vom DAISY (Digital Audio-based Information System) Konsortium. Anders als HTML/XHTML sind in DTBook bereits die Strukturen abgebildet die wir bei der Erstellung von seitenbasierten Publikationen benötigen. Zu erwähnen sind hier z.B. Fußnoten und Marginalien. Der Bekanntheitsgrad und den damit verbundenen Implementierungen scheint es geschuldet zu sein, dass die meisten EPUB-Dokumente auf HTML/XHTML basieren.
  • [7]    Alle durch OPS unterstützte CSS-Eigenschaften finden sich unter [3]
  •