»epubMinFlow«

Ein minimaler Workflow zur automatisierten Umsetzung von E-Books im EPUB-Format

Das im Folgenden kurz vorgestellte Projekt »epubMinFlow« soll den technologischen Prozess der Produktion von E-Books auf der Basis des populären EPUB-Formates unter Verwendung von XML zur Datenhaltung und XSLT 2.0 zur Produktion demonstrieren. Es wurde im Rahmen von Lehrveranstaltungen und weiteren Publikationen des Autors konzipiert und umgesetzt.

von Dr. Thomas Meinike – 04/2010

Überblick

Zu den EPUB-Grundlagen sei an dieser Stelle lediglich auf die IDPF-Spezifikationen, den kompakten Wikipedia-Artikel und ein bemerkenswertes Video verwiesen. Ziel des Projektes ist die automatisierte Umsetzung von elektronischen Büchern ausgehend von einer einfachen XML-Buchstruktur. Dazu wurden Datenmodelle wahlweise als Document Type Definition (buch.dtd) und XML-Schema (buch.xsd) entworfen. In einem darauf aufbauenden Buch lassen sich neben den benötigten Metadaten die eigentlichen Inhalte in Kapiteln und Abschnitten ablegen. Zusätzlich können Bilder, Stylesheets (CSS) und Font-Dateien einbezogen werden.

Die Produktion der EPUB-Archive wird über ein Windows-basiertes Konsolenskript (go.cmd) gesteuert. Darin werden zunächst die benötigten Zusatzdateien und Pfade festgelegt. Danach wird ein später zu packendes Verzeichnis mit Unterverzeichnissen erzeugt. Es schließt sich ein XSLT 2.0-Transformationsschritt an (Code in epub.xsl), welcher das exemplarische Dokument buch.xml in die vom EPUB-Standard vorgegebene Zielstruktur mit allen erforderlichen Steuer- und Inhaltsdateien überführt. Danach folgt der ZIP-Kompressionsschritt zum fertigen E-Book (buch.epub). Abschließend wird eine Konsistenz- bzw. Konformitätsprüfung mit frei verfügbaren Testwerkzeugen vorgenommen.

Werkzeuge

Zum Nachvollziehen werden diese frei zugänglichen Softwarekomponenten benötigt:

Verwendbare Inhalte

XML-Buchinstanzen von buch.dtd bzw. alternativ buch.xsd erlauben die Verwendung eines vereinfachten Satzes an Strukturelementen (Abbildung 1 veranschaulicht die zugrunde gelegte Dokumentstruktur, detaillierter als separate Schema-Übersicht verfügbar):

Einblick in die Document Type Definition buch.dtd
Abb. 1: Einblick in die Document Type Definition buch.dtd

Das XSLT-Stylesheet epub.xsl setzt die relevanten Inhalte nach XHTML 1.1 um und erzeugt unter Nutzung von xsl:result-document pro Kapitel ein Ausgabedokument:

<!-- Kapitelinhalte als XHTML-Dateien ausgeben -->
<xsl:template match="kapitel">
  <xsl:result-document href="{$epubdir}/{$opsdir}/{$htmldir}/kapitel{fn:position()}.html" format="xhtml11">
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="{if(/buch/metadaten/sprache) then /buch/metadaten/sprache else 'en'}">

      <head>
        <meta http-equiv="Content-Type" content="application/xhtml+xml; charset=UTF-8" />
        <meta name="description" content="EPUB - Kapitel {fn:position()}" />
        <link rel="stylesheet" type="text/css" href="../{$cssdir}/{/buch/dateien/datei[@id='stylesheet']/@name}" />
        <title><xsl:value-of select="@titel"/></title>
      </head>

      <body>
        <h1><xsl:value-of select="@titel"/></h1>
        <xsl:apply-templates select="abschnitt"/>
      </body>

    </html>
  </xsl:result-document>
</xsl:template>

Anpassungen in go.cmd

Zur Nutzung des Batchjobs sind ggf. Anpassungen in go.cmd vorzunehmen, insbesondere beim Dateinamen des zu verarbeitenden XML-Dokuments (Vorgabe buch.xml) und bezüglich der absoluten Pfade zu den verwendeten Programmen:

~~~ (1) ~~~

rem Ausgangsdokumente (XML bzw. XSLT):
set xmlfile=buch.xml
set xslfile=epub.xsl

rem Programmpfade zu ZIP-Tool, XSLT-Prozessor, EPUB-Checktools
rem [Aufrufparameter ggf. unter (2) anpassen]:
set ziptool="X:\Pfad_zu\Info-ZIP\zip.exe"
set xsltprz="X:\Pfad_zu\Saxon\saxon9he.jar"
set epcheck="X:\Pfad_zu\EpubCheck\epubcheck-1.2.jar"
set epprefl="X:\Pfad_zu\EpubPreflight\epubpreflight-0.1.0.jar"

~~~ (2) ~~~

rem EPUB-Inhalte mittels XSLT 2.0-Job aus XML-Buchdokument erzeugen
rem (container.xml, content.opf, toc.ncx, einzelne XHTML-Dokumente):
echo.
echo * XSLT-Prozess ...
java -jar %xsltprz% -s:%xmlfile% -xsl:%xslfile%

rem Erzeugten Verzeichnisinhalt in *.epub packen:
echo.
echo * Kompression ...
echo.
cd %epubdir%
%ziptool% -0X ..\%epubfile%.epub mimetype
%ziptool% -9XDr ..\%epubfile%.epub %metadir% %opsdir%
cd..

...

Bei alternativer Nutzung von AltovaXML / Intel SOA Expressway / XQSharp für den Transformationsschritt sind diese angepassten Zeilen zu verwenden:

set xsltprz="X:\Pfad_zu\AltovaXML\AltovaXML.exe"
...
%xsltprz% -in %xmlfile% -xslt2 %xslfile%

~~~~~~~~~~~

set xsltprz="X:\Pfad_zu\IntelSOAExpressway\soaexslt2.exe"
...
%xsltprz% %xslfile% %xmlfile%

~~~~~~~~~~~

set xsltprz="X:\Pfad_zu\XQSharp\XSLT.exe"
...
%xsltprz% -s %xmlfile% %xslfile%

Zur Ausführung der Java-basierten Komponenten wird zusätzlich eine aktuelle Java-Laufzeitumgebung (JRE) benötigt.

Testlauf

Ein typischer Testlauf erzeugt nach dem erfolgreichen Ausführen von go.cmd diese Konsolenausgabe:

X:\epubMinFlow>go
EPUB-Build-Prozess gestartet ...

* Vorbereitung ...

style\page-template.xpgt
style\standard.css
        2 Datei(en) kopiert.
bilder\cover.jpg
bilder\ereader.png
bilder\grafik.svg
bilder\pizza.jpg
        4 Datei(en) kopiert.
fonts\Delicious-Roman.otf
fonts\Tallys_15.otf
        2 Datei(en) kopiert.

* XSLT-Prozess ...

Wrote X:\epubMinFlow\epub/META-INF/container.xml
Wrote X:\epubMinFlow\epub/OPS/content.opf
Wrote X:\epubMinFlow\epub/OPS/toc.ncx
Wrote X:\epubMinFlow\epub/OPS/html/buchcover.html
Wrote X:\epubMinFlow\epub/OPS/html/inhalt.html
Wrote X:\epubMinFlow\epub/OPS/html/kapitel1.html
Wrote X:\epubMinFlow\epub/OPS/html/kapitel2.html
Wrote X:\epubMinFlow\epub/OPS/html/kapitel3.html
Wrote X:\epubMinFlow\epub/OPS/html/kapitel4.html

* Kompression ...

  adding: mimetype (stored 0%)
  adding: META-INF/container.xml (deflated 32%)
  adding: OPS/bilder/cover.jpg (deflated 3%)
  adding: OPS/bilder/ereader.png (deflated 0%)
  adding: OPS/bilder/grafik.svg (deflated 63%)
  adding: OPS/bilder/pizza.jpg (deflated 0%)
  adding: OPS/content.opf (deflated 71%)
  adding: OPS/fonts/Delicious-Roman.otf (deflated 43%)
  adding: OPS/fonts/Tallys_15.otf (deflated 18%)
  adding: OPS/html/buchcover.html (deflated 39%)
  adding: OPS/html/inhalt.html (deflated 52%)
  adding: OPS/html/kapitel1.html (deflated 48%)
  adding: OPS/html/kapitel2.html (deflated 50%)
  adding: OPS/html/kapitel3.html (deflated 44%)
  adding: OPS/html/kapitel4.html (deflated 60%)
  adding: OPS/style/page-template.xpgt (deflated 79%)
  adding: OPS/style/standard.css (deflated 56%)
  adding: OPS/toc.ncx (deflated 73%)

... EPUB (buch.epub) wurde erzeugt.

* EPUB-Tests ...

Epubcheck Version 1.2

No errors or warnings detected

EpubPreflight Version 0.1.0

No errors or warnings detected

Das bei jedem Lauf neu erzeugte Ausgabeverzeichnis epub enthält die letztlich in buch.epub verpackte Dateistruktur:

– epub
       mimetype

       – META-INF
                  container.xml

       – OPS
                  content.opf
                  toc.ncx

                  + bilder
                  + fonts
                  + html
                  + style

Ergebnisse

Im Testbuch kommt in den Kapitel 1 bis 3 vorwiegend Blindtext zum Einsatz (vgl. Abbildungen 2 bis 5), während das vierte Kapitel die zusätzlichen Techniken in Aktion zeigt.

Testbuchansicht mit Adobe Digital Editions
Abb. 2: Testbuchansicht mit Adobe Digital Editions

Testbuchansicht mit SONY-Reader PRS-505
Abb. 3: Testbuchansicht mit SONY-Reader PRS-505

Testbuchansicht mit Stanza auf Apple iPhone
Abb. 4: Testbuchansicht mit Stanza auf Apple iPhone

Testbuchansicht mit iBooks auf Apple iPad
Abb. 5: Testbuchansicht mit iBooks auf Apple iPad

Hinweis: Die eingebundenen freien Schriftarten »Delicious-Roman.otf« und »Tallys_15.otf« stammen von Jos Buivenga (exljbris Font Foundry).

Fazit und Ausblick

Das vorliegende Projekt stellt den (funktionierenden) Prototyp zur Demonstration eines EPUB-Workflows dar. Dennoch lassen sich unter Verwendung der möglichen Strukturelemente bereits komplette E-Books erzeugen. Mehr Funktionalität lässt sich durch Anpassungen im XSLT-Stylesheet (epub.xsl) erzielen. Weitere Details zur gewählten Umsetzung liefert das Studium des Quellcodes.

Download

Die aktuelle Projektversion steht für eigene Tests zur Verfügung. Ihre Weiterverbreitung ist nur mit Quellenangabe erlaubt.

Weitere Informationen

Versionsstand: 1.5 (2011-08-19) | Letzte Aktualisierung dieses Dokuments: 2013-06-12

Logo-Quelle: IDPF (EPUB Logo Contest)

Publikationen mit Bezug auf dieses Projekt

  1. XML-Report von entwickler.com (April 2010)
  2. Newsletter Crossmediales Publizieren (Mai 2010)
  3. Artikel »Einfach publizieren und benutzen« im Entwickler Magazin 4.10 (Juni 2010)
  4. Vortrag »EPUB – Der neue Standard für E-Books« von Prof. Dr. M. Hedler (Oktober 2010)
  5. Eigener Vortrag »EPUB – Anatomie eines elektronischen Buchformates« (November 2010)
  6. Poster »XML + XSLT + X = EPUB« zum Tag der Forschung an der Hochschule Merseburg (November 2010)
  7. Erwähnung im mitp-Buch »E-Books mit ePUB« von Dr. Victor Wang (Januar 2011)
  8. tekom-Vortrag von Lena Brüggemann und Marc Hofherr (Oktober 2011)
  9. Studienarbeit »Dynamische Generierung von E-Book Inhalten unter Zuhilfenahme externer Datenquellen« im WinfWiki (Juli 2012)
  10. Wiki der AKEP-Kommission E-Books: Technische Workflows zur E-Book-Erstellung (Januar 2013)
  11. Vortrag »Produktion digitaler Bücher« von Gregor Fellenz (Januar 2013)

Kontakt zum Autor

E-Mail · Web