OAI-PMH

Motivation

In 2012, Leip­zig Uni­ver­si­ty Libra­ry (UB Leip­zig) reques­ted a URN ser­ver, which at night sum­ma­ri­zes all new URNs crea­ted during the day and pres­ents them rea­dy for retrie­val by the Deut­sche Natio­nal­bi­blio­thek (DNB), so that they can be included in the DNB index. Then as now, the DNB work­ed with OAI cli­ents to retrie­ve the URNs. Ste­fan Frei­tag, mean­while head of soft­ware deve­lo­p­ment at Leip­zig Uni­ver­si­ty Libra­ry, first imple­men­ted an OAI-PMH ser­ver for URNs using the xepi­cur for­mat. In 2018, it was re-imple­men­ted using more cur­rent tech­no­lo­gies (inclu­ding Java 11, vert.x‑Framework).

At the same time, the idea came up to make METS/MODS files also publicly available. METS/MODS files are crea­ted during the Kito­do digi­tiza­ti­on work­flow and are used for IIIF pro­ces­sing. IIIF is a won­derful tech­no­lo­gy for exchan­ging and pre­sen­ting image files, but it lacks the func­tion­a­li­ty to pre­sent detail­ed biblio­gra­phic infor­ma­ti­on, which in turn is aggre­ga­ted in the METS/MODS data. For this reason, Ste­fan Frei­tag has modi­fied the OAI ser­ver and set up a new ins­tance. Sin­ce then, the METS/MODS data are made available via this ser­ver. To make this inter­face more effi­ci­ent, the data is tem­po­r­a­ri­ly stored in a data­ba­se, which in turn is sup­pli­ed with data at inter­vals from a self-deve­lo­ped inter­face (igiL backend). The Leip­zig Uni­ver­si­ty Libra­ry thus achie­ves a very high-per­for­mance caching of the data for the many and some­ti­mes very lar­ge METS/MODS descriptions.

Usage and example of use

Open Archi­ves Initia­ti­ve Pro­to­col for Meta­da­ta Har­ve­s­t­ing (OAI-PMH) is a web-based stan­dar­di­zed pro­to­col for meta­da­ta har­ve­s­t­ing and pro­vi­des an appli­ca­ti­on-inde­pen­dent inter­ope­ra­bi­li­ty frame­work. With the help of a har­ves­ter (cli­ent appli­ca­ti­on), meta­da­ta can be collected.

With the help of OAI-PMH, data recon­ci­lia­ti­on bet­ween data­ba­ses is pre­fer­red. Howe­ver, this does not exclude the pos­si­bi­li­ty of obtai­ning meta­da­ta wit­hout a sepa­ra­te data­ba­se via the inter­face. As men­tio­ned at the begin­ning, the inter­face is main­ly used for data syn­chro­niza­ti­on with the DNB. In this way, data records can be auto­ma­ted and exch­an­ged bet­ween the insti­tu­ti­ons in a defi­ned standard.

The simp­lest type of such a cli­ent is for exam­p­le a web brow­ser. Howe­ver, requests can also be inte­gra­ted into com­pu­ter pro­grams by pro­gramm­ers in order to send them to the ser­ver, recei­ve a respon­se and pro­cess this respon­se in the soft­ware accordingly.

In the fol­lo­wing, we will show you, how you can use the inter­face. A detail­ed descrip­ti­on of the pro­to­col can be found at https://www.openarchives.org/OAI/openarchivesprotocol.html

Request

OAI-PMH requests must be sent using eit­her the methods HTTP GET or POST. POST has the advan­ta­ge that the length of the argu­ments is not rest­ric­ted. The URL enco­ding must be obser­ved for the requests.

For a request, a base URL is requi­red, which is sup­ple­men­ted by key­word argu­ments. The base URL and the key­word argu­ments must be sepa­ra­ted by a ques­ti­on mark [?].

Base URL of UB Leipzig

https://services.ub.uni-leipzig.de/digitalcollections/oai2

Keyword Arguments

In addi­ti­on to the base URL, all queries come with a list of key­word argu­ments in the form of key-value pairs (key=value). The argu­ments can be put tog­e­ther in any order. Seve­ral argu­ments must be sepa­ra­ted by the amper­sand [&]. Plea­se note that each OAI-PMH request must con­tain at least one key-value pair.

Exam­p­le for retrie­ving the imprint from the OAI ser­ver using the value “Iden­ti­fy”:

https://services.ub.uni-leipzig.de/digitalcollections/oai2?verb=Identify

Base URL:

https://services.ub.uni-leipzig.de/digitalcollections/oai2

key­word arguments:

verb=identify

By default, repo­si­to­ries make their base URL available as the value of the baseURL ele­ment in the so-cal­led Iden­ti­fy response.

Exam­p­le for rest­ric­ting the Records to a spe­ci­fic time period:

https://services.ub.uni-leipzig.de/digitalcollections/oai2?verb=ListRecords&metadataPrefix=mets&from=2020-01-10&until=2020-05-15

Base URL:

https://services.ub.uni-leipzig.de/digitalcollections/oai2

key­word arguments:

verb=ListRecords
metadataPrefix=mets
from=2020-01-10
until=2020-05-15

Response

All respon­ses to OAI PMH requests are well-for­med XML docu­ments encoded in UTF-8.

Available for­mats:

METS Meta­da­ta Enco­ding & Trans­mis­si­on Standard For­mat for describ­ing digi­tal coll­ec­tions of objects with metadata
MODS Meta­da­ta Object Descrip­ti­on Schema For­mat for biblio­gra­phic metadata

In the fol­lo­wing, you can see an excerpt for the respon­se for exam­p­le 2. The exam­p­le con­ta­ins ele­ments and attri­bu­tes that are stored in the sche­me defi­ni­ti­ons. The­se are fil­led with appro­pria­te data as requi­red by the sche­ma defi­ni­ti­on. Let’s look at the fol­lo­wing sec­tion, whe­re we see that the names are quite uni­que. Here is the title of the work:

<mods:title>Dominica Aduentus Domini, Matth. 21.</mods:title>
<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>
Cont­act
For ques­ti­ons and sug­ges­ti­ons on this topic, plea­se cont­act us.