OAI-PMH (Open Archives Initiative Protocol for Metadata Harvesting) ist ein einfaches, weit verbreitetes Protokoll für den Austausch von Metadaten zwischen Repositorien. Ein Data Provider stellt seine Metadaten über einen einzigen HTTP-Endpunkt zur Verfügung; ein Service Provider (Harvester) ruft diese Metadaten ab und verarbeitet sie weiter — etwa für Suchportale, Aggregatoren oder Langzeitarchivierung.
Das Protokoll wurde 1999 initiiert und liegt seit 2002 in Version 2.0 vor. Trotz seines Alters ist OAI-PMH in Bibliotheken, Archiven und Forschungs-Repositorien Standard — nicht zuletzt, weil es so schlank ist: HTTP GET (oder POST) mit Query-Parametern, XML als Antwort, sechs definierte Verben.
Die sechs Verben
Die gesamte Protokoll-Oberfläche besteht aus sechs Verben (verb=…-Parameter):
Identify— Eckdaten des Repositoriums (Name, Basis-URL, Granularität, Admin-Kontakt, frühester DateStamp).ListMetadataFormats— welche Metadaten-Schemata werden angeboten (oai_dc,mods,marc21,mets,tei…).ListSets— die hierarchische Set-Struktur des Repositoriums; Sets erlauben thematische Filter beim Harvesting.ListIdentifiers— nur die Header (Identifier, DateStamp, Set-Zugehörigkeit) der Records einer Selektion.ListRecords— Header + vollständige Metadaten der Records einer Selektion.GetRecord— ein einzelner Record per Identifier und Metadaten-Format.
Anfrage-Beispiel
GET /oai?verb=ListRecords
&metadataPrefix=oai_dc
&set=archive:einsiedeln
&from=2024-01-01
&until=2024-12-31
Verpflichtendes Minimum: oai_dc
Jeder OAI-PMH-konforme Endpunkt muss mindestens das Format oai_dc anbieten — Dublin Core (15 unqualifizierte Elemente: title, creator, subject, description, publisher, contributor, date, type, format, identifier, source, language, relation, coverage, rights). Optional dürfen weitere, reichere Schemata bereitgestellt werden — typisch METS, MODS, MARCXML, EAD, TEI, qualified Dublin Core.
Resumption Tokens
Grosse Ergebnislisten werden über Resumption Tokens paginiert. Die erste Antwort enthält am Ende ein <resumptionToken>…</resumptionToken>; die nächste Anfrage liefert den Token zurück:
GET /oai?verb=ListRecords&resumptionToken=abc123
Tokens sind opak (ihre Struktur wird vom Server bestimmt) und haben in der Regel eine begrenzte Lebensdauer.
DateStamps und Granularität
Records sind mit einem DateStamp versehen, an dem das Repositorium den letzten relevanten Update vermerkt. Zwei Granularitäten sind möglich:
YYYY-MM-DD— Tagesgenauigkeit (Default)YYYY-MM-DDThh:mm:ssZ— Sekundengenauigkeit (UTC)
Welche das Repositorium nutzt, wird in der Identify-Antwort als <granularity> angegeben. Harvester können dann inkrementell harvesten (from/until).
Selektive Harvesting-Strategien
- Initial-Harvest:
ListRecordsohnefrom-Beschränkung — kann Stunden dauern. - Inkrementell:
from= letzter Harvest-Zeitpunkt (DateStamp). - Set-basiert: mit
set=…nur einen thematischen Ausschnitt holen. - Header-only:
ListIdentifierserst, danach gezielteGetRecord-Aufrufe — nützlich, wenn nur ein Bruchteil der Records überhaupt benötigt wird.
Fehlerbehandlung
OAI-PMH definiert ein eigenes Set von Fehler-Codes im <error>-Element:
badArgument,badResumptionToken,badVerbcannotDisseminateFormat— angefordertes Format wird nicht unterstütztidDoesNotExist,noRecordsMatch,noMetadataFormats,noSetHierarchy
HTTP-Statuscodes bleiben in der Regel 200 OK — die eigentliche Fehlermeldung steckt im XML.
Werkzeuge
- OAI-PMH Validator — offizielle Web-Validierung unter validator.oaipmh.com.
- PyOAI / sickle (Python) — verbreitete Harvester-Libraries für eigene Pipelines.
- VuFind, DSpace, Fedora, TYPO3 — gängige Repositorien mit eingebauter OAI-PMH-Schnittstelle.
Aus unserer Praxis
Wir haben einen Laravel-nativen OAI-PMH-2.0-Server aus Anton extrahiert und als eigenständiges Open-Source-Paket veröffentlicht. Es bringt Verb-Dispatching, Resumption-Tokens, Blade-Views und einen austauschbaren Repository-Vertrag mit, sodass es sich an jede Laravel-Datenquelle anschliessen lässt. Siehe oai-pmh in unseren Open-Source-Paketen.
Links
- OAI-PMH 2.0 Specification
- Implementation Guidelines
- OAI Data Provider Registry
- Validator: OAI-PMH
- sickle (Python OAI-PMH client)
- oai-pmh auf GitHub — unser Laravel-OAI-PMH-Server