Calibres Daten

Calibre ist derzeit nicht nur die einzige plattform-übergreifende Bibliotheksanwendung, sie kennt auch alle gängigen Buchformate, und ist zudem auch noch kostenlos. Hat man also einmal damit angefangen, digitale Bücher zu lesen, dann ist es schwer daran vorbei zu kommen. Sicher, man kann die Bücher auch einfach in einer Verzeichnisstruktur speichern, oder sich einfach nicht drum kümmern und es dem Händler überlassen, Sicherungskopien aufzubewahren.

Werden es aber allmählich mehr Titel, dann verwandelt sich die vorher so einfache Verzeichnisstruktur schnell in eine Datenbank Marke Eigenbau. Und die größeren Handelsplattformen für Bücher bieten einem oft den lebenslangen Zugriff auf gekaufte Bücher an, kauft man aber nicht nur bei einem Händler wird die Orientierung schnell schwierig. Zudem dieser Terminus lebenslang: wessen Leben ist genau gemeint? Das der Plattform und des dahinter stehenden Unternehmens? Wirtschaft und Technologie sind erfahrungsgemäß schnelllebig.

Kurz und gut: wenn man die Übersicht über seine elektronischen Bücher behalten oder sich nicht ganz den jeweiligen Anbietern ausliefern möchte, dann sollte man sich Calibre einmal anschauen. Es bietet neben einer grafischen Oberfläche zur Verwaltung der Bibliothek auch eine Leseanwendung und Konvertierungsmöglichkeiten zwischen den verschiedenen Buchformaten. Natürlich kann man auch die Metadaten der einzelnen Titel verwalten und sie gegebenenfalls auch mit Daten der verschiedenen Plattformen automatisch komplettieren lassen.

Aber die Handhabung von Calibre steht hier nicht im Vordergrund, sondern seine Daten. Wie steht es mit denen, sind die zugänglich? Was passiert, wenn ich mal eine andere Anwendung nutzen will? Kann ich die Daten dann mitnehmen, oder muss ich alles wieder neu eingeben? Die Probleme bei der Verwaltung der Musiksammlung haben mich da vorsichtig werden lassen. Wie oft ich da im Laufe der Zeit schon Cover für Alben gesucht und Daten eingegeben habe – das möchte ich nicht wiederholen.

Aber wie noch gezeigt wird, ich kann da beruhigt sein. Es ist nicht nur, dass Calibre selbst quelloffen ist, sondern auch die Metadaten der Bücher sind leicht zugänglich.

Calibre Verzeichnisstruktur, erste Ebene

Calibre Verzeichnisstruktur, erste Ebene

Calibre legt alle Daten in einem Verzeichnis ab, die Buchdateien und deren Metadaten. Im Bibliotheksverzeichnis selbst findet man die Datei metadata.db (2). Wie der Name schon andeuten mag, ist dies die Datenbank, die alle Metadaten der Bibliothek enthält. Weiter findet man Unterverzeichnisse, pro Autor eines (1).

Details eines Buchtitels

Details eines Buchtitels

Autorenverzeichnisse enthalten wiederum Unterverzeichnisse für die zugeordneten Bücher (1). Der Name dieser Buchverzeichnisse setzt sich aus dem Buchtitel und der Calibre-ID zusammen, einer fortlaufend vergebenen Nummer. In einem Buchverzeichnis finden sich:

  • das Titelbild, cover.jpg (2)
  • Metadaten zum Buch, metadata.opf (3)
  • eine oder mehrere Buchdateien (4), im Beispiel eine MOBI– und eine PDF-Ausgabe

Die einzig erklärenswerte Datei ist hier metadata.opf. Die OPF-Endung deutet and, dass es sich um eine XML-Datei handelt, die dem OPF-Schema der IDPF folgt. Wer sich schon einmal mit dem EPUB-Standard für digitale Bücher beschäftigt hat, dem wird das etwas sagen. Für alle anderen sei hier bemerkt, dass eine OPF-Datei normalerweise die Metadaten eines Buches im EPUB-Format enthält, wie man sie zum Beispiel im iBookstore von Apple kaufen kann. Die Datei ist als solche für den Leser nicht sichtbar, aber sie ist da.

Der Inhalt der OPF-Datei für das Buch aus obigem Beispiel sieht (leicht gekürzt) so aus:

<?xml version='1.0' encoding='utf-8'?>
  <package xmlns="http://www.idpf.org/2007/opf" unique-identifier="uuid_id">
    <metadata xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:opf="http://www.idpf.org/2007/opf">
      <dc:identifier opf:scheme="calibre" id="calibre_id">196</dc:identifier>
      <dc:identifier opf:scheme="uuid" id="uuid_id">d937f31a-5b77-4c39-8b3f-b64002223be3</dc:identifier>
      <dc:title>Programming in Scala. Second Edition</dc:title>
      <dc:creator opf:file-as="Odersky, Martin &amp; Spoon, Lex &amp; Venners, Bill" opf:role="aut">Martin Odersky</dc:creator>
      <dc:creator opf:file-as="Odersky, Martin &amp; Spoon, Lex &amp; Venners, Bill" opf:role="aut">Lex Spoon</dc:creator>
      <dc:creator opf:file-as="Odersky, Martin &amp; Spoon, Lex &amp; Venners, Bill" opf:role="aut">Bill Venners</dc:creator>
      <dc:contributor opf:file-as="calibre" opf:role="bkp">calibre (0.8.6) [http://calibre-ebook.com]</dc:contributor>
      <dc:date>2011-03-10T23:00:00+00:00</dc:date>
      <dc:description>&lt;p class="description"&gt;SUMMARY:&lt;br&gt;Scala is an object-oriented programming language for the Java Virtual Machine. In addition ... that can make you a better, more productive developer.&lt;/p&gt;</dc:description>
      <dc:publisher>Artima Inc</dc:publisher>
      <dc:identifier opf:scheme="ISBN">9780981531649</dc:identifier>
      <dc:language>en</dc:language>
      <dc:subject>Programming Languages</dc:subject>
      <dc:subject>Scala</dc:subject>
      <meta content="0" name="calibre:rating"/>
      <meta content="2011-03-11T14:06:03+00:00" name="calibre:timestamp"/>
      <meta content="Programming in Scala. Second Edition" name="calibre:title_sort"/>
    </metadata>
    <guide>
      <reference href="cover.jpg" type="cover" title="Cover"/>
    </guide>
 </package>

Wer kein XML mag: man kann die Daten auch über Datenbankabfragen ermitteln. Man schaut dafür einfach in die schon erwähnte Datei metadata.db. Dabei handelt es sich um eine SQL-Datenbank, die mit sqlite3 bedient werden kann. Sqllite ist auf allen gängigen Plattformen erhältlich, das sollte also keine Schwierigkeiten machen. Um sich in der Datenbank einmal umzusehen, genügt es einfach die Shell von sqllte3 aufzurufen:

sqlite3 metadata.db 

Das Komando .tables zeigt alle vorhandenen Tabellen. Die Funktionen der meisten sind anhand der Namen leicht zu erkennen.

Calibres Tabellen

Calibres Tabellen

Die wichtigsten Tabellen, um die Metadaten auszulesen, sind:

  • authors: enthält eigentlich nur den Namen des Autors, in normaler Form und in Sortierordnung
  • books: Titel, Zeitstempel, ISBN, Pfad zu den Buchdateien usw.
  • comments: enthält nur die Beschreibung, die Kommentare zum Buch

Die Verbindung zwischen Autoren (authors) und ihren Büchern (books) wird über eine weitere Tabelle, mit dem sprechenden Namen books_authors_link, hergestellt. Für jedes Buch gibt es dort einen Eintrag mit der Buch-ID und der Autoren-ID. Die Buchbeschreibung in comments wird einfach durch die Buch-ID (book) identifiziert.

Möchte man es noch genauer, dann kann man über weitere Verbindungstabellen noch die zugehörigen Verlage (books_publishers_link → publishers), Bewertungen (books_ratings_link → ratings) und Schlagworte (books_tags_link → tags) auslesen.

Zwei Arten die Metadaten auszulesen, dazu die Ablage der verschiedenen Formate in einer leicht zu durchschauenden Verzeichnisstruktur, das spricht für Investitionssicherheit beim Einsatz von Calibre.