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.

Le fichier OPF comme chef d'orchestre de l'EPUB

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 :

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 :

Les rôles MARC (Library of Congress)

Le code MARC précise la nature exacte de la contribution d'un auteur. Les plus courants :

CodeRôle
autAuteur
edtÉditeur (directeur d'ouvrage)
illIllustrateur
trlTraducteur
aftAuteur de l'après-propos
auiAuteur de l'introduction
ctbContributeur
nrtNarrateur (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 :

ValeurSignification
navCe document est la table des matières
cover-imageImage de couverture
scriptedContient du JavaScript
mathmlContient du MathML
svgContient du SVG inline
remote-resourcesCharge des ressources distantes
switchUtilise 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.xhtml doit porter la propriété nav.
  • Oublier la modified date dcterms:modified en EPUB 3 fait échouer epubcheck.

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 manifest dit ce qui est. Le spine dit dans quel ordre on le lit. Ensemble, ils font un livre.

Le squelette est posé. Passons maintenant à la chair : le contenu XHTML et sa mise en forme CSS.