Le protocole OAI-PMH (Open Archives Initiative - Protocol for Metadata Harvesting) est à la base de l’interopérabilité entre bibliothèques numériques (un peu comme peut l’être le Z39.50). Il est issu des travaux de la Convention de Santa Fé en 1999, aujourd’hui OAI-PMH est en V2 (2002). Il est basé sur le protocole HTTP (client/serveur avec les méthodes GET et POST) et XML (pour l’encodage des réponses).

Ce billet ne fait pas le tour de OAI-PMH, et de loin, mais il devrait vous permettre d’y voir plus clair et d’aborder plus sereinement des documentations plus conséquentes et plus techniques.

Le principe

Il permet d’échanger, de manière asynchrone, des données dans le but de multiplier les accès aux documents numériques en les « exposants » sur plusieurs plateformes, d’alimenter des agrégateurs de contenus thématiques ou de reconstituer des corpus virtuellement.

Un fournisseur (data provider) a des documents accessibles en ligne et expose ses métadonnées (dans un dépôt, repository), le client (service provider) vient interroger ce dépôt et aspirer (moissonner) les métadonnées qui l’intéresse pour les indexer dans sa propre base. Des deux cotés, une architecture technique en OAI-PMH doit être déployée : un dépôt (repository) et un moissonneur (harvester).

Seul les métadonnées transitent du fournisseur vers le client, avec elles les liens vers les ressources originales (en général le fichier) qui reste sur sa plateforme d’origine. Le fournisseur partage donc ses données pour in fine pouvoir toucher plus de monde et augmenter son trafic (puisque l’usager est renvoyé chez le diffuseur pour la consultation), le client lui augmente et enrichit son « offre ».

Quel service veut-on déployer ?

Avant la mise en place, se poser quelques questions :

Être fournisseur (data provider)

  • Quelles données diffuser ;
  • vers qui, ai-je des partenaires privilégiés (quelles implications dans les formats, la qualité des données) ;
  • fréquence ;
  • type de métadonnées ;
  • quels sets (des ensembles de documents thématiques, typologiques, etc.)…

Être client (service provider)

  • Quel service souhaite mettre en avant la bibliothèque, pour quel usage, quels usagers, pourquoi ce besoin d’aller chercher des données ailleurs ;
  • qui peut me fournir des données, ai-je un dépôt particulier en tête (pour valider ma compatibilité, par exemple être en mesure de récupérer les données Gallica, et pourvoir les intégrer à ma base).

Bonnes pratiques

En cas de mise en place d’un protocole entre deux institutions, par exemple une bibliothèque public qui va vouloir exposer pour Gallica mais aussi récupérer ce qui relève de ses compétences (des sets régionaux par exemple), il sera bon alors de veiller en amont à la compatibilité, pour cela la BnF fournie ses référentiels (en particulier pour être bien moissonné par elle) qu’il conviendra de suivre au moment de la construction de la bibliothèque numérique ou de la mise en place du service. Se mettre d’accord sur la création de sets particuliers peut aussi être intéressant.

Les fournisseurs doivent penser à signaler les dépôts sur leurs sites et à s’enregistrer sur les annuaires de fournisseurs de données faute de quoi ils resteront invisibles.

Petit glossaire

Un peu de vocabulaire que vous allez immanquablement rencontrer autour du protocole OAI-PMH.

  • Moissonneur (Harvester) :

    • le client qui lance une requête OAI-PMH vers un dépôt (repository).
  • Dépôt (Repository) :

    • un serveur HTTP accessible et configuré pour interpréter les requêtes OAI-PMH.
  • Ensemble (Set) :

    • un regroupement d’items suivant des critères thématiques, typologiques, etc. visant à structurer le dépôt et à offrir aux moissonneur des contenus choisis.
  • Ressource (Resource) :

    • document sur lequel porte les métadonnées (il ne s’agit pas forcément d’une ressource numérique).
  • Item :

    • un objet documentaire qui décrit et identifie une ressource. Chaque item a un identifiant unique.
  • Enregistrement (Record):

    • enregistrement constitué d’un ensemble de métadonnées en XML dans un format identifié (par ex. Dublin Core) disposant d’au moins deux parties : un en-tête et des métadonnées (<header> et <metadata>).
  • Identifiant (Identifier) :

    • identifiant unique à chaque item (le dc:identifier constitué du lien pérenne vers la ressource précédé de l’adresse du dépôt OAI).
  • Protocole (Protocol) :

    • Un protocole (de communication) est un ensemble de contraintes permettant la communication entre deux entitées (ex. : FTP, HTTP, OAI-PMH).
  • Moissonnage (Harvesting)

    • se dit de l’action d’aller chercher des ensembles de métadonnées dans un ou des dépôts.
  • Fournisseur de ressource (Data Provider)

    • celui qui maintient et alimente un dépôt qui lui permet d’exposer des métadonnées sur un serveur interrogeable via le protocole OAI-PMH.
  • Fournisseur de service (Service Provider)

    • celui qui envoie des requêtes via le protocole OAI-PMH vers un dépôt (celui qui moissonne) pour récupérer des métadonnées et les intégrer à son propre ensemble afin d’en augmenter la qualité. Ce faisant il fournit un service de valeur ajoutée (par ex. : Isidore).

Les requêtes OAI-PMH

Les transactions en OAI se font à l’aide de 6 verbes, des commandes que le service passe par URL via le protocole HTTP. Les réponses à ces requêtes sont des flux de données en XML. Les paramètres éventuels sont passés après le signe &. J’utilise pour ces exemples des entrepôts de la BnF (http://oai.bnf.fr... est celui de Gallica, http://catoai.bnf.fr... celui du catalogue de la BnF), les requêtes sont donc cliquables et vous permettrons de voir les résultats en détail (ouvrez dans un nouvel onglet).

Identify

Le client demande au travers de ce verbe qui vous êtes et ce qui compose votre entrepôt.

http://oai.bnf.fr/oai2//OAIHandler?verb=Identify

ListMetadataFormats

Permet d’indiquer les formats disponibles sur le dépôt (repository), pas défaut et à minima, c’est du Dublin-core simple qui est mis à disposition.
Paramètres disponibles :

  • identifier (optionnel)
  • metadataPrefix (obligatoire)
  • from (optionnel)
  • until (optionnel)
  • set (optionnel)
  • resumption Token (exclusif des autres)

http://oai.bnf.fr/oai2//OAIHandler?verb=ListMetadataFormats

ListSets

Indique au client comment l’entrepôt est découpé. Les sets peuvent être thématiques, par typologie etc.
Paramètres disponibles :

  • resumption Token

http://oai.bnf.fr/oai2//OAIHandler?verb=ListSets

Exemple de métadonnées d’un set :

  <set>
    <setSpec>banqueimages</setSpec>
    <setName>Banque d'images</setName>
  </set>

ListIdentifiers

Renvoie au client la liste de tous les identifiers – les liens uniques vers les ressources – qui composent son entrepôt pour le format de métadonnées passé en paramètre (&metadataPrefix=oai_dc).
Paramètres disponibles :

  • metadataPrefix (obligatoire)
  • from (optionnel)
  • until (optionnel)
  • set (optionnel)
  • resumption Token (exclusif des autres)

http://catoai.bnf.fr/oai2/OAIHandler?verb=ListIdentifiers&metadataPrefix=oai_dc

Exemple d’un résultat de la liste renvoyé :

<header>
  <identifier>oai:bnf.fr:catalogue/ark:/12148/cb31000022t</identifier>
    <datestamp>2010-06-09</datestamp>
    <setSpec>catalogue:collections:reserve</setSpec>
    <setSpec>catalogue:imprimes:monographies</setSpec>
</header>

Exemple de resumption Token renvoyé :

<    resumptionToken     resumptionToken expirationDate="2017-11-26T18:35:40Z" completeListSize="12998328" cursor="0">1!61!34108319!176807!1000!12998328!oai_dc</resumptionToken>

GetRecord

Le client demande un item par son identifier passé en paramètre.
Paramètres disponibles :

  • identifier (optionnel)
  • metadataPrefix (obligatoire)

http://catoai.bnf.fr/oai2/OAIHandler?verb=GetRecord&identifier=oai:bnf.fr:catalogue/ark:/12148/cb328426349/description&metadataPrefix=oai_dc

ListRecords

Permets de récupérer tous les résultats (par « paquets ») pour le format de métadonnées passé en paramètre (&metadataPrefix=oai_dc) accompagnés d’un jeton (resumption Token) qui permet de relancer la requête, soit pour continuer à charger un lot important, soit pour charger à un autre moment ce qui a été mis à jour sur le dépôt.
Paramètres disponibles :

  • metadataPrefix (obligatoire)
  • from (optionnel)
  • until (optionnel)
  • set (optionnel)
  • resumption Token (exclusif des autres)

http://catoai.bnf.fr/oai2/OAIHandler?verb=ListRecords&metadataPrefix=oai_dc

Exemple de resumption Token renvoyé :

<resumptiontoken resumptiontoken="" expirationdate="2017-11-26T18:22:50Z"  
completelistsize="12998328" cursor="0">1!61!34108319!176807!1000!12998328!oai_dc</resumptiontoken>

Pré-requis pour être fournisseur et ou client

  • Avoir des métadonnées dans un format compatible (Dubin-Core, Mods, etc.) ;
  • les items doivent avoir un identifiant unique et pérenne ;
  • disposer d’un serveur web et y installer une API pour accéder à la base de données ;
  • des métadonnées de type datestamps (dernière modification, création de l’item) ;
  • si possible des données organisées en sets (thématiques, typologiques, etc.) ;
  • un système de resumption Token implémenté pour contrôler les flux de mise à disposition (nouveaux items, ou date des dernières visites d’un moissonneur) ;
  • un interpréteur de requêtes OAI ;

    • qui ira interroger la base de données ;
    • qui renverra les métadonnées dans un flux XML.

Outils

  • Un outil pour tester et / ou explorer des dépôts.

Liens