Blog // Exirel.me

Introduction technique au format Epub

Par Florian Strzelecki - 22:10 - 22.04.2013

Tags : Documentation, Livre numérique, epub, Tutoriel, Vulgarisation

Il n'y a pas très longtemps sur Twitter, un petit débat autour du livre numérique et le jeu de rôle s'est tenu entre @stephanegallay, d'autres twittos, et moi-même. Il en est ressorti ceci : et si j'écrivais un article de vulgarisation sur la fabrication d'epub ?

Bon, comme le sujet mérite bien plus qu'un seul article, je vais donc en faire plusieurs - dont voici le premier - pour parler de ce format, et sur comment fabriquer un fichier epub dans les grandes lignes. Je vais le faire en deux grandes parties, la première très technique, et la seconde sera orienté vers un public curieux mais sans avoir de solides compétences techniques.

Et vous verrez que le format epub n'est pas si compliqué que ça, et qu'on peut obtenir un résultat tout à fait potable avec quelques bons outils (libres et gratuits) et un brin de méthode. Le plus dur dans un livre numérique, ce n'est pas le format : c'est d'écrire un bon livre !

Je ne parlerai cependant pas des DRM et de toutes ces saloperies qui viennent bousiller tout espoir d'avoir un format ouvert et interopérable entre les mains des utilisateurs.

Le .epub est un .zip

Première chose que vous devez savoir : un fichier epub est une archive zip. Ce qui veut dire qu'en remplaçant l'extension ".epub" par ".zip", même Windows est capable d'en extraire l'ensemble du contenu. D'ailleurs, je vous invite à le faire, en allant, par exemple, télécharger ce livre gratuit publié par la revue Angle Mort : Véelles, par Adam-Troy Castro. Vous pouvez aussi le lire d'ailleurs, j'ai beaucoup aimé.

Vous devriez vous retrouver (après extraction) avec cette liste de fichiers et répertoires :

Les fichiers obligatoires : mimetype & META-INF/container.xml

Trois fichiers sont obligatoires pour que votre fichier epub soit considérer comme tel :

Avec un éditeur de texte (genre le bloc note sous windows saura faire ça) ouvrez le fichier mimetype qui doit contenir ceci :

application/epub+zip

C'est la première condition pour avoir un fichier epub valide : le premier fichier de l'archive zip doit être mimetype avec ce contenu là.

Ensuite, ouvrez le fichier META-INF/container.xml, qui doit contenir ceci dans notre exemple :

<?xml version="1.0" encoding="UTF-8"?>
<container xmlns="urn:oasis:names:tc:opendocument:xmlns:container" version="1.0">
  <rootfiles>
    <rootfile media-type="application/oebps-package+xml"
              full-path="content.opf"/>
  </rootfiles>
</container>

La seule ligne importante ici est celle qui donne le chemin full-path vers le fichier "content.opf". Vous noterez donc au passage que ce fichier peut s'appeler "toto.opf", et être placé dans "Truc/Autre/Machin/Meta/So/Meta/content.opf" que ça ne changera pas grand chose à l'affaire.

En réalité, ça pourrait changer quelque chose, parce qu'à cause d'une vieille histoire de standard "de facto", certains lecteurs d'epub ont un peu de mal avec des nommages "inhabituels".

Le fichier META-INF/container.xml est décrit dans le document sur "OCF" (qui est un document word, je n'ai toujours pas bien compris pourquoi...).

Bon, mais revenons à notre epub : le fichier "content.opf" est à la racine du fichier epub, et il s'agit en réalité d'un simple fichier XML. Et oui, rien de bien compliqué n'est-ce pas ? C'est juste du XML tout bête, avec une norme qui va avec, mais dans l'idée, c'est plutôt simple.

Ce fichier sert à donner trois choses importantes :

Parlons de ces métadonnées, vous allez voir, c'est plutôt cool.

Le fichier OPF : les métadonnées du livre numérique

Le fichier OPF (pour Open Package Format) permet de décrire le contenu de votre livre numérique : ses textes, ses images, et tout le reste (les tables des matières et les index font partis du contenu du livre). C'est un fichier XML avec une norme dédiée.

Structure XML

On rentre dans le vif du sujet. Le document root est l'élément package :

package
package@unique-identifier

Vient ensuite l'élément (unique) metadata avec ses éléments fils dc:* :

package/metadata
package/metadata/dc:*

Puis le manifest qui liste l'ensemble des fichiers du livre numérique :

package/manifest
package/manifest/item
package/manifest/item@id
package/manifest/item@href

Et pour finir le spine qui sert de "table des matières" :

package/spine
package/spine@toc
package/spine/itemref
package/spine/itemref@idref

Identifiant unique

L'identifiant unique d'un livre numérique peut être une URL, un ISBN, un UUID, ou tout ce qui permet d'avoir un "identifiant unique". Personnellement pour mes publications personnelles, j'utilise un UUID généré aléatoirement, et parfois une URL. Si vous pensez publier un livre avec un ISBN, ce dernier est un excellent identifiant unique.

Vous pouvez donc définir plusieurs identifiants pour votre livre, mais un seul sera considéré comme l'identifiant de référence. Il sera indiqué par deux éléments :

<package unique-identifier="RefBookUID" ...>
  <manifest>
    <dc:identifier opf:scheme="isbn" id="RefBookUID">978-2-36400-012-4</dc:identifier>
    ...
  </manifest>
  ...
</package>

D'un côté sa référence dans l'élément package, et de l'autre sa valeur dans un élément du manifest.

Méta-données (metadata)

Besoin d'un titre ? D'un numéro ISBN ? D'un auteur ? Vous êtes au bon endroit ! Toujours avec notre livre "Véelle", voici les métadonnées que nous retrouvons :

Vous pouvez constater que le nom des balises XML est assez clair : "dc:title", "dc:identifier", "dc:creator". Il en existe toute une liste, mais je vais me contenter ici de ce survol. Vous comprenez le principe, et je ferai sans doute un autre article pour parler de toutes ces métadonnées, et de comment les renseigner et les utiliser proprement (et vous verrez que dans la pratique, ce n'est pas si simple que ça).

Le contenu du livre (manifest)

Première remarque : l'élément manifest référence le contenu du livre et pas du fichier epub. La différence est de taille, puisque dans le fichier epub se trouvent, notamment, le fichier mimetype, le fichier OPF, mais aussi d'autres fichiers et répertoires qui n'ont pas grand chose à voir avec le "vrai contenu" du livre : ses images, ses textes, sa mise en forme, etc.

D'ailleurs, les chemins des fichiers référencés sont relatifs au fichier OPF.

Exemple : un fichier situé dans book/text/chapitre.xhtml, avec un fichier OPF dans book/content.opf, aura pour chemin de référence dans ce fichier OPF le chemin suivant : text/chapitre.xhtml. C'est à savoir !

Un élément

<item id="chap1" href="text/chap1.xhtml" media-type="application/xhtml+xml" />

Un élément du manifest est donc un élément item avec les attributs suivants :

Chacun de ces éléments est obligatoire et nécessaire. Il en existe d'autres que nous n'aborderons pas ici.

Vous devriez comprendre aisément à quoi peuvent servir ces différents éléments. Pour ce qui nous intéresse, voici une liste de type mime utile :

Là encore, il y en a d'autres, mais ceux là sont les plus fréquents.

Table des matières (spine)

La table des matières simplifiées est présentée par l'élément spine, qui référence une table des matières plus complexe et complète via son attribut toc : le fichier NCX. Je ne parlerai pas ici du fichier NCX, c'est un sujet complet à lui tout seul.

Le spine doit contenir, dans l'ordre de lecture, les fichiers de texte du livre - c'est à dire les fichiers xHtml. Vous ne le saviez pas ? Le texte de l'epub est formaté en xHtml (avec quelques restrictions supplémentaires). Cela permet de garantir aux liseuses que le contenu est du XML avec une sémantique HTML (certes limitée).

Un spine peut ressembler à ceci :

<spine toc="id_ncx">
  <itemref idref="intro"/>
  <itemref idref="chap1"/>
  <itemref idref="chap2"/>
  <itemref idref="credit"/>
</spine>

Et c'est à peu près tout pour la base à savoir. Chaque attribut itemref@idref est un identifiant d'un item du manifest. Plutôt simple !

Les points à retenir de cette introduction

Ceci n'était qu'une introduction au format. Rappelez-vous les points importants :

Le fichier OPF est un document XML avec :

Il me reste à vous parler plus en détails des métadonnées, de la table des matières, et enfin, du contenu lui-même du fichier epub (du xHtml avec des règles supplémentaires).

Mais ce sera pour d'autres articles.