XML-Know How

Publications 3.0

Die „Publications 3.0“-Spezifikation definiert ein zentrales XML-Format zur Speicherung von Metadaten und Angaben über die Struktur der elektronischen Publikation. Sie finden ihren Niederschlag in einer verpflichtenden XML-Datei mit der Endung .opf. OPF steht für „Open Packaging Format“ und ist ein begriffliches Relikt aus der vorherigen EPUB-Version 2.

Die Metadaten enthalten Informationen über die Inhalte des E-Books, wie zum Beispiel Titel, Autor und Erscheinungsjahr, die sich von Ausgabemedien oder durch Suchanfragen auswerten lassen und somit einen Mehrwert bei der Distribution bieten können.

Die in der Spezifikation enthaltene Beschreibung zur Struktur des Dokuments umfasst eine vollständige Auflistung der im Archiv gespeicherten Inhaltsdateien, deren logische Reihenfolge (Serialisierung) und den Verweis auf das Navigationsdokument.

Darüber hinaus definiert die OPF-Spezifikation grundsätzliche Minimalanforderungen an den Inhalt, denen valide EPUB-Dokumente entsprechen müssen. Dazu gehören zwingend benötigte Dateien sowie die Bereitstellung von Fallback-Lösungen für Inhalte, die nicht verpflichtend von allen Ausgabemedien unterstützt werden müssen.

7201.png
Abb. 2.2

Die OPF-Datei muss in einem EPUB zwingend vorhanden sein und wie in Abbildung 2.2 dargestellt auf oberster Ebene innerhalb des Inhaltsordners liegen. Fehlt diese Datei, ist das EPUB-Dokument invalide. Der Name der Datei kann beliebig gewählt werden, die Extension muss allerdings .opf lauten.


<package xmlns="http://www.idpf.org/2007/opf" version="3.0" unique-identifier="buchid">
  <metadata xmlns:dc="http://purl.org/dc/elements/1.1/">
    [...]
  </metadata>
  <manifest>
    [...]
  </manifest>
  <spine>
    [...]
  </spine>
  <bindings>
    [...]
  </bindings>
</package>
Listing 2.1 Das Grundgerüst der OPF-Datei

Die OPF-Datei ist ein XML-Dokument und beginnt mit dem Wurzelelement package, das die Metadaten und Strukturinformationen umschließt. Die zwei Attribute version, mit dem Wert der aktuellen EPUB-Version 3.0, und unique-identifier, eine eindeutige ID, die dem Attribut-Wert id des Elements dc:identifier im metadata-Container entspricht (siehe Kapitel 2.1.1), sind verpflichtend. Das Element besitzt zudem die Namespace-Deklaration http://www.idpf.org/2007/opf. Das Wurzelelement umfasst ein Set an Container-Elementen, die jeweils Informationen zu einem der zuvor genannten Aspekte der Dokumentstruktur umfassen.

  • metadata enthält die Metadaten der Publikation
  • manifest listet unsortiert alle eingebundenen Dokumentressourcen
  • spine legt die Lesereihenfolge der Inhaltsdateien fest
  • bindings (optional) steuert den skriptbasierten Umgang mit Dateitypen, die durch das Ausgabemedium nicht unterstützt werden

Der metadata-Container

Die Metainformationen eines EPUB-E-Books wurden mit der EPUB-Version 3 um einige Bereiche erweitert. Hierzu gehört die Verfeinerung der bestehenden Metadaten und die Unterstützung weiterer Metadaten-Standards.

Die Metaangaben von EPUB 3 basieren analor zur Vorgängerversion auf dem Dublin Core Element Set (DCMES), das 15 Elemente zur Beschreibung einer Publikation umfasst.2 Durch die Verwendung des Namespaces http://purl.org/dc/elements/1.1 am metadata-Element [1] kann auf dieses Elementset zugegriffen werden. Ergänzt wird dieses Metadaten-Set durch das meta-Element, welches eine Detaillierung der Dublin-Core-Elemente ermöglicht sowie zusätzliche Metadaten-Standards unterstützt.

Der minimale Umfang an Metadaten umfasst die Elemente dc:identifier, dc:title und dc:language sowie den property-Attributwert dcterms:modified für das meta-Element. Die Dublin Core Metadata Terms (DCTERMS) gehören zu den vom Standard reservierten Präfixen des meta-Elements. Sie stellen eine Ergänzung des DCMES dar und enthalten verfeinernde wie auch zusätzliche Elemente. Das folgende Beispiel stellt ein solches minimales Set an Metadaten für eine EPUB-Publikation dar:


<metadata xmlns:dc="http://purl.org/dc/elements/1.1/">
  <dc:title>EPUB 3 und KF 8 verstehen</dc:title>
  <dc:language>de</dc:language>
  <dc:identifier id="bookurl">http://www.pagina-online.de/epub</dc:identifier>
  <meta property="dcterms:modified">2012-10-10T12:00:00Z</meta>
</metadata>
Listing 2.2

Eine vollständige Übersicht über die Dublin-Core-Elemente zur Verwendung in EPUB gibt die nachstehende Tabelle.

Element

Vorkommen

Bedeutung

dc:title

verpflichtend

Publikationstitel

dc:language

verpflichtend

Sprache (Werte entsprechend RFC5646)

dc:identifier

verpflichtend

Eindeutige Bezeichnung (z. B. ISBN), mehrere möglich

dc:contributor

optional

Mitwirkende

dc:coverage

optional

Zeitlich oder räumlich einschränkender Geltungsbereich

dc:creator

optional

Autor(en)

dc:date

optional

Erscheinungsdatum

dc:description

optional

Inhaltliche Beschreibung

dc:format

optional

Medientyp

dc:publisher

optional

Herausgeber bzw. Verlag

dc:relation

optional

Externe Ressource, auf die sich die
Publikation bezieht

dc:rights

optional

Hinweise zu Urheberrechten

dc:source

optional

Angabe der Quelle, aus der die
Publikation erzeugt wurde

dc:subject

optional

Thematisches Schlagwort

dc:type

optional

Klassifizierung der Publikationsart

Tab. 2.1 Das Dublin Core Elementset

Mit Hilfe des wiederholbaren meta-Elements können diese Metainformationen nun weiter ausdifferenziert werden. Es besitzt zwingend das Attribut property, dessen Wert einer definierten Eigenschaft entsprechen muss. Es wird unterschieden zwischen vordefinierten Eigenschaften, reservierten und neu definierten Präfixen. Der genaue Umgang mit diesen Attributwerten wird im Abschnitt „4.2 Vocabulary Association Mechanisms“ der Spezifikation beschrieben. Soll mit dem meta- Element ein Dublin Core-Element näher beschrieben werden, wird das refines-Attribut benötigt. Mit der folgenden Zeile wird ein Titel als Untertitel des E-Books klassifiziert:

<meta refines="#titel" property="title-type">subtitle</meta>

Listing 2.3 Spezifizierung der Dublin Core-Metadaten

Mit dem optionalen scheme-Attribut kann zudem ein bestehendes Schema wie das ONIX-Datenformat, auf welchem der Elementinhalt aufbaut, referenziert werden.

Mit Hilfe des meta-Elements lassen sich beispielsweise komplexe Titel­strukturen klassifizieren. Die Metaangaben einer Publikation mit dem Haupttitel „EPUB 3 und KF 8 verstehen“, dem Untertitel „Möglichkeiten und Anreicherungen“ und dem vollständigen Titel (zum Beispiel für die Archivierung) können wie folgt umgesetzt werden:


<dc:title id="title1">EPUB 3 und KF 8 verstehen</dc:title>
<meta refines="#titel1" property="title-type">title</meta>
<meta refines="#titel1" property="display-seq">1</meta>
<dc:title id="titel2">Möglichkeiten und Anreicherungen</dc:title>
<meta refines="#titel2" property="title-type">subtitle</meta>
<meta refines="#titel2" property="display-seq">2</meta>
<dc:title id="titel3">Die Möglichkeiten und Anreicherungen von EPUB 3 und KF 8</dc:title>
<meta refines="#titel3" property="title-type">fulltitle</meta>
<meta refines="#titel3" property="display-seq">3</meta>
Listing 2.4 Metadaten-Auszeichnung einer komplexen Titelstruktur

Zusätzlich zu den Möglichkeiten der näheren Beschreibung bestehender Dublin-Core-Elemente, lassen sich mit dem meta-Element für sich selbst stehende Metainformation ergänzen. In diesem Fall wird das refines-Attribut weggelassen. Ein Beispiel ist die bereits genannte dcterms:modified-Eigenschaft mit dem vordefinierten dcterms-Präfix, die eine Versionierung der EPUB-Publikation ermöglicht (in Verbindung mit dem Unique Identifier ergibt sich eine eindeutige Identität für unterschiedliche Versionen derselben Publikation). Auf diesem Weg kann auf bestehende Metadaten-Strukturen zurückgegriffen werden, die bereits im Verlag für die Distribu­tion eingesetzt werden, und die EPUB-Publikation um diese Angaben ergänzt werden. Weitere nativ unterstützte Metadaten-Standards neben DCTERMS sind MARC, das von Amazon eingesetzte ONIX sowie XSD. Da die Dublin Core-Elemente bereits die wichtigsten Angaben zu einer Publikation enthalten, wird die Implementierung weiterer Metadaten-Standards in der Verlagsbranche selten zum Einsatz kommen.

Mit dem prefix-Attribut am Wurzelelement package lassen sich zudem bestehende oder eigene Namespaces für die Anreicherung mit individuellen Metadaten wie beispielsweise verlagsinternen Angaben deklarieren.


<package  prefix="pa: http://www.pagina-online.de/">
  <metadata xmlns:dc="http://purl.org/dc/elements/1.1/">

    <meta property="pa:bearbeiter">Andreas Kämmerle</meta>
Listing 2.5 Definition von Metadaten über einen eigenen Namespace

Darüber hinaus ist es möglich, auf umfangreiche Pakete an Metainformationen außerhalb des EPUB-Containers zu verweisen. Ein externer Datensatz kann mit dem Element link referenziert werden. Mit dem rel-Attribut wird eine vordefinierte oder Namespace-basierende Eigenschaft (entsprechend dem meta-Element) deklariert, auf deren Datenquelle im Attribut href verwiesen wird. Direkt unterstützte externe Ressourcen sind MARC21, MODS, ONIX, XML Signature und das von Adobe eingesetzte XMP.

<link rel="xmp-record" href="http://pagina-online.de/xmp/beispiel.xml"/>
Listing 2.4 Link auf ein externes XMP-Metadatenset

Der manifest-Container

Der zweite Container der Packaging-Datei ist das manifest-Element, das eine Auflistung aller Dateien beinhaltet, aus welchen sich das E-Book ­zusammensetzt. Dazu gehören die Inhaltsdokumente wie Texte und Multimedia, Navigationsdokumente, Stylesheets und eingebettete Schriften.

Diese Dateien müssen jeweils in einem item-Element referenziert werden. Die item-Elemente sind leere Elemente und beinhalten die notwendigen Angaben als Attributewerte. Im Einzelnen sind dies eine eindeutige ID, ein Verweis auf die Zieldatei sowie eine Deklaration des Medientyps dieser Datei. Der Medientyp einer Ressource wird über den sogenannten MIME-Type definiert. Der MIME-Type beinhaltet eine maschinenlesbare Information über den Typ einer Datei.

MIME-Type

Endung

Bedeutung

application/xhtml+xml

.xhtml

Inhaltsformat

application/font-woff

.woff

Fontformat

application/vnd.ms-opentype

.otf

Fontformat

application/pls+xml

.pls

XML-basiertes
Aussprachelexikon

application/smil+xml

.smil

XML-basierte
Synchronisierungsstruktur

application/x-dtbncx+xml

.ncx

Abgelöster
Navigationsstandard

image/gif

.gif

Abbildungsformat

image/jpeg

.jpg

Abbildungsformat

image/png

.png

Abbildungsformat

image/svg+xml

.svg

XML-basiertes
Vektorengrafikformat

audio/mp4

.mp4

Audioformat

audio/mpeg

.mp3

Audioformat

text/css

.css

Stylesheetformat

text/javascript

.js

Skriptformat

Tabelle 2.2 MIME-Types der Core Media Types

Für externe Ressourcen sowie Inhalte, die nicht den sogenannten Core Media Types entsprechen, muss des Weiteren eine Alternative angegeben werden, auf die zurückgegriffen werden kann, wenn das Lesegerät den fremden Dateityp nicht wiedergeben kann. Wird beispielsweise ein PDF-Dokument in ein EPUB eingebunden, sollte eine HTML-Datei gleichen Inhalts mitgeliefert werden, um die Inhalte auf Geräten, die PDF nicht darstellen können, dennoch zugänglich zu machen.

Diese Fallback-Lösungen sind notwendig, um eine vollständige Unterstützung der EPUB-Inhalte durch technologisch unterschiedlich leistungsfähige Ausgabemedien zu gewährleisten und stellen einen wesentlichen Erfolgsfaktor des EPUB 3-Formats dar.

Für das item-Element existiert eine Liste an properties-Attributwerten, welche für bestimmte Einträge gesetzt werden müssen. So wird beispielsweise eine Abbildung mit der cover-image-Eigenschaft als die Covergrafik des EPUBs definiert. Darüber hinaus kann mit dem media-overlay-Attribut auf ein Audio-Overlay für ein Inhaltsdokument verwiesen werden, welches wiederum im Manifest gelistet werden muss (siehe Kapitel „Media Overlays“).


<manifest>
  <item id="toc" properties="nav" href="toc.xhtml" media-type="application/xhtml+xml"/>
  <item id="cover" href="abbildungen/cover.jpg" media-type="http://www.pagina-online.de/fileadmin/user_upload/EPUB3_und_KF8/jpeg" properties="cover-image"/>
  <item id="kapitel1" href="kapitel1.xhtml" media-type="application/xhtml+xml"/>
  <item id="kapitel2" href="kapitel2.xhtml" media-type="application/xhtml+xml"/>
  <item id="font" href="fonts/DroidSerif-Regular.otf" media-type="application/"/>
  <item id="pdf" href="pdf/broschuere.pdf" media-type="application/pdf" fallback="broschuere"/>
  <item id="broschuere" href="broschuere.xhtml" media-type="application/xhtml+xml"/>
</manifest>
Listing 2.6 Das manifest-Element mit den item-Kindelementen

Das obere Code-Listing beinhaltet eine Fallback-Struktur für ein eingebundenes PDF [8]. Kann dieses nicht angezeigt werden, wird stattdessen eine XHTML-Datei, die idealerweise denselben Inhalt anbietet, angezeigt. Ausgeschlossen von dieser Fallbackregelung über das manifest-Element sind lediglich Schriftdateien – hier findet das Fallback-Handling über die CSS-Datei statt.

Das Manifest eines EPUBs muss mindestens aus einem Eintrag, der den Verweis auf das Navigationsdokument enthält, bestehen.

Das spine-Element

Ein weiterer grundlegender Bestandteil des OPF-Standards ist eine Struktur, welche die standardmäßige Abfolge der einzelnen Inhaltsdokumente innerhalb des EPUBs festlegt. Diese Sortierung wird von dem Containerelement spine übernommen. Kommt ein Lesegerät am Ende einer Datei an, wird anhand der Angaben innerhalb dieses Container festgelegt, welche Datei als nächstes angezeigt wird.

Die Einträge der XHTML-Inhaltsdokumente im Spine erfolgen mit dem Element itemref. Die Reihenfolge dieser Elemente definiert die Sequenz in der Publikation in Form einer geordneten Liste. Jedes itemref-Element muss mit dem idref-Attribut auf einen item-Eintrag im Manifest verweisen. Somit sind die Elemente in spine grundsätzlich eine Teilmenge der im manifest-Element definierten EPUB-Dokumente.

Mit dem Attribut linear kann darüber hinaus zwischen Dokumenten, die für die Leseabfolge benötigt werden und zusätzlichen Inhalten außerhalb dieser Abfolge unterschieden werden. Dokumente, die Bestandteil des Haupttextes sind, besitzen den Standardwert yes, ergänzende Inhalte erhalten den Wert no. Aufgrund des Standardwerts kann das Attribut bei primären Dokumenten weggelassen werden.

Für das itemref-Element sind in der Spezifikation Eigenschaften definiert, die im optionalen property-Attribut angegeben werden können. Die Eigenschaftswerte page-spread-left und page-spread-right ermöglichen die Festlegung des Seitenbeginns eines Inhaltsdokuments. Stellt ein EPUB-Reader die Inhalte in einer Doppelseiten-Ansicht dar, kann auf diese Weise die Seitenanordnung gesteuert werden.

Darüber hinaus existiert zur Seitensteuerung für das spine-Element das optionale Attribut page-progression-direction, mit welchem die globale Seitenlaufrichtung festgelegt werden kann. Mögliche Werte sind ltr (links nach rechts), rtl (rechts nach links) und default (Standardeinstellung des Geräts).

Der spine-Container muss mindestens einen Eintrag für das Navigationsdokument beinhalten. Das nachstehende Beispiel bezieht sich auf das manifest entsprechend Code-Listing 2.6.


<spine>
  <itemref id="toc" linear="no"/>
  <itemref idref="kapitel1" properties="page-spread-right"/>
  <itemref idref="kapitel2"/>
</spine>
Listing 2.7 Ein einfacher spine-Container

Das bindings-Element

Der bindings-Container ermöglicht die Steuerung von komplexen Fallback-Mechanismen für Systeme, die JavaScript unterstützen. Die Struktur steuert den Umgang mit Inhalten, die von dem HTML 5-Element object3 referenziert werden, jedoch nicht zu den Kernmedientypen des EPUB-Standards gehören. Mit diesem Element können externe Inhalte in ein Dokument eingebunden werden. Eine ausführliche Beschreibung des Elements findet sich im Kapitel „HTML 5-Inhaltsdokumente“. Das folgende Beispiel zeigt die Einbindung eines Flash-Videoplayers, der ein MPEG-codiertes Video aufruft.


<object data="videoplayer.swf" type="application/x-shockwave-flash">
  <param name="flashvars" value="image=bigbuck.jpg&file=bigbuck.mp4"/>
</object>
Listing 2.8 Das object-Element

Die recht komplexe Struktur des bindings-Elements wird hier nur der Vollständigkeit halber beschrieben, ihr Einsatz in EPUB beschränkt sich auf Ausnahmefälle.

Unterstützt ein Lesegerät eine über object eingebettete Struktur oder ein Dateiformat nicht, wird zunächst der bindings-Container auf den nicht unterstützten MIME-Type geprüft und bei Erfolg das in diesem Element referenzierte XHTML-Dokument aufgerufen. Erst wenn keine Entsprechung in den Bindings existiert bzw. auch das geskriptete Inhaltsdokument nicht wiedergegeben werden kann, werden die elementeigenen Alternativen verwendet.


<manifest>
  <item id="diashow" href="diashow.xml" media-type="application/slideshow"/>
  <item id="kapitel_jsplayer" href="kapitel_jsplayer.xhtml" media-type="application/xhtml+xml" properties="scripted"/>

</manifest>

<bindings>
  <mediaType handler="kapitel_jsplayer" media-type="application/x-shockwave-flash"/>
</bindings>
Listing 2.9 Fallback-Handling durch die bindings-Komponente

Anhand des Listings 2.7 soll ein solches Szenario aufgezeigt werden. Per object-Element (siehe Kapitel 2.2.1) ist eine Flash-Datei zur Darstellung des Videoplayers (MIME-Type application/x-shockwave-flash) in ein HTML-Dokument eines EPUBs eingebunden. Kann das Lesegerät dieses Dateiformat nicht darstellen, unterstützt jedoch Skripting-Inhalte, wird das mediaType-Element mit identischem MIME-Type in media-type gefunden [8] und stattdessen die Inhaltsdatei, auf die über die ID im handler-Attribut verwiesen wird, aufgerufen. Dieses XHTML-Dokument, welches im Manifest referenziert sein und das Attribut properties="scripted" besitzen muss [3], enthält eine vergleichbare Umsetzung eines Videoplayers auf Basis von JavaScript.

Auf diese Weise können skriptbasierte Alternativen für externe Inhalte implementiert und, über die eigenen Möglichkeiten von object hinaus, komplexe Fallback-Lösungen vorgesehen werden. Die Fallback-Struktur des bindings-Containers hat grundsätzlich Priorität gegenüber Element-spezifischen Mechanismen wie den Kindelementen des object-Elements. Lesegeräte, die JavaScript unterstützen, müssen das bindings-Element auswerten.

Da je Medientyp lediglich ein handler-Dokument definiert werden kann, stößt diese Fallback-Lösung bereits bei der Verwendung zweier Dateien mit selbem MIME-Type an seine Grenzen.


2 Der Dublin Core Metadaten-Standard wurde 1995 von der internationalen Dublin Core Metadata Initiative (DCMI) entwickelt und findet unter anderem in HTML Anwendung.

3 Das object-Element ermöglicht die Einbindung aller Arten von Multimedia-Dateien sowie alternativen Inhalten für den Fall, dass das eigentliche Objekt nicht angezeigt werden kann.