15 01 | 2012

Structure d'un document EPUB 2

Written by Tanguy

Classified in : Homepage, Debian-FR, Libre, April, À retenir

Le logo EPUB : un E vert, avec en légende le mot ePUB

J'ai détaillé dans un autre billet l'intérêt du format EPUB. Comme on me pose souvent des questions sur la nature technique de ce format, et que je m'en pose moi-même de temps en temps, voici quelques explications concernant la version 2 de cette norme. Je n'ai pas encore eu le temps ni l'occasion d'étudier le format EPUB 3 pour le moment.

Objectif de conception

Le format EPUB a été conçu pour les publications électroniques, en utilisant autant que possible des technologies existantes :

  • les textes utilisent le format XHTML 1.1 ;
  • la table de navigation utilise le format NCX défini précédemment pour les livres numériques parlants ;
  • la description du livre avec ses méta-données utilise un format spécifique, OPF, qui intègre la sémantique Dublin Core ;
  • le point d'entrée utilise un format XML ultra-simple qui provient visiblement d'OpenDocument, quoiqu'il ne soit pas mentionné dans cette dernière norme ;
  • le tout est empaqueté dans un conteneur ZIP, une idée récupérée d'OpenDocument, qui la tient vraisemblablement de StarOffice et de Java.

Cette volonté de réutilisation comporte quelques inconvénients, parmi lesquels un certain manque d'homogénéité et un recoupement partiel entre les formats NCX et OPF qui implique la duplication de certaines informations. Bref, c'est à mon avis un peu plus compliqué que si ça avait été conçu de zéro, mais on ne peut pas dire que ça réinvente la roue, bien au contraire.

Le format EPUB est donc défini par l'International Digital Publishing Forum (IDPF), sous le forme de trois volets :

  • Open Container Format, qui définit ce qu'on appellerait naturellement la structure d'empaquetage ;
  • Open Packaging format, qui définit les formats de structuration qui font qu'un livre n'est pas seulement une série de documents HTML en vrac ;
  • Open Publishing Structure, qui définit les formats internes des fichiers qui constituent le contenu d'un livre, en se référant aux formats XHTML et CSS, pour l'essentiel.

Conteneur ZIP

Une publication électronique étant pour des raisons pratiques constituée de plusieurs fichiers, tous ces fichiers sont empaquetés dans un conteneur ZIP, avec une structure qui ressemble à ceci :

  • mimetype
  • META-INF/
    • container.xml
  • OEBPS/
    • content.opf
    • toc.ncx
    • cover.xhtml
    • cover.jpg
    • chap1.xhtml
    • chap2.xhtml

Pour pouvoir identifier facilement un fichier EPUB avec un outil comme file, un fichier mimetype contenant la chaîne « application/epub+zip » est placé en première position, non compressé afin que cette chaîne apparaisse en clair à une position fixe dans le document empaqueté.

% file formation-debian.epub 
formation-debian.epub: EPUB ebook data
% file -i formation-debian.epub 
formation-debian.epub: application/epub+zip; charset=binary

Cette structure est définie dans le premier volet de la norme EPUB, qui s'intitule Open Container Format (OCF).

Point d'entrée META-INF/container.xml

Le fichier META-INF/container.xml sert de point d'entrée du document, en indiquant le nom du fichier de description du livre OPF :

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

La nécessité d'un tel fichier n'est pas évidente ; la norme OCF mentionne seulement rapidement la possibilité d'inclure dans un même conteneur d'autres représentations du document, par exemple une version PDF, qui serait alors indiqué comme second rootfile possible.

Description du document OEBPS/content.opf

Ce fichier est le fichier principal qui définit un document EPUB. Il indique ses méta-données, la liste des fichiers qui le constitue, ainsi que leur ordre d'affichage, désigné par le nom imagé de colonne vertébrale. Il indique également l'emplacement d'un troisième fichier, la table des matières.

Ce fichier est traditionnellement nommé content.opf et placé, ainsi que tous les fichiers qui constituent le document, dans un répertoire OEBPS/, mais ce n'est qu'une convention : il est possible de le nommer autrement, pourvu qu'il soit correctement référencé dans le point d'entrée.

<?xml version="1.0" encoding="utf-8"?>
<package version="2.0" xmlns="http://www.idpf.org/2007/opf" unique-identifier="BookId">
    <metadata xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:opf="http://www.idpf.org/2007/opf">
        <dc:title>Formation Debian GNU/Linux</dc:title>
        …
    </metadata>
    <manifest>
        <item id="ncxtoc" href="toc.ncx" media-type="application/x-dtbncx+xml"/>
        <item id="stylesheet" href="style.css" media-type="text/css"/>
        <item id="preface" href="preface.xhtml" media-type="application/xhtml+xml"/>
        <item id="chap1" href="chap1.xhtml" media-type="application/xhtml+xml"/>
        …
    </manifest>
    <spine toc="ncxtoc">
        <itemref idref="preface"/>
        <itemref idref="chap1"/>
        …
    </spine>
</package>

Le format de ce fichier est défini dans le second volet de la norme EPUB, qui s'intitule Open Packaging Format.

Table des matières OEBPS/toc.ncx

La table des matières ou navigation control file (NCX) complète le fichier de description : alors que ce dernier indiquait l'ordre de lecture des fichiers composant le document, celle-ci fournit une liste hiérarchique des chapitres ou sections du document.

La différence est subtile : l'ordre de lecture est utilisé pour mettre bout à bout les fichiers lorsque l'utilisateur tourne les pages virtuelles, alors que la table des matières hiérarchique est utilisée lorsqu'il appelle le sommaire. Pour établir une comparaison, la colonne vertébrale du document est semblable à la reliure qui ordonne les pages d'un livre en papier de bois d'arbre, alors que la table des matières est semblable aux quelques pages qui donnent sa… table des matières. :-)

Le format de table des matières ayant été repris du format de livres parlants DAISY, il comporte quelques éléments qui sont redondants avec le fichier de description, notamment le titre du livre.

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE ncx PUBLIC "-//NISO//DTD ncx 2005-1//EN" "http://www.daisy.org/z3986/2005/ncx-2005-1.dtd">
<ncx version="2005-1" xml:lang="en" xmlns="http://www.daisy.org/z3986/2005/ncx/">
    <head>
        <meta name="dtb:uid" content="…"/>
        …
    </head>
    <docTitle>
        <text>Formation Debian GNU/Linux</text>
    </docTitle>
    <navMap>
        <navPoint id="preface" playOrder="1">
            <navLabel><text>Chapitre 1</text></navLabel>
            <content src="preface.xhtml"/>
        </navPoint>
        <navPoint id="chap01" playOrder="1">
            <navLabel><text>Chapitre 1</text></navLabel>
            <content src="chap1.xhtml"/>
        </navPoint>
        …
    </navMap>

Contenu

Après tous ces formats qui s'apparentent à des données annexes de structure ou d'information, le contenu proprement dit d'un document EPUB prend la forme d'une série de documents XHTML, qui peuvent faire références à des feuilles de style ou à des images.

Le troisième volet de la norme EPUB, Open Publication Structure, précise les fonctionnalités des formats XHTML et CSS qui peuvent être utilisées, et propose le format alternatif DTBook qui peut être utilisé à la place de XHTML.

Méfiez-vous des contrefaçons !

EPUB est le format standard pour les livres numériques, mais bien qu'il soit le format le plus répandu, certains éditeurs ou libraires préfèrent utiliser des formats propriétaires. Amazon est notoirement connu pour refuser la norme, avec un format réellement spécifique à leurs liseuses, mais d'autres acteurs utilisent des formats inspirés d'EPUB, ce qui est plus pernicieux. Citons notamment les EPUB verrouillés et les « KEPUB » de Kobo et de la Fnac. Méfiance donc : exigez du véritable EPUB !

5 comments

sunday 15 january 2012 à 22:37 Exirel said : #1

Joli billet ! Il reprend assez clairement la norme Epub 2.x.

C'est plutôt agréable de lire, enfin, quelqu'un qui parle du chemin du fichier OPF comme "une convention"... ayant déjà vu du code qui fixe ce chemin en dur pour chercher le fichier (brrr...).

Je me permets de signaler que j'ai publié (la semaine dernière), une bibliothèque python (sous licence LGPL) pour lire des fichiers epub (heh, d'où ma connaissance de la norme).

On peut la trouver sous le nom "epub" sur Pypi.

Bref, merci pour le billet, très clair, et surtout, très juste.

monday 16 january 2012 à 08:51 benoit_huot said : #2

Citons également l'existence d'outils gratuits permettant de générer modifier des epub.
Au niveau des logiciels, Calibre permet, outre la gestion de sa bibliothèque numérique, de convertir ses fichiers en ePub.
Sigil pour sa part est un éditeur Wysiwyg qui permet de créer ou d'éditer des ePub existants.
Sous Firefox, vous pouvez installer le plug-in Grab M'y Books qui vous permet de convertir/éditer/regrouper en un seul fichier ePub les pages web que vous sélectionnez. Il permet aussi de lire les ePub sous Firefox et de convertir ses flux Rss en ePub (mais je n'ai pas testé cette option).
Enfin, le récent site dotepub permet également de convertir des sites en ePub mais je ne l'ai pas encore testé.

En parallèle, le site jedisaber.com propose un tutoriel (en anglais) pour réaliser soi-même son ePub.

tuesday 14 february 2012 à 12:14 nbek said : #3

Bonjour,

Désireux de me faire éditer par kobo, ils me demandent si mes métadonnées sont en format ONIX ou Excel. Ayant créé mon epub à partir de word puis avec le logiciel atlantis et calibre, je pense que mes metadata sont en ONIX. Pouvez-vous me confirmer cela?

Merci d'avance.

thursday 16 february 2012 à 20:22 Tanguy said : #4

@nbek :
Bonsoir. Je ne peux rien confirmer du tout, d'autant plus que je ne m'intéresse pas à ce genre de conversion. Personnellement, si je devais publier un livre, je le rédigerais en DocBook comme je le fais déjà pour la Formation Debian, et je le convertirais en EPUB. Pour ce qui est de l'édition, je m'adresserais à un éditeur capable de prendre directement en charge le DocBook ou l'EPUB, et d'ajouter lui-même des méta-données si celles que j'inclus moi-même ne conviennent pas.

sunday 19 february 2012 à 16:22 nbek said : #5

Merci pour la réponse. J'ai finalement opté pour la formule Excel metadata et je vais voir ce que cela donne. Ayant déjà créé mon fichier epub, je cherchais juste à augmenter sa diffusion via un éditeur en ligne d'où ma démarche.
Encore merci en tout cas d'essayer de me dépanner.
Bonne journée à vous.

Write a comment

What is the last letter of the word qgmw? : 

Archives