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
monday 16 january 2012 à 08:51 benoit_huot said : #2
tuesday 14 february 2012 à 12:14 nbek said : #3
thursday 16 february 2012 à 20:22 Tanguy said : #4
sunday 19 february 2012 à 16:22 nbek said : #5