Si l'archive EPUB est un bâtiment, le fichier .opf en est le plan d'architecte. Il porte l'extension .opf pour Open Packaging Format, hérité des premières spécifications de l'OeBF. Son nom — souvent content.opf ou package.opf — est libre : seul importe le chemin déclaré dans container.xml.
Ce fichier accomplit trois tâches :
i
Metadata
Identité du livre : titre, auteur, langue, éditeur, ISBN, date, description.
ii
Manifest
Liste exhaustive de toutes les ressources contenues dans l'archive.
iii
Spine
Ordre linéaire de lecture — la « reliure » du livre.
Structure générale
OEBPS/content.opf<?xml version="1.0" encoding="UTF-8"?>
<package
xmlns="http://www.idpf.org/2007/opf"
version="3.0"
unique-identifier="pub-id"
xml:lang="fr">
<metadata xmlns:dc="http://purl.org/dc/elements/1.1/">
<!-- identité du livre -->
</metadata>
<manifest>
<!-- ressources -->
</manifest>
<spine>
<!-- ordre de lecture -->
</spine>
</package>
I. Metadata — l'identité
EPUB s'appuie sur le vocabulaire Dublin Core — un standard international de métadonnées bibliographiques créé en 1995. Quinze éléments, dont trois seulement sont obligatoires :
dc:identifier— identifiant unique (ISBN, UUID, DOI…)dc:title— le titredc:language— la langue principale (code BCP 47 :fr,en-US…)
Un bloc complet, en EPUB 3, ressemble à ceci :
metadata<metadata xmlns:dc="http://purl.org/dc/elements/1.1/">
<dc:identifier id="pub-id">urn:isbn:9782070368228</dc:identifier>
<dc:title id="t1">À la recherche du temps perdu</dc:title>
<dc:language>fr</dc:language>
<dc:creator id="auth1">Marcel Proust</dc:creator>
<dc:publisher>Gallimard</dc:publisher>
<dc:date>1913-11-14</dc:date>
<dc:description>Le premier volume de la Recherche…</dc:description>
<dc:rights>Domaine public</dc:rights>
<dc:subject>Roman français — XXe siècle</dc:subject>
<!-- raffinements EPUB 3 via meta -->
<meta refines="#auth1" property="role"
scheme="marc:relators">aut</meta>
<meta refines="#auth1" property="file-as">Proust, Marcel</meta>
<meta property="dcterms:modified">2026-04-20T10:00:00Z</meta>
<meta property="schema:accessibilityFeature">tableOfContents</meta>
<!-- couverture (convention, pas normatif) -->
<meta name="cover" content="cover-img"/>
</metadata>
Les quinze éléments de Dublin Core
title, creator, subject, description, publisher, contributor, date, type, format, identifier, source, language, relation, coverage, rights.
L'identifiant unique
C'est la pièce d'identité du livre — ce qui permet aux bibliothèques et aux liseuses de distinguer deux versions d'un même ouvrage. L'identifiant obéit à un schéma URI :
urn:isbn:9782070368228— pour un livre commercialurn:uuid:6b5e1b44-3c0c-4e7d-98a2-2f9c7e0c3abc— pour un UUID généréurn:doi:10.1000/182— pour une publication académique
Les rôles MARC (Library of Congress)
Le code MARC précise la nature exacte de la contribution d'un auteur. Les plus courants :
| Code | Rôle |
|---|---|
aut | Auteur |
edt | Éditeur (directeur d'ouvrage) |
ill | Illustrateur |
trl | Traducteur |
aft | Auteur de l'après-propos |
aui | Auteur de l'introduction |
ctb | Contributeur |
nrt | Narrateur (audio) |
II. Manifest — l'inventaire
Le manifest liste chaque ressource de l'archive avec trois attributs obligatoires : un identifiant unique, un chemin relatif, et un type MIME.
manifest<manifest>
<item id="nav" href="nav.xhtml"
media-type="application/xhtml+xml"
properties="nav"/>
<item id="cover-img" href="images/cover.jpg"
media-type="image/jpeg"
properties="cover-image"/>
<item id="cover" href="text/cover.xhtml"
media-type="application/xhtml+xml"/>
<item id="ch01" href="text/chapitre-01.xhtml"
media-type="application/xhtml+xml"/>
<item id="css" href="styles/main.css"
media-type="text/css"/>
<item id="font" href="fonts/Crimson-Regular.woff2"
media-type="font/woff2"/>
</manifest>
L'attribut properties
Spécifique à EPUB 3, il ajoute une sémantique à certaines ressources clefs :
| Valeur | Signification |
|---|---|
nav | Ce document est la table des matières |
cover-image | Image de couverture |
scripted | Contient du JavaScript |
mathml | Contient du MathML |
svg | Contient du SVG inline |
remote-resources | Charge des ressources distantes |
switch | Utilise epub:switch |
III. Spine — l'ordre de lecture
Le manifest dit ce qui existe ; le spine dit dans quel ordre on le lit. C'est ce qui transforme une collection de fichiers en un livre avec un début, des chapitres, une fin.
spine<spine toc="ncx">
<itemref idref="cover" linear="no"/>
<itemref idref="titlepage"/>
<itemref idref="ch01"/>
<itemref idref="ch02"/>
<itemref idref="ch03"/>
<itemref idref="colophon"/>
</spine>
L'attribut linear
Un itemref avec linear="no" reste accessible par lien mais ne fait pas partie du fil narratif : annexes, notes, documents d'accompagnement. Le lecteur peut y accéder mais ne tombe pas dessus en tournant les pages.
Attention aux oublis courants
- Chaque fichier XHTML doit être à la fois dans le manifest et le spine.
- Les images, CSS et polices vont dans le manifest seulement.
- La
nav.xhtmldoit porter la propriéténav. - Oublier la modified date
dcterms:modifieden EPUB 3 fait échouerepubcheck.
L'attribut toc du spine
En EPUB 2, et toujours toléré en 3 pour rétrocompatibilité, l'attribut toc="ncx" pointe vers l'item du manifest correspondant au fichier NCX. En EPUB 3 pur, c'est la nav.xhtml avec properties="nav" qui prend le relais. Les deux peuvent coexister, et c'est ce qu'on fait souvent pour rester compatible avec les vieux lecteurs.
Le squelette est posé. Passons maintenant à la chair : le contenu XHTML et sa mise en forme CSS.