Digitale Bücher im Format EPUB selbst erstellen: Dateiverzeichnis

Dinge zu bezweifeln, die gemeinhin einfach nur geglaubt wurden, ist allemal eine ehrenvolle Aufgabe.
Olaf Hoffmann

Kurzanleitung

Inhalt

Auf metadata folgt im OPF-Dokument das Element manifest mit dem Verzeichnis aller Dateien, die für den Inhalt benötigt werden. Das schließt dann auch Stilvorlagen, Graphiken, Bilder, Audio- und Videodateien etc mit ein, ebenso wie das Inhaltsverzeichnis für den Leser, nicht aber die Strukturdateien von EPUB selbst, wie etwa das OPF-Dokument.

Eintrag für eine Datei

Die einzelnen Dateien werden in manifest jeweils mit einem Element item gelistet und referenziert. Die Reihenfolge ist nicht relevant, es müssen nur alle Dateien gelistet sein, die im Buch präsentiert werden sollen. Dieselbe Datei darf nur exakt einmal gelistet werden.

Identifikation eines Eintrages

Jedes Element item hat ein Attribut id mit einem für das Dokument einmaligen Fragmentidentifizierer als Wert. Der Wert beginnt mit einem Buchstaben, optional gefolgt von weiteren Buchstaben oder Ziffern, Minuszeichen oder Unterstrichen. Der Wert ist einmalig unter allen Werten für id-Attribute im Dokument. Die Identifikation wird dann in der nächsten Struktur spine des OPF-Dokumentes noch gebraucht, um die normale Lesereihenfolge der Dokumente festzulegen.

Referenzierung einer Inhaltsdatei

Ebenfalls erforderlich ist für das Element item ein Attribut href, dessen Wert eine URI ist. Referenziert wird damit eine Datei, welche zum Inhalt des Buches beiträgt. Zumeist wird das eine relative Angabe bezüglich des aktuellen OPF-Dokumentes sein. Eine absolute URI ist möglich, aber nicht allzu plausibel, weil nicht davon ausgegangen werden kann, daß immer eine Netzverbindung verfügbar ist, wenn das Buch gelesen wird. Es werden immer komplette Dateien referenziert, an die URI wird also kein Fragmentidentifizierer angehängt.

Angaben zum Inhaltstyp

Mit dem für das Element item ebenfalls erforderlichen Attribut media-type wird der Medientyp oder Inhaltstyp des referenzierten Dokumentes angegeben. Die Angabe erfolgt nach dem Schema von IANA [IANA]. Inhaltstypen für Formate, die für EPUB 2 vom Darstellungsprogramm interpretiert werden müssen, sind:

'application/xhtml+xml'
Text im Format XHTML
'application/x-dtbook+xml'
Text im Format DAISY (DTB)
'application/x-dtbncx+xml'
Das Format für das noch zu erklärende Inhaltsverzeichnis für den Leser
'application/xml'
XML nur für Dateninseln, bei eigenständigen Inhaltsdokumenten ist eine Interpretation nicht erforderlich, aber eine Verwendung unter Angabe einer Alternative möglich
'text/css'
Stilvorlage im Format CSS
'image/svg+xml'
Vektorgraphik, SVG
'image/png'
Pixelgraphik, Computergraphik, PNG
'image/jpeg'
Pixelgraphik, digitale Photographien, JPEG/JFIF
'image/gif'
Pixelgraphik, veraltetes Format GIF, durch PNG oder SVG ersetzbar

Optionale Formate und Alternativen

Andere Formate dürfen auch verwendet werden, brauchen aber vom Darstellungsprogramm nicht interpretiert werden. EPUB fordert aber für solche Formate einen zugänglichen Ersatz wie Alternativtext oder Dateien in einem der aufgeführten Formate. Wird solch ein in obiger Liste nicht aufgeführtes Format referenziert, ist ein zusätzliches Attribut fallback zu notieren. Der Wert ist dann ein Fragmentidentifizierer des Eintrages der Alternative. Auch die Alternative kann wieder auf einen anderen Listenpunkt als Alternative verweisen. Zirkelschlüsse sind allerdings unzulässig. Die letzte Alternative muß im Sinne obiger Liste interpretierbarer Formate oder weiterer Ausführungen jedenfalls darstellbar sein.
Als Beispiel:

<item id="kpdf1" 
    fallback="k1"
    href="kapitel1.pdf"
    media-type="application/pdf" />
<item id="k1" 
    href="kapitel1.xhtml"
    media-type="application/xhtml+xml" />

Die Interpretation von PDF ist in EPUB nicht erforderlich, daher ist eine Alternative dazu bereitzustellen. Das ist hier eine Datei im Format XHTML. Der Fragmentidentifizierer vom item der XHTML wird als Wert des Attributes fallback beim item des PDF-Dokumentes notiert.

XML-Dateninseln, Module und Alternativen

Als XML-Dateninseln werden in EPUB zum einen komplette XML-Dokumente bezeichnet, die zu einem Namensraum gehören, der gemäß EPUB nicht erforderlich interpretierbar ist. Zum anderen können auch Fragmente aus fremden Namenräumen in einem Dokument auftreten, auch diese werden dann XML-Dateninseln genannt. Für solche Fragmente stellt EPUB einen speziellen Mechanismus insbesondere zur Einbettung in XHTML bereit, weil das anders als SVG keinen eigenen Mechanismus hat, um Alternativen anzugeben. Dieser Mechanismus wird an anderer Stelle diskutiert: Fallunterscheidung bei XML-Dateninseln.

Da XHTML erweiterbar ist, können darin auch Fragmente aus anderen XML-Formaten notiert werden. Diese Dateninseln müssen vom Darstellungsprogramm aber nicht interpretiert werden können, wenn das Format nicht bekannt ist, was passieren kann, wenn die Dateninsel nicht zu einem der erforderlichen Formate gehört oder von diesem Format ein Modul verwendet wird, welches laut EPUB nicht interpretiert werden braucht.

Relativ unproblematisch ist der Sachverhalt, wenn die Elemente in der Dateninsel nur dekorative oder semantische Funktionen haben - über die Stilvorlage läßt sich recht einfach eine sinnvolle Präsentation verwirklichen. Ein gewisses Problem dabei könnte natürlich sein, daß der Leser die Interpretation der Stilvorlage des Autors deaktiviert hat, etwa weil eine eigene verwendet wird, um die optimale Lesbarkeit der Präsentation bekannter Formate zu gewährleisten oder auch, um die Präsentation den eigenen Gewohnheiten anzupassen.

Um eine Stilvorlage bereitzustellen, die eine hinreichende Präsentation von unbekannten Dateninseln gewährleistet, dient das Attribut fallback-style. Der Wert ist dann ein Fragmentidentifizierer eines Eintrags item, welcher eine Stilvorlage referenziert, welche eine geeignete Präsentation der Dateninsel ermöglicht.

EPUB läßt sich allerdings nicht darüber aus, ob die so referenzierte Stilvorlage auch deaktiviert wird, wenn der Leser pauschal die Interpretation von Stilvorlagen abschaltet. Plausibel ist hier jedenfalls, eine per fallback-style als gleichrangig mit der Stilvorlage eines Darstellungsprogrammes gleichzusetzen, also durch den Leser zwar nicht deaktivierbar, aber in der Kaskade nur von niedriger Priorität gegenüber möglichen Stilvorlagen des Lesers oder sonstigen des Autors.

Ein Beispiel:

<item id="k1" 
    href="kapitel1.xml"
    media-type="application/x-lml+xml"
    required-namespace="http://purl.oclc.org/net/hoffmann/lml/"
    fallback-style="lmlstyle"/>
<item id="lmlstyle" 
    href="lmlstyle.css"
    media-type="text/css" />

Egal, welche Inhalte die XML-Datei enthält und welche XML-Formate, auch XHTML oder SVG, darin verwendet werden, solange die Elemente aus XHTML und SVG allein die Funktion des Dokumentes gewährleisten und für die anderen XML-Formate nur die Stilvorlage notwendig ist, um sie angemessen zu präsentieren, ist eine solche Konstruktion hinreichend.

<item id="k1" 
    href="kapitel1.xhtml"
    media-type="application/xml"
    required-namespace="http://purl.oclc.org/net/hoffmann/lml/"
    fallback-style="lmlstyle"/>
<item id="lmlstyle" 
    href="lmlstyle.css"
    media-type="text/css" />

Enthält die normale Stilvorlage, die von der XML-Datei referenziert wird, ohnehin schon ebenfalls die Angaben für die Präsentation der anderen Formate, so kann natürlich als Wert von required-namespace auch 'application/xhtml+xml' angegeben werden und die per fallback-style damit verknüpfte Stilvorlage kann dann auch leer sein. Zu beachten ist hierbei, daß eine normale Stilvorlage des Autors eine andere Priorität hat und vom Leser auch einfach deaktiviert werden kann. Dies sollte dann trotzdem nicht zur Folge haben, daß die Dateninsel nicht mehr passabel lesbar ist. Das könnte etwa der Fall sein, wenn per SVG oder XHTML ohnehin eine alternative Darstellung verfügbar ist oder die zusätzlichen fremden Elemente nur dazu dienen, Fragmente von SVG oder XHTML aufzunehmen, die den gesamten relevanten Inhalt repräsentieren.

Für das folgende Beispiel sei die Datei 'leer' leer und 'kapitel1.xhtml' verwende eine Stilvorlage, die auch für die Präsentation der Dateninsel ausreicht:

<item id="k1" 
    href="kapitel1.xhtml"
    media-type="application/xml"
    required-namespace="http://purl.oclc.org/net/hoffmann/lml/"
    fallback-style="leer"/>
<item id="leer" 
    href="leer"
    media-type="text/css" />

Problematischer ist die Angelegenheit allerdings, falls die Elemente darüber hinaus eine wichtige technische Funktion aufweisen, die nicht per Stilvorlage erzielt werden kann. In solch einem Falle bietet EPUB auch hier die Möglichkeit, für das gesamte Dokument eine Alternative ohne ein fremdes XML-Format bereitzustellen.

Mit dem Attribut required-namespace allein kann für das Element item angegeben werden, welche Kenntnis welchen Namensraumes erforderlich ist, um das Dokument mit Dateninsel korrekt zu interpretieren. Der Wert ist der für die Präsentation erforderliche Namensraum. Es ist nicht angegeben, was zu tun ist, wenn Dateninseln aus verschiedenen Namensräumen verwendet werden. Um hier also Definitionslücken von EPUB zu umgehen, empfiehlt es sich, Inhalte so weit aufzuteilen, daß maximal eine Dateninsel pro Dokument auftritt, beziehungsweise die Dateninsel mit mehreren Namensräumen so zu strukurieren, daß das Wurzelelement dieser Dateninsel ein Element ist, welches Inhalt aus anderen Namensräumen erlaubt. Dann ist es formal problemlos möglich, nur den Namensraum des Wurzelelementes per required-namespace anzugeben.
Ein Beispiel:

<item id="k1" 
    fallback="kf1"
    href="kapitel1.xml"
    media-type="application/xml"
    required-namespace="http://purl.oclc.org/net/hoffmann/lml/"/>
<item id="kf1" 
    href="kapitelf1.xhtml"
    media-type="application/xhtml+xml" />

Wird also LML [LML] nicht interpretiert, so wird nicht 'kapitel1.xml' präsentiert, sondern die Alternative 'kapitelf1.xhtml'. In diesem Zusammenhang könnte man etwa in 'kapitel1.xml' LML verwendet haben, um ein Gedicht semantisch angemessen auszuzeichnen, was mit XHTML nicht möglich ist. 'kapitelf1.xhtml' würde dann zum Beispiel das Gedicht nur mit einer mangelhaften Auszeichnung mit Elementen aus XHTML enthalten, etwa mit div-Elementen oder dl-Listen.
Wird sowohl fallback-style als auch fallback notiert, so kann das Darstellungsprogramm selbst entscheiden, ob es die Darstellung der Dateninsel mit der Stilvorlage präsentiert oder lieber die Alternative ohne die Dateninsel präsentiert:

<item id="k1" 
    fallback-style="lmlstyle"
    fallback="kf1"
    href="kapitel1.xml"
    media-type="application/xml"
    required-namespace="http://purl.oclc.org/net/hoffmann/lml/"/>
<item id="lmlstyle" 
    href="lmlstyle.css"
    media-type="text/css" />
<item id="kf1" 
    href="kapitelf1.xhtml"
    media-type="application/xhtml+xml" />

Weil DAISY (DTB) auch Elemente für Gedichte bereitstellt, könnte es für das Beispiel auch sinnvoll sein, dieses Format statt XHTML für die Alternative zu verwenden:

<item id="k1" 
    fallback="kf1"
    href="kapitel1.xml"
    media-type="application/xml"
    required-namespace="http://purl.oclc.org/net/hoffmann/lml/"/>
<item id="kf1" 
    href="kapitelf1.xml"
    media-type="application/x-dtbook+xml" />             

Statt die komplette Alternative in DTB zu verfassen, könnte es auch sinnvoll sein, ein XHTML-Dokument mit einer DTB-Dateninsel für das Gedicht als Alternative zu verwenden. Da Darstellungsprogramme für EPUB beide Formate interpretieren können müssen, ist für solch eine Konstruktion keine weitere Alternative notwendig.

Eine weitere Möglichkeit besteht darin, daß Module von XHTML 1.1 im Dokument verwendet werden, welche das Darstellungsprogramm nicht interpretieren kann. Nicht unwahrscheinlich ist dies etwa für das Modul Ruby, mit welchem es möglich ist, Kommentare entlang eines Textes zu notieren, was besonders im asiatischen Raum gebräuchlich ist. In solch einem Falle kann man ebenfalls eine Alternative angeben, wo man dann die Kommentare anderweitig, zum Beispiel als Fußnoten realisiert. Zur Angabe eines erforderlichen Moduls wird das Attribut required-modules verwendet. Mittels required-namespace wird ebenfalls der zugehörige Namensraum angegeben. Der Wert ist eine Liste von für die Präsentation erforderlichen Modulen. Als Separator zwischen den Listenpunkten dient ein Komma. Optionale Leerzeichen davor und danach sind zulässig.
Ein Beispiel:

<item id="k1" 
    fallback="kf1"
    href="kapitel1.xhtml"
    media-type="application/xhtml+xml"
    required-namespace="http://www.w3.org/1999/xhtml"
    required-modules="ruby"/>
<item id="kf1" 
    href="kapitelf1.xhtml"
    media-type="application/xhtml+xml" />             

Hier dient dann also 'kapitelf1.xhtml' als Alternative zu 'kapitel1.xhtml', die Kommentare könnten hier etwa als Fußnoten realisiert sein. Andere für EPUB bedenkliche Module von XHTML 1.1 sind zum Beispiel 'forms', 'server-side-image-map' und 'intrinsic-events'.

Literaturangaben