Zum Inhalt springen

Machine Learning Blog

Tutorials, Ressourcen, Erfahrungen mit Machine Learning in Python

  • Buchempfehlungen
  • Datenschutzerklärung
  • Über mich
  • Impressum

ePub selbst erstellen: Die Datei content.opf mit Metadata, Manifest und Spine (Teil 2)

Reading an eBook by the pool

Nun besteht so ein eBook ja nicht nur aus dem Inhalt, sondern hängt sehr stark von den den Inhalt strukturierenden Dateien ab. Es lohnt sich, Sorgfalt in diese Dateien zu investieren. Wir beginnen hier mit dem Skelett, das wir im vorangegangenen Post – ePub für ein eBook von Grund auf selbst erstellen (Teil 1) – bereits gesehen haben.

<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<package xmlns="http://www.idpf.org/2007/opf"
    version="2.0"
    unique-identifier="bookid">

    <metadata>
        <!-- Metainformationen -->
    </metadata>

    <manifest>
        <!-- Übersicht des Inhalts -->
    </manifest>

    <spine>
        <!-- Reihenfolge des Inhalts-->
    </spine>

</package>

Diese XML-Datei ist aus drei Teilen aufgebaut: <metadata>, <manifest> und <spine>. Umklammert werden die drei Elemente von der XML-Definition und dem Wurzelement package. Hier geben wir beispielsweise an, welche Hauptsprache wir verwenden, welche ePub-Version wir einsetzen und nach welchen Standards wir vorgehen. Des Weiteren erklären wir, dass unser identifier unter „bookid“ zu finden ist. Diese Angaben zwar wichtig, aber eher formaler Natur und repetitiv, wir würden sie für alle unsere Bücher im ePub2-Format so verwenden.

Schauen wir uns daher die sich von Buch zu Buch unterscheidenden individuellen Details an. Beginnen wir damit, uns anzugucken, was unser eBook im Abschnitt <metadata> benötigt.

Metadata

In <metadata> stehen die übergeordneten Angaben zum Buch, die Metainformationen. Zum Beispiel der Titel, Name der Autorin oder des Autors, Erscheinungsdatum, die Sprache, in der das Buch verfasst ist usw. Hier ist wichtig, dass der identifiereindeutig ist. Das kann eine ISBN sein oder die URL zur Seite zum eBook sein oder wie hier in unserem Fall eine UUID. Eine solche UUID kann man sich einfach online generieren lassen, zum Beispiel unter www.uuidgenerator.net. Sehen wir uns zwei Beispiele dazu an, zunächst ein einfaches:

Metadata-Beispiel 1

<metadata xmlns:dc="http://purl.org/dc/elements/1.1/"
    xmlns:dcterms="http://purl.org/dc/terms/"
    xmlns:opf="http://www.idpf.org/2007/opf"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

    <!-- Die eindeutige bookid -->
    <dc:identifier id="bookid">uuid:HIER:BEISPIELSWEISE:EINE:UUID</dc:identifier>

    <!-- Buchtitel -->
    <dc:title>DER TITEL DES BUCHS</dc:title>

    <!-- Autorin/Autor -->
    <dc:creator>AUTORENVORNAME AUTORENNACHNAME</dc:creator>

    <!-- Hauptsprache des Buchs -->
    <dc:language>de</dc:language>

    <!-- Titelbild -->
    <meta name="cover" content="coverimage" />
</metadata>

Metadata-Beispiel 2

<metadata xmlns:dc="http://purl.org/dc/elements/1.1/"
    xmlns:dcterms="http://purl.org/dc/terms/"
    xmlns:opf="http://www.idpf.org/2007/opf"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

    <!-- Die eindeutige bookid -->
    <dc:identifier id="bookid">uuid:HIER:BEISPIELSWEISE:EINE:UUID</dc:identifier>

    <!-- Buchtitel -->
    <dc:title>DER TITEL DES BUCHS</dc:title>

    <!-- Autorin/Autor -->
    <dc:creator>AUTORENVORNAME AUTORENNACHNAME</dc:creator>

    <!-- Hauptsprache des Buchs -->
    <dc:language>de</dc:language>

    <!-- Schlüsselwörter zum Buchinhalt für bessere Suchergebnisse -->
    <dc:subject>TOLLES THEMA</dc:subject>

    <!-- Titelbild -->
    <meta name="cover" content="coverimage" />

    <!-- Veröffentlichungsdatum -->
    <dc:date opf:event="publication">2020-01-24</dc:date>

    <!-- Datum der letzten Änderung -->
    <dc:date opf:event="modification">2020-01-27</dc:date>
</metadata>

Im zweiten Beispiel sind wir einen Schritt weitergegangen und haben neben den Pflichtfeldern weitere Felder verwendet. Diese Felder bieten hier die Möglichkeit von Stichwörtern zum besseren Finden des eBooks, Veröffentlichungsdatum und das Datum der letzten Änderung.

Manifest

Im <manifest> listen wir die einzelnen Bestandteile des Buchs auf und nennen dabei den Medientyp, den diese Bestandteile haben. So geben wir bei den html-Dateien application/xhtml+xml an, bei Bildern image/png oder image/jpg je nach Bildtyp. Auch die anderen Elemente werden auf diese Art beschrieben. Wir haben hier also ein Verzeichnis aller Dateien des Buches. Diese sind als item mit einer eindeutigen idbeschrieben. Für ein gültiges eBook benötigen wir hier mindestens ein item. Jede Datei, die im eBook erscheinen soll, muss innerhalb des Manifests gelistet sein.

Sehen wir uns auch hier ein Beispiel an:

Manifest-Beispiel

<manifest>
    <!-- Übersicht der Inhalte -->
    <!-- Das Inhaltsverzeichnis für ePub2 -->
    <item id="inhaltsverzeichnis" href="texts/inhaltsverzeichnis.ncx" media-type="application/x-dtbncx+xml"/>

    <!-- Die Titelseite -->
    <item id="cover" href="texts/titel.xhtml" media-type="application/xhtml+xml"/>

    <!-- Die Titelillustration -->
    <item id="coverimage" href="images/cover.png" media-type="image/png"/>

    <!-- Der Inhalt des Buchs -->
    <item id="kapitel_1“ href="texts/kapitel_1.xhtml" media-type="application/xhtml+xml"/>
    <item id="kapitel_2“ href="texts/kapitel_2.xhtml" media-type="application/xhtml+xml"/>
    <item id="ende" href="texts/ende.xhtml" media-type="application/xhtml+xml"/>

    <!-- Das Stylesheet, wonach der Text formatiert werden soll. -->
    <item id="css" href="styles/stylesheet.css" media-type="text/css"/>
</manifest>

Um das Inhaltsverzeichnis und warum hier nun zwei Elemente dazu stehen, kümmern wir uns in einem eigenen Abschnitt, daher überspringen wir es hier.

Die Titelseite ist eine HTML-Seite, die hier die id="cover" hat und daher mit der Titelseite assoziiert wird – ebenso die Titelillustration mit der id="coverimage".

Der Inhalt des Buchs besteht in unserem Beispiel aus den beiden Dateien kapitel_1.html und kapitel_2.html.

Abschließend nennen wir noch das Stylesheet, das angibt, wie der Inhalt für die Leserin oder den Leser aufbereitet werden soll.

Bei jedem item ist hinter href= angegeben, wo sich die Datei befindet. Wir erinnern uns: Die Bilder sollen in images, das Stylesheet in styles und die Textdateien in texts liegen. Wir müssen natürlich sicherstellen, dass die entsprechenden Dateien auch tatsächlich dort liegen und dass sie auch ganz genau so heißen. Mein Vorschlag ist, die selbst angelegten Verzeichnisse und Dateien konsequent klein zu schreiben, damit es hierbei zu keinen Fehlern kommt, die auf die unterschiedliche Schreibweise zurückzuführen sind. Anstelle von Leerzeichen verwenden wir Unterstriche (_).

Spine

Unter <spine> stellen wir die Reihenfolge der Darstellung der unter <manifest>angegebenen Buchbestandteile ein. Beim Öffnen vom Element <spine> geben wir noch den Hinweis auf das Inhaltsverzeichnis anhand der im <manifest> verwendeten idmit. Das Element itemref mit der Referenz idref auf die unter <manifest> definierte id einer jeweiligen Datei gibt die Reihenfolge an. Auch hier gilt, dass es mindestens ein Element innerhalb von <spine> geben muss – in diesem Fall itemref, damit es sich um einen gültigen Abschnitt der OPF-Datei handelt.

So könnte beispielsweise ein spine-Abschnitt für das zuvor bearbeitete <manifest>aussehen:

<spine toc="inhaltsverzeichnis">
    <!-- Reihenfolge der Inhaltsdateien-->
    <itemref idref="cover" />
    <itemref idref="kapitel_1“ />
    <itemref idref="kapitel_2“ />
    <itemref idref="ende" />
</spine>

Wichtig ist hier Hinweis auf das lesbare Inhaltsverzeichnis toc="inhaltsverzeichnis"beim Öffnen des Elements spine. Das Navigational Control file for XML applications(NCX) bildet eine hierarchische Liste der Buchbestandteile ab. Darin gehen wir in einem eigenen Beitrag später gesondert ein.

Damit wären wir fertig. Nun können wir einmal sehen, wie die komplette Datei inklusive erklärender Kommentare aussieht.

Die vollständige content.opf-Datei

<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<package xmlns="http://www.idpf.org/2007/opf"
    version="2.0"
    unique-identifier="bookid">

    <metadata xmlns:dc="http://purl.org/dc/elements/1.1/"
        xmlns:dcterms="http://purl.org/dc/terms/"
        xmlns:opf="http://www.idpf.org/2007/opf"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

        <!-- Die eindeutige bookid -->
        <dc:identifier id="bookid">uuid:HIER:BEISPIELSWEISE:EINE:UUID</dc:identifier>

        <!-- Buchtitel -->
        <dc:title>DER TITEL DES BUCHS</dc:title>

        <!-- Autorin/Autor -->
        <dc:creator>AUTORENVORNAME AUTORENNACHNAME</dc:creator>

        <!-- Hauptsprache des Buchs -->
        <dc:language>de</dc:language>

        <!-- Schlüsselwörter zum Buchinhalt für bessere Suchergebnisse -->
        <dc:subject>TOLLES THEMA</dc:subject>

        <!-- Titelbild -->
        <meta name="cover" content="coverimage" />

        <!-- Veröffentlichungsdatum -->
        <dc:date opf:event="publication">2020-01-24</dc:date>

        <!-- Datum der letzten Änderung -->
        <dc:date opf:event="modification">2020-01-27</dc:date>
    </metadata>

    <manifest>
        <!-- Übersicht der Inhalte -->
        <!-- Das Inhaltsverzeichnis für ePub2 -->
        <item id="inhaltsverzeichnis" href="texts/inhaltsverzeichnis.ncx" media-type="application/x-dtbncx+xml"/>

        <!-- Die Titelseite -->
        <item id="cover" href="texts/titel.xhtml" media-type="application/xhtml+xml"/>

        <!-- Die Titelillustration -->
        <item id="coverimage" href="images/cover.png" media-type="image/png"/>

        <!-- Der Inhalt des Buchs -->
        <item id="kapitel_1“ href="texts/kapitel_1.xhtml" media-type="application/xhtml+xml"/>
        <item id="kapitel_2“ href="texts/kapitel_2.xhtml" media-type="application/xhtml+xml"/>
        <item id="ende" href="texts/ende.xhtml" media-type="application/xhtml+xml"/>

        <!-- Das Stylesheet, wonach der Text formatiert werden soll. -->
        <item id="css" href="styles/stylesheet.css" media-type="text/css"/>
    </manifest>

    <spine toc="inhaltsverzeichnis">
        <!-- Reihenfolge der Inhaltsdateien-->
        <itemref idref="cover" />
        <itemref idref="kapitel_1“ />
        <itemref idref="kapitel_2“ />
        <itemref idref="ende" />
    </spine>

</package>

Das sieht doch schon recht ordentlich aus. Fehlt noch das Erstellen der inhaltsverzeichnis.ncx, was wir zunächst zurückgestellt haben. Wie und warum wir diese Datei erstellen, sehen wir uns im nächsten Post an:

ePub selbst erstellen: Das Inhaltsverzeichnis auf NCX-Basis erstellen (Teil 3)

Photo by Perfecto Capucine on Unsplash

  • twittern 
  • teilen 
  • E-Mail 
  • drucken 
  • RSS-feed 

Ähnliche Beiträge

Autor uemitVeröffentlicht am 31. Januar 202031. Januar 2020Kategorien AllgemeinSchlagwörter Apple Books, eBook, ePub, Kindle, Manifest, Metadata, OPF, Spine

Beitrags-Navigation

Zurück Vorheriger Beitrag: ePub für ein eBook von Grund auf selbst erstellen (Teil 1)
Weiter Nächster Beitrag: ePub selbst erstellen (Teil 3): Das Inhaltsverzeichnis auf NCX-Basis erzeugen
Datenschutz & Cookies: Diese Website verwendet Cookies. Wenn du die Website weiterhin nutzt, stimmst du der Verwendung von Cookies zu.
Weitere Informationen, beispielsweise zur Kontrolle von Cookies, findest du hier: Cookie-Richtlinie

Finanzielle Bildung: Soundtrack für Vermögenswerte

Vermögensaufbau leicht gemacht: Auf 310 Seiten lernst du ganz nebenbei, wie du deine Eigenmotivation erhöhst, deine Persönlichkeit entwickelst, deine Finanzbildung steigerst und letztlich finanziell unabhängig wirst.
Soundtrack Cover
Jetzt bei Amazon kaufen

Software selbstbewusst entwickeln

Du bist Softwareentwickler. Du kannst coden. Jetzt bist du bereit für den nächsten Schritt: den Code selbstbewusst, reproduzierbar und qualitativ hochwertig in eine Anwendung zu gießen. Dieses Buch hilft dir, deinen Weg zu gehen.
Soundtrack Cover
Jetzt bei Amazon kaufen

Neueste Beiträge

  • Künstliche Intelligenz und die Herausforderung, realistische Hände zu erzeugen
  • DALL·E: Die Chancen und Risiken der Bildgenerierung durch künstliche Intelligenz
  • Zustand des wettbewerbsorientierten maschinellen Lernens 2022
  • Pyenv: Das ultimative Tool zur Verwaltung von Python-Versionen und virtuellen Umgebungen
  • Keras installieren: Ein Tutorial in Python

AdSense


Kategorien

  • Allgemein
  • Ressourcen
  • Statistik

Archive

  • März 2023
  • Februar 2023
  • Januar 2023
  • Dezember 2022
  • Februar 2022
  • Januar 2022
  • Mai 2021
  • Februar 2021
  • Januar 2021
  • Dezember 2020
  • Oktober 2020
  • September 2020
  • August 2020
  • Juli 2020
  • Juni 2020
  • Mai 2020
  • April 2020
  • Februar 2020
  • Januar 2020
  • Dezember 2019
  • November 2019
  • Oktober 2019
  • September 2019
  • August 2019
  • Juli 2019
  • Juni 2019
  • April 2019
  • März 2019
  • Februar 2019
  • November 2018
  • Oktober 2018
  • August 2018
  • Juni 2018
  • Mai 2018
  • April 2018
  • März 2018
  • Februar 2018
  • Januar 2018
  • Dezember 2017
  • November 2017
  • Oktober 2017
  • Januar 2017
  • Dezember 2016
  • November 2016
  • Buchempfehlungen
  • Datenschutzerklärung
  • Über mich
  • Impressum
Machine Learning Blog Datenschutzerklärung Stolz präsentiert von WordPress