Le package
C’est une partie très codifiée à laquelle il vaut mieux ne rien changer sauf si l’on veut utiliser certaines fonctions propres à des lecteurs EPUB
, comme iBooks d’Apple par exemple.
<?xml version="1.0" encoding="UTF-8"?>
<package xmlns="http://www.idpf.org/2007/opf" version="3.0" unique-identifier="PrimaryID">
...
</package>
Les lignes de déclaration de l'opf sans metadatas
Dans ce cas-là, il faut rajouter quelques précisions (vous verrez dans quels cas dans le tableau des metadatas ci-dessous).
Au passage, j’ai rajouté également xml:lang
, un paramètre qui indique que nous sommes dans un EPUB
dont la langue est le français. Vous aurez aussi noté que la version de l’EPUB
est obligatoirement indiquée.
<!--?xml version="1.0" encoding="UTF-8"?-->
<package xmlns="http://www.idpf.org/2007/opf" version="3.0" xml:lang="fr" unique-identifier="pub-id" prefix="rendition: http://www.idpf.org/vocab/rendition/# ibooks: http://vocabulary.itunes.apple.com/rdf/ibooks/vocabulary-extensions-1.0/" xmlns:epub="http://www.idpf.org/2007/ops" xmlns:ibooks="http://apple.com/ibooks/html-extensions">
...
</package>
Les lignes de déclaration de l'opf avec metadatas spécifiques à iBooks
Les métadatas (ou métadonnées en bon français) permettent de bien référencer votre livre, et à ce titre il est très utile de se pencher sur leur cas. Le référencement correct de votre livre aidera vos lecteurs et vos lectrices à le retrouver dans la masse titanesque des ouvrages disponibles.
Hélas, ces métadonnées sont inscrites dans une syntaxe un peu hermétique qui réjouira plus ceux d’entre vous qui ont l’habitude des codes informatiques que ceux qui aiment la littérature. C’est assez abscons, il faut bien le reconnaître. J’ai donc décrypté pour vous la norme EPUB3
, et voici la substantifique moelle de ce que j’ai pu en tirer.
Encadrées par les balises metadata
, se trouvent chacun des paramètres identifiant non seulement les données essentielles de votre livre, mais aussi certaines autres données spécifiques pour des lecteurs d’EPUB
particuliers (dans le cas ci-dessous, pour iBooks d’Apple).
Voici comment Scrivener liste ses métadatas :
<metadata xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:opf="http://www.idpf.org/2007/opf">
<dc:title>Fée du Logis</dc:title>
<dc:identifier id="PrimaryID">urn:uuid:E9B7CBB8-1D23-40C5-8053-E84F87026351</dc:identifier>
<dc:language>en</dc:language>
<meta property="dcterms:modified">2018-03-20T20:00:18Z</meta>
<dc:creator id="author">Germain HUC</dc:creator>
<meta refines="#author" property="role">aut</meta>
<meta refines="#author" property="file-as">HUC, Germain</meta>
</metadata>
les metadatas de Scrivener
Pour comprendre la syntaxe des métadonnées, en voici le schéma général.
D’abord, comme ce sont des balises, elles sont forcément enchâssées entre des signes <>
.
Puis vient le sigle dc
, pour Dublin Core, et l’élément de la norme Dublin Core. Ensuite, la valeur de la métadonnée, puis on referme la balise comme dans le langage HTML
.
Vous trouverez plus de détails sur ce site, ou celui-ci, ou encore sur celui de la BnF.
Chaque balise peut être précisée par des métadonnées de « raffinement », indiquées dans des balises <meta>
.
Dans ce tableau (que vous pouvez manipuler à loisir et dans lequel vous pouvez même faire des recherches…), j’ai récapitulé toutes les métadonnées de ma connaissance, pour vous indiquer comment les utiliser. Vous pouvez vous référer à l’exemple de code ci-dessus pour vous ce que cela donne en situation. Vous trouverez la syntaxe correcte et les quelques subtilités.
N’hésitez pas à m’indiquer dans les commentaires si vous trouvez des erreurs, des approximations ou des ajouts à faire. Je ferai bien volontiers les corrections et ajouts qui s’imposent.
Type | Metadata | Signification | Obligatoire ou Optionnelle | Valeurs possibles | Note |
Identification du livre : Dublin Core (dc) | dc:title | Le titre de l'ouvrage | Obligatoire | Votre imaginaire... | |
Identification du livre : Dublin Core (dc) | dc:creator | Le ou les noms des créateurs (auteur, illustrateur) | Optionnel | Votre imaginaire... | |
Identification du livre : Dublin Core (dc) | dc:identifier | Un identifiant pour l'ouvrage, comme l'ISBN par exemple | Obligatoire | Votre imaginaire... | |
Identification du livre : Dublin Core (dc) | dc:publisher | L'éditeur de l'ouvrage | Optionnel | Votre imaginaire... | |
Identification du livre : Dublin Core (dc) | dc:language | La langue principale de l'ouvrage | Obligatoire | Toutes les langues... | |
Identification du livre : Dublin Core (dc) | dc:contributor | Le ou les noms des contributeurs de l'ouvrage | Optionnel | Votre imaginaire... | |
Identification du livre : Dublin Core (dc) | dc:date | La date de publication de l'ePub | Optionnel | Une date quelconque au format AAAA-MM-JJ | |
Identification du livre : Dublin Core (dc) | dc:source | La ou les sources de l'ouvrage (si c'est un recueil de nouvelles déjà publiées par exemple) | Optionnel | Votre imaginaire... | |
Précisions sur une balise | refines | Donne des indications sur une metadata précédente | Optionnel | aut = auteur
bkd = book designer
bkp = book producer
edt = editor
cov = cover creator
ill = illustrateur
pbl = publisher
trl = translator | |
Rendu dans iBooks d'Apple | ibooks:binding | Indique si dans un livre à mise en page fixe la "pliure" du livre entre deux pages est visible | Optionnel | true, false | dans la balise package doit apparaître une ligne de définition. |
Rendu dans iBooks d'Apple | ibooks:ipad-orientation-lock | Indique si le livre est bloqué dans une orientation sur un iPad | Optionnel | portrait-only, landscape-only | dans la balise package doit apparaître une ligne de définition. |
Rendu dans iBooks d'Apple | ibooks:specified-fonts | Indique à iBooks qu'il doit utiliser les fontes intégrées dans l'ePub | Obligatoire si fontes intégrées dans l'ePub pour iBooks | true, false | dans la balise package doit apparaître une ligne de définition. |
Rendu dans iBooks d'Apple | ibooks:version | Indique la version d'iBooks nécessaire pour lire l'ePub | Optionnel | Une version d'iBooks | dans la balise package doit apparaître une ligne de définition. |
Rendu général de l'ePub | rendition:flow | Indique si le rendu en flux doit être de type "site internet" ou de type "page de livre" | Optionnel | paginated, scrolled-continuous, scrolled-doc, auto | |
Rendu général de l'ePub | rendition:layout | Indique si le livre est de type mise en page fixe ou de flux | Optionnel | pre-paginated, reflowable | |
Rendu général de l'ePub | rendition:orientation | Indique si le livre peut être lu en paysage, portrait, ou les deux | Optionnel | landscape, portrait, auto (dans ce cas le texte sera adapté en fonction de l'orientation du système de lecture) | |
Rendu général de l'ePub | rendition:spread | Indique si en mode paysage deux pages sont montrées ou une seule. | Optionnel | auto, both (dans ces cas-là, deux pages)
none (dans ce cas, une seule page même en paysage) | |
Le « manifeste »
C’est la partie du fichier qui recense toutes les ressources utilisées dans le livre. De la plus petite image jusqu’aux fontes de caractères spécifiques, en passant par chaque chapitre du livre, les éventuelles vidéos ou les bandes-son, les scripts d’interactivité qui permettront aux lecteurs de contrôler des animations, les scripts CSS
des feuilles de style qui vont vous permettre de définir la mise en page… tout, tout, absolument tout le contenu du livre doit être déclaré dans ce manifeste, et selon une syntaxe là encore très précise.
On commence par des balises <manifest>
qui encadrent une liste de balises <item>
. Chaque item est une ressource présente dans le livre (un fichier si vous préférez) dont on indique une identité (id
), le chemin dans l’arborescence (href
), et surtout le type mime
, un code qui explicite sa nature (et non pas à cause du Mime Marceau).
Les types mime et leur syntaxe sont d’ailleurs les plus compliqués à trouver. Je vous en liste les principaux dans un tableau un peu plus bas.
Voici comment Scrivener vous aura organisé cette partie.
<manifest>
<item id="ncx" href="toc.ncx" media-type="application/x-dtbncx+xml" fallback="contents"></item>
<item id="contents" properties="nav" href="contents.xhtml" media-type="application/xhtml+xml"></item>
<item id="body" href="body.xhtml" media-type="application/xhtml+xml"></item>
<item id="style" href="css/stylesheet.css" media-type="text/css"></item>
</manifest>
Le manifeste créé par Scrivener
Et quant à moi, voici comment j’ai l’habitude d’organiser les choses : en regroupant les types de fichiers.
<manifest>
<!-- contenu -->
<item id="ncx" href="toc.ncx" media-type="application/x-dtbncx+xml" fallback="contents"></item>
<item id="contents" properties="nav" href="contents.xhtml" media-type="application/xhtml+xml"></item>
<item id="body" href="body.xhtml" media-type="application/xhtml+xml"></item>
<!-- styles -->
<item id="style" href="css/stylesheet.css" media-type="text/css"></item>
<!-- fontes -->
<!-- images -->
</manifest>
Mon organisation du manifeste
Vous voyez que j’ai enrichi mon livre avec des fontes de caractères précises, des feuilles de style, des images, le tout regroupé dans des dossiers spécifiques marqués par des balises de commentaire (qui ne sont donc pas codées). Il est ainsi plus facile de s’y retrouver par la suite, car si vous oubliez de déclarer ici un seul élément présent dans le livre, celui-ci deviendra illisible par les lecteurs EPUB
…
Mon conseil : à chaque fois que vous ajoutez un fichier dans votre EPUB
, insérez immédiatement la référence dans le manifeste du fichier OPF
.
Vous êtes libre de donner le nom de votre choix aux items (sachant que le meilleur nom est celui qui vous permettra de savoir très rapidement à quel fichier précisément vous avez à faire), mais le chemin doit suivre les mêmes règles qu’un chemin de fichier classique sur votre ordinateur ou sur un site internet.
Par exemple mon fichier de fonte « Trajan Pro » se situe dans le dossier styles et son chemin sera donc : styles/TrajanPro-Regular.otf
.
Enfin, petite subtilité qui m’a posé de nombreux problèmes, les « properties
» ou propriétés de chaque élément. Il est impératif d’indiquer certaines particularités de vos fichiers. Si l’un de vos chapitres comporte une partie interactive (disons par exemple des boutons permettant de masquer ou d’afficher du texte caché), vous devrez ajouter sur la ligne de déclaration du manifeste la propriété « scripted
». Si un fichier de contenu contient la table des matières, vous devez indiquer la propriété « nav
», s’il contient une image au format SVG
, vous devrez indiquer « svg
». Si le fichier fait référence à plusieurs propriétés à la fois, vous devrez les séparer par un simple espace, suivant cette syntaxe :
Il est à noter que votre livre doit contenir au moins un élément nav
. Nous en verrons l’utilité dans le troisième article de cette série.
Quant au fichier toc.ncx
, qui ne sert à rien en EPUB3
, mieux vaut le garder pour la rétrocompatibilité avec l’EPUB2
…
L’épine dorsale : le « spine »
La partie suivante du fichier OPF
est appelée le « spine
». C’est l’épine dorsale de votre livre. L’endroit où vous spécifiez quels sont les chapitres qui constituent votre ouvrage, et dans quel ordre ils doivent être lus. Inutile, dîtes-vous ? Pas tant que cela.
Car la subtilité vient du fait que vous pouvez avoir des fichiers qui constituent des annexes de votre livre et qui ne soient pas directement accessibles dans un ordre déterminé. Par exemple, une liste de définitions que votre lecteur pourrait aussi bien consulter au début de l’ouvrage qu’au milieu d’un chapitre. C’est ce qu’on appelle des fichiers « non linéaires » (ou non linear content en anglais). Vous ne savez pas dans quel ordre le disposer, mais vous voulez qu’il soit accessible. Vous devez donc le déclarer dans le spine
, mais avec la mention « contenu non linéaire » (ou en code : linear= “no”
). Ce fichier ne sera donc pas affiché comme un chapitre normal à la suite de son prédécesseur, mais appelé lorsque le lecteur fera une action (par exemple lorsqu’il cliquera sur la miniature d’un tableau).
<spine toc="ncx">
<itemref idref="contents" linear="yes"></itemref>
<itemref idref="body" linear="yes"></itemref>
</spine>
Le spine créé par Scrivener
Le « guide », obsolète en EPUB3
Comme je vous l’ai déjà dit, le format EPUB3
est assez récent et n’est donc pas pris en charge par toutes les tablettes et toutes les liseuses existantes. Cependant il serait dommage de priver certains lecteurs de votre œuvre donc, même au prix d’un alourdissement de votre code, donc du poids de votre fichier, donc de sa réactivité, je pense que toutes les options permettant une rétrocompatibilité de votre livre vers l’EPUB2
sont intéressantes.
Le guide fait partie de ces options.
<guide>
<reference type="toc" title="Contenu" href="contents.xhtml"></reference>
</guide>
Le guide créé par Scrivener
Au final, la planche anatomique d’un fichier livre.opf
Voici ce que donne le fichier dans sa totalité :
<?xml version="1.0" encoding="UTF-8"?>
<package xmlns="http://www.idpf.org/2007/opf" version="3.0" unique-identifier="PrimaryID">
<metadata xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:opf="http://www.idpf.org/2007/opf">
<dc:title>Fée du Logis</dc:title>
<dc:identifier id="PrimaryID">urn:uuid:E9B7CBB8-1D23-40C5-8053-E84F87026351</dc:identifier>
<dc:language>en</dc:language>
<meta property="dcterms:modified">2018-03-20T20:00:18Z</meta>
<dc:creator id="author">Germain HUC</dc:creator>
<meta refines="#author" property="role">aut</meta>
<meta refines="#author" property="file-as">HUC, Germain</meta>
</metadata>
<manifest>
<!-- contenu -->
<item id="ncx" href="toc.ncx" media-type="application/x-dtbncx+xml" fallback="contents"></item>
<item id="contents" properties="nav" href="contents.xhtml" media-type="application/xhtml+xml"></item>
<item id="body" href="body.xhtml" media-type="application/xhtml+xml"></item>
<!-- styles -->
<item id="style" href="css/stylesheet.css" media-type="text/css"></item>
<!-- fontes -->
<!-- images -->
</manifest>
<spine toc="ncx">
<itemref idref="contents" linear="yes"></itemref>
<itemref idref="body" linear="yes"></itemref>
</spine>
<guide>
<reference type="toc" title="Contenu" href="contents.xhtml"></reference>
</guide>
</package>
le fichier livre.opf modifié par mes soins