Commit c229beea authored by Ronny Gey's avatar Ronny Gey 👾
Browse files

Merge branch 'master' of git.sc.uni-leipzig.de:gey/ub-lab

parents f6c352be a187897b
# OAI-PMH
## Motivation und Entstehung
Im Jahr 2012 entstand an der UB Leipzig der Wunsch nach einem <abbr title="Unified Resource Name"><a href="https://de.wikipedia.org/wiki/Uniform_Resource_Name">URN</a></abbr>-Server, der nächtlich alle über den Tag neu erstellten URNs zusammenfasst und für die [Deutsche Nationalbibliothek (DNB)](https://www.dnb.de) abrufbereit präsentiert, damit diese in den Index der DNB aufgenommen werden können. Die DNB arbeitete damals wie heute mit <abbr title="Open Archives Initiative"><a href="http://www.openarchives.org/">OAI</a></abbr>-Clients zum Abrufen der URNs. [Stefan Freitag](https://github.com/sfreitag), mittlerweile Leiter der Softwareentwicklung an der UB Leipzig, hat daraufhin zunächst einen <abbr title="Open Archives Initiative Protocol for Metadata Harvesting">OAI-PMH</abbr>-Server für URNs unter Nutzung des [xepicur](https://wiki.dnb.de/display/URNSERVDOK/xepicur+-+XML-Datentransferformat+zur+Verwaltung+von+URN)-Formats implementiert. In 2018 wurde dieser unter Verwendung aktuellerer Technologien (u.a. Java 11, [vert.x-Framwork](https://vertx.io)) neu implementiert.
Zur gleichen Zeit entstand der Wunsch, METS/MODS-Dateien ebenfalls öffentlich verfügbar zu machen. METS/MODS-Dateien enstehen während des Kitodo-Digitalisierungsworkflows und werden zur IIIF-Verarbeitung herangezogen. Während IIIF zwar eine wunderbare Technologie zum Image-Austausch darstellt, fehlen hierbei jedoch manchmal die detaillierten bibliografischen Informationen, die in den METS/MODS-Daten aggregiert sind. Ich habe also den OAI-Server modifiziert, eine neue Instanz aufgesetzt und darüber nun die METS/MODS-Daten verfügbar gemacht. Eine Besonderheit ist hierbei die Datenbasis. Um die Schnittstelle performant zu gestalten, werden alle METS/MODS-Daten in einer Datenbank zwischengespeichert, die wiederum intervallmäßig aus einer selbst entwickelten Schnittstelle (igiL-Backend) mit den Daten versorgt wird. Wir erreichen somit ein recht performantes Caching für die sehr vielen und zudem teilweise sehr großen METS/MODS-Beschreibungen.
## Nutzung und Nutzungsbeispiel
Open Archives Initiative Protocol for Metadata Harvesting (OAI-PMH) ist ein webbasiertes standardisiertes Protokoll für das Sammeln von Metadaten und bietet ein anwendungsunabhängiges Interoperabilitäts-Framework. Mit Hilfe eines Harvester (Clientanwendung), können Metadaten gesammelt werden.
Mithilfe von OAI-PMH werden bevorzugt Datenabgleiche zwischen Datenbanken vollzogen. Das schließt jedoch nicht aus, Metadaten ohne eigene Datenbank über die Schnittstelle zu beziehen. Wie eingangs erwähnt, findet die Schnittstelle bei uns hauptsächlich Anwendung beim Datenabgleich mit der DNB. So können Datensätze automatisiert und in einem festgelegten Standard zwischen den Einrichtungen ausgetauscht werden.
Die einfachste Art eines solchen Clients, ist beispielsweise ein Webbrowser. Es können aber auch Anfragen (Requests) in Computerprogrammen von Programmierern integriert werden, um diese an den Server zu senden, eine Antwort (Response) zu bekommen und diese Antwort entsprechend im Computerprogramm zu verarbeiten.
Im Folgenden zeigen wir Ihnen, anhand von 2 Beispielen, wie Sie die Schnittstelle nutzen können. Eine ausführliche Beschreibung des Protokolls finden Sie unter <https://www.openarchives.org/OAI/openarchivesprotocol.html>
## Request
OAI-PMH-Anfragen müssen entweder mit den Methoden HTTP GET oder POST gesendet werden. POST hat den Vorteil, dass die Länge der Argumente nicht eingeschränkt wird. Bitte achten Sie auf das URL-Encoding.
Für eine Anfrage (Request) benötigen Sie eine Basis-URL, welche durch Schlüsselwortargumente (keyword arguments) ergänzt wird. Zwischen der Basis-URL und den Schlüsselwortargumenten muss, wie üblich, eine Trennung durch ein Fragezeichen [?] erfolgen.
### Basis-URL der UBL
``` html
https://services.ub.uni-leipzig.de/digitalcollections/oai2
```
### Keyword Arguments
Zusätzlich zur Basis-URL bestehen alle Anfragen aus einer Liste von Schlüsselwortargumenten (keyword arguments), die die Form von Schlüssel-Wert-Paaren haben (key=value).
Die Argumente können dabei in beliebiger Reihenfolge aneinandergereiht werden. Mehrere Argumente müssen durch das kaufmännische Und [&] getrennt werden. Dabei ist zu beachten, dass jede OAI-PMH-Anfrage mindestens ein Schlüssel-Wert-Paar enthalten muss.
Beispiel für den Abruf des Impressums vom OAI-Server mithilfe des Wertes "Identify":
``` html
https://services.ub.uni-leipzig.de/digitalcollections/oai2?verb=Identify
```
Basis-URL:
``` html
https://services.ub.uni-leipzig.de/digitalcollections/oai2
```
keyword arguments:
``` html
verb=identify
```
Repositories machen standardmäßig ihre Basis-URL als Wert des baseURL-Elements in der sogenannten Identify-Antwort verfügbar.
Beispiel für die Eingrenzung der Records auf einen bestimmten Zeitraum:
``` html
https://services.ub.uni-leipzig.de/digitalcollections/oai2?verb=ListRecords&metadataPrefix=mets&from=2020-01-10&until=2020-05-15
```
Basis-URL:
``` html
https://services.ub.uni-leipzig.de/digitalcollections/oai2
```
keyword arguments:
``` html
verb=ListRecords
metadataPrefix=mets
from=2020-01-10
until=2020-05-15
```
## Response
Alle Antworten auf OAI-PMH-Anfragen sind wohlgeformte XML-Dokumente. Die Codierung des XML ist die UTF-8-Darstellung von Unicode.
Formate
<table>
<tr>
<td>METS</td>
<td>Metadata Encoding & Transmission Standard</td>
<td>Format zur Beschreibung von digitalen Sammlungen von Objekten mit Metadaten</td>
</tr>
<tr>
<td>MODS</td>
<td>Metadata Object Description Schema</td>
<td>Format für bibliografische Metadaten</td>
</tr>
Nachfolgend sehen Sie den Ausschnitt für den Response zum Beispiel 2. Das Beispiel enthält Elemente und Attribute, welche in den Schemadefinitionen hinterlegt sind. Diese werden mit entsprechenden Daten gefüllt, wie es die Schemadefinition verlangt. Die Schemadefinition können Sie entsprechend nachschlagen. Betrachten wir hierzu den folgenden Abschnitt, so werden Sie erkennen, dass die Bezeichnung recht eindeutig ist. Hier der Titel des Werks.
``` html
<mods:title>Dominica Aduentus Domini, Matth. 21.</mods:title>
```
``` html
<mets:mets xsi:schemaLocation="http://www.loc.gov/standards/premis/ http://www.loc.gov/standards/premis/v2/premis-v2-0.xsd http://www.loc.gov/mods/v3 http://www.loc.gov/standards/mods/v3/mods-3-7.xsd http://www.loc.gov/METS/ http://www.loc.gov/standards/mets/version17/mets.v1-7.xsd http://www.loc.gov/standards/mix/ http://www.loc.gov/standards/mix/mix.xsd" >
<mets:metsHdr CREATEDATE="2017-04-25T06:56:22" >
<mets:agent OTHERTYPE="SOFTWARE" ROLE="CREATOR" TYPE="OTHER" >
<mets:name>Goobi - UGH-1.11.0-7b3c2be - 26−March−2015</mets:name>
<mets:note>Goobi</mets:note>
</mets:agent>
</mets:metsHdr>
<mets:dmdSec ID="DMDLOG_0000" >
<mets:mdWrap MDTYPE="MODS" >
<mets:xmlData>
<mods:mods>
<mods:identifier type="goobi" >2552</mods:identifier>
<mods:relatedItem type="series" >
<mods:titleInfo>
<mods:title>VD16</mods:title>
</mods:titleInfo>
</mods:relatedItem>
<mods:identifier type="urn" >urn:nbn:de:bsz:15-0010-122769</mods:identifier>
<mods:identifier type="swb-ppn" >084461748</mods:identifier>
<mods:extension>
<slub:slub>
<slub:id type="source" >084461748</slub:id>
<slub:id type="tsl-ats" >DresPrec</slub:id>
</slub:slub>
</mods:extension>
<mods:identifier type="vd16" >VD16 D 2761</mods:identifier>
<mods:titleInfo>
<mods:title>Precationum formulae Ex Singvlis Evangeliis Dominicorvm, Et Festorvm Diervm Deliberate</mods:title>
<mods:subTitle>Latinè, &amp; Graecè</mods:subTitle>
</mods:titleInfo>
<mods:titleInfo type="alternative" >
<mods:title>Precationum formulae ex singulis Evangeliis Dominicorum, et festorum dierum deliberate</mods:title>
</mods:titleInfo>
<mods:language>
<mods:languageTerm authority="rfc3066" type="code" >grc</mods:languageTerm>
</mods:language>
<mods:language>
<mods:languageTerm authority="rfc3066" type="code" >lat</mods:languageTerm>
</mods:language>
<mods:originInfo>
<mods:place>
<mods:placeTerm type="text" >Lipsiae</mods:placeTerm>
</mods:place>
<mods:dateIssued keyDate="yes" >1596</mods:dateIssued>
<mods:dateOther encoding="w3cdtf" type="order" >1596</mods:dateOther>
<mods:publisher>Lantzenberger</mods:publisher>
</mods:originInfo>
<mods:name type="personal" >
<mods:role>
<mods:roleTerm authority="marcrelator" type="code" >aut</mods:roleTerm>
</mods:role>
<mods:namePart type="family" >Dresser</mods:namePart>
<mods:namePart type="given" >Matthaeus</mods:namePart>
<mods:displayForm>Dresser, Matthaeus</mods:displayForm>
</mods:name>
<mods:physicalDescription>
<mods:extent unit="leaves" >[176] Bl.</mods:extent>
</mods:physicalDescription>
</mods:mods>
</mets:xmlData>
</mets:mdWrap>
</mets:dmdSec>
<mets:dmdSec ID="DMDLOG_0001" >
<mets:mdWrap MDTYPE="MODS" >
<mets:xmlData>
<mods:mods>
<mods:titleInfo>
<mods:title>Dominica Aduentus Domini, Matth. 21.</mods:title>
</mods:titleInfo>
</mods:mods>
</mets:xmlData>
</mets:mdWrap>
</mets:dmdSec>
```
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment