Cas d’usage n° 5 : Ajouter une table des matières
Prérequis :
- IIIF Server
- Visionneuse au choix : Universal Viewer, Mirador, Octopus Viewer
Par défaut, IIIF présente les médias (images, pages, etc.) dans l’ordre où ils sont listés. Pour créer une structure plus complexe (chapitres, sections, illustrations, etc.), il faut renseigner une propriété spécifique, soit en JSON, soit sous forme littérale, suivant un format textuel ligne par ligne. Dans un Manifeste IIIF, c’est donc la section “structure” qui sert à organiser, décrire et hiérarchiser les contenus (pages, chapitres, illustrations, etc.) d’un document afin de permettre une navigation structurée dans les visionneuses compatibles IIIF.
Principe général
Plus concrètement, dans Omeka S, la table des matières doit être renseignée dans le champ Dublin Core TableOfContent suivant un formalisme défini dans la documentation du module IIIF Server et rappelé ici. Dans le paramétrage du modue IIIF Server, on doit ensuite définir l’association de la balise IIIF Structure au champ TableOfContent.
C’est le module IIIFServer qui transforme le formalisme de la table des matières en format JSON et qui alimente ensuite la rubrique “structure” du Manifeste.
Description du formalisme Omeka de la table des matières :
Chaque ligne du format représente une section (ou range) de la structure :
{id}, {label}, {canvasIndexOuRangeId1}; {canvasIndexOuRangeId2}; …; {canvasIndexOuRangeIdN}
Voyons un exemple d’une ligne à quatre champs avec une référence à la hierarchie des titres : le chapitre II de niveau titre 2 (r1-8) contient 8 sous-sections numérotées r1-8-1 à r1-8-8, ce qui s’écrit :
r1-8, Chapitre II : La preuve cartographique du Brésil, 65-124, r1-8-1;r1-8-2;r1-8-3;...r1-8-8
ou plus simplement : r1-8, Chapitre II : La preuve cartographique du Brésil, 65-124, r1-8-1/r1-8-8
Détails sur les identifiants et la syntaxe
Identifiant (id) : Il doit être unique, alphanumérique, sans espace, accent ou caractère spécial (pour garantir la stabilité des URI). Il ne doit pas être un nombre pur. Si l’identifiant est omis, la ligne reçoit un identifiant automatique basé sur son numéro d’ordre, mais cela n’est pas recommandé car l’URI changerait si l’ordre change.
Exemple ici : r1-8
Label (titre) : Il s’agit du titre de la section. S’il est vide, la section sera utilisée dans la structure mais ne s’affichera pas dans la table des matières.
Exemple : Un titre affiché dans la table des matières (label) : Chapitre II, Plat supérieur, vue générale, Page de faux titre
Liste des contenus : Ce sont les index des pages (canvases) ou les identifiants de sous-sections incluses dans la section. Attention : l’index de la page correspond à la position dans la liste IIIF, qui peut différer de l’ordre des médias dans Omeka ou un autre système de gestion.
Exemple : Une liste d'identifiants de canvas de référence : 65-124
L’identification de la structure hierarchique des sections et sous-sections, séparées par des “;”
Exemple : une liste d’éléments contenus (sous-sections) quand la hierarchie est conservée (lignes à 4 champs) : r1-8-1;r1-8-2;r1-8-3;...r1-8-8 ou r1-8-1/r1-8-8
Hiérarchies complexes
Le format de lignes à quatre champs permet donc de décrire des structures très hiérarchisées (chapitres, sections, sous-sections, illustrations, etc.), en imbriquant les identifiants dans la colonne des contenus en utilisant le quatrième champ. Ce bloc de lignes affiche la hiérarchie des titres et la possibilité de déplier les sous-sections à l’aide d’un clic de souris sur le symbole + accolé au niveau du titre supérieur :
Exemple de hiérarchie complexe :
La hiérarchisation permet de dérouler les niveaux de titres, mais seul actuellement le dernier niveau est cliquable : les niveaux supérieurs et intermédiaires ne le sont pas, alors que la table des matières devrait permettre une navigation structurée dans l’ensemble des documents quelque soit le niveau de titre. Le rendu dans le champ Index de la visionneuse est le suivant : ici seul le niveau 2 est cliquable et permet de visualiser le titre correspondant, ce qui n’est pas possible pour le titre de niveau 1 :
Table des matières sans hiérarchie des titres
Voici maintenant un exemple d’un bloc de lignes à trois champs. L’ensemble est inséré dans la balise dublin core TableOfContent. La liste des sous-sections n’est pas précisée. La hiérarchie des titres, visible dans les identifiants, ne s’affiche donc pas dans la visionneuse : tous les niveaux de titres sont alignés les uns sous les autres. Aucun symbôle de dépliement de sous-bloc n’apparait.
L’affichage correspondant de la table des matières dans l’index de la visionneuse est le suivant : tous les titres sont cliquables et chaque clic permet d’accéder à la vue correspondante.


Format XML et JSON
La structure est convertie en JSON pour IIIF, chaque section devenant un objet avec ses sous-sections ou pages listées dans des propriétés ranges ou canvases. Le tout est ajouté dans la rubrique “structure” du Manifeste (ici, un exemple en JSON IIIF v2) :
structures": [
{
"@id": "https://bsnum.sorbonne-nouvelle.fr/iiif/2/6652/range/r1-1",
"@type": "sc:Range",
"label": "Plat supérieur",
"canvases": [
"https://bsnum.sorbonne-nouvelle.fr/iiif/2/6652/canvas/p1"
]
},
{
"@id": "https://bsnum.sorbonne-nouvelle.fr/iiif/2/6652/range/r1-2",
"@type": "sc:Range",
"label": "Contre-plat supérieur",
"canvases": [
"https://bsnum.sorbonne-nouvelle.fr/iiif/2/6652/canvas/p2"
]
},
{
"@id": "https://bsnum.sorbonne-nouvelle.fr/iiif/2/6652/range/r1-3",
"@type": "sc:Range",
"label": "Garde volante",
"canvases": [
"https://bsnum.sorbonne-nouvelle.fr/iiif/2/6652/canvas/p3"
]
},
{
"@id": "https://bsnum.sorbonne-nouvelle.fr/iiif/2/6652/range/r1-3-1",
"@type": "sc:Range",
"label": "Verso",
"canvases": [
"https://bsnum.sorbonne-nouvelle.fr/iiif/2/6652/canvas/p4"
]
},
{
"@id": "https://bsnum.sorbonne-nouvelle.fr/iiif/2/6652/range/r1-4",
"@type": "sc:Range",
"label": "Page de titre",
"canvases": [
"https://bsnum.sorbonne-nouvelle.fr/iiif/2/6652/canvas/p7"
]
},
{
"@id": "https://bsnum.sorbonne-nouvelle.fr/iiif/2/6652/range/r1-5",
"@type": "sc:Range",
"label": "Page de faux titre",
"canvases": [
"https://bsnum.sorbonne-nouvelle.fr/iiif/2/6652/canvas/p9"
]
},
{
"@id": "https://bsnum.sorbonne-nouvelle.fr/iiif/2/6652/range/r1-6",
"@type": "sc:Range",
"label": "Avant-Propos",
"canvases": [
"https://bsnum.sorbonne-nouvelle.fr/iiif/2/6652/canvas/p11"
]
},
{
"@id": "https://bsnum.sorbonne-nouvelle.fr/iiif/2/6652/range/r1-7",
"@type": "sc:Range",
"label": "Chapitre I : La preuve cartographique Anglaise.",
"canvases": [
"https://bsnum.sorbonne-nouvelle.fr/iiif/2/6652/canvas/p13"
]
},
{
"@id": "https://bsnum.sorbonne-nouvelle.fr/iiif/2/6652/range/r1-7-1",
"@type": "sc:Range",
"label": "I. Observations générales.",
"canvases": [
"https://bsnum.sorbonne-nouvelle.fr/iiif/2/6652/canvas/p14"
]
},
{
"@id": "https://bsnum.sorbonne-nouvelle.fr/iiif/2/6652/range/r1-7-2",
"@type": "sc:Range",
"label": "II. Notes sur les Cartes annexées au Présent Mémoire.",
"canvases": [
"https://bsnum.sorbonne-nouvelle.fr/iiif/2/6652/canvas/p33"
]
},
{
"@id": "https://bsnum.sorbonne-nouvelle.fr/iiif/2/6652/range/r1-8",
"@type": "sc:Range",
"label": "Chapitre II : La preuve cartographique du Brésil",
"canvases": [
"https://bsnum.sorbonne-nouvelle.fr/iiif/2/6652/canvas/p65"
]
},
{
"@id": "https://bsnum.sorbonne-nouvelle.fr/iiif/2/6652/range/r1-8-1",
"@type": "sc:Range",
"label": "I. L'atlas Brésilien.",
"canvases": [
"https://bsnum.sorbonne-nouvelle.fr/iiif/2/6652/canvas/p65"
]
},
{
"@id": "https://bsnum.sorbonne-nouvelle.fr/iiif/2/6652/range/r1-8-2",
"@type": "sc:Range",
"label": "II. Cartes des XVIè et XVIIè siècles et de la première partie du XVIIIè siècle.",
"canvases": [
"https://bsnum.sorbonne-nouvelle.fr/iiif/2/6652/canvas/p71"
]
},