...
- GetRecord: Abfragen eines Datensatzes
- Identify: Abfragen grundsätzlicher Informationen über den Provider, hier die DDB
- ListIdentifiers: Abfragen mehrerer Datensatzinformationen (wie beispielsweise die Identifier)
- ListMetadataFormats: Abfrage verfügbarer Metadatenformate, hier oai_dc und edm
- ListRecords: Abgraben Abfragen mehrerer Datensätze
- ListSets: Abfragen vorhandener Sets
URLs
- Produktion: https://oai.deutsche-digitale-bibliothek.de/
- Entwicklung: https://dev-ddb.fiz-karlsruhe.de/oai/ (testsystem/testsystem)
Datenweitergabe an Europeana
Workflow
Vorverarbeitung durch Transformation
...
Die OAI-Schnittstelle der DDB benutzt die nach außen öffentlich sichtbaren Identifier (ID). Das sind ( Teile des ) URI der DDB-Objekte.
- DDB-Objekt (Peterchens Mondfahrt): http://www.deutsche-digitale-bibliothek.de/item/IDEYVAM52SZTJUSL347PX6JUIFR545ZD
Datenzusammenstellungen, darunter fallen u.a. OAI-Datensets bekommen zukünftig einen eigenen Identifier. Einstweilen werden OAI-Datensetz wie u.g eindeutig identifiziert.
- Sammlung: http://www.deutsche-digitale-bibliothek.de/dataset/ABCDEFGHIJKLMNOPQRSTU0123456789
...
OAI-Datensets
Lieferung an Europeana
Die Datensetz wie u.g eindeutig identifiziert. OAI-Datensets
...
werden nach folgenden Kriterien gebildet.
Kriterium | Benennung des Datensets | Kommentar | Beispiele (in Solr-Query-Syntax) |
---|
Generelle Datensets
Lieferung an Europeanahanshandlampe
Kriterium | Kommentar | Beispiele ||
dataset_id | <dataset_id> | ID des Datensets. (dies wird am häufigsten benutzt) | dataset-id:5738807392711401XjYt |
dataset_id AND provider_id | <dataset_id>:<provider_id> | Ein Datenpartner kann mehrere Provider liefern. Nur einige müssen an Europeana weitergegeben werden (z.B. Digicult) | dataset-id:5738807392711401XjYt AND provider_id:VSHJWG7QLS7Y3NS2HKE43E5Q5NJ7OCLS |
dataset_id AND type_fct | <dataset_id>:<type_fct> | Ein Datenpartner möchte z.B. nur die Videos aus einem Datenset liefern. | dataset-id:5738807392711401XjYt AND type_fct:mediatype_005 |
dataset_id AND license | <dataset_id>:<license> | Ein Datenpartner möchte nur die Objekte mit der Lizenz “RVLizenz „RV-FZ” FZ“ innerhalb eines Datensets liefern | dataset-id:5738807392711401XjYt AND license:"http://www.deutsche-digitale-bibliothek.de/lizenzen/rv-fz/" |
Blacklisting:
Yes, we need Blacklisting
Konventionen/Festlegungen
- Alle Datumswerte werden als UTC-Zeit (ohne Zeitzone) verwendet.
Das Format ist „yyyy-mm-ddTHH:mm:ssZ“, z. B. 2016-07-01T09:27:00Z}} - Die OAI-Schnittstelle der DDB ist unter https://oai.deutsche-digitale-bibliothek.de/ erreichbar. http://oai.deutsche-digitale-bibliothek.de/ leitet auf die verschlüsselte Schnittstelle weiter.
- …
Schemata/XSLT-Stylesheet
Zur besseren Verwendbarkeit der Schnittstelle ist das OAI PMH 2.0-Schema eingebunden.
Code Block | ||||
---|---|---|---|---|
| ||||
<OAI-PMH xmlns="http://www.openarchives.org/OAI/2.0/"
xsi:schemaLocation="http://www.openarchives.org/OAI/2.0/ http://www.openarchives.org/OAI/2.0/OAI-PMH.xsd"> |
Weiterhin ist mittels einer Prozessoranweisung ein XSLT-Stylesheet eingebunden. Das ermöglicht den meisten Webbrowsern aus den XML-Daten der OAI-Schnittstelle eine HTML-Ansicht zu generieren.
Code Block | ||||
---|---|---|---|---|
| ||||
<?xml-stylesheet type='text/xsl'
href='https://oai.deutsche-digitale-bibliothek.de/oai2.xsl'?> |
Das entsprechende XSLT-Stylesheet kann unter http://wiki.eprints.org/w/OAI_XSLT heruntergeladen werden und muss durch die OAI-Schnittstelle ausgeliefert werden. Ggf. kann die Datei noch angepasst werden, damit die Anzeige im Corporate-Design der DDB erfolgt.
Beschreibung
GetRecord
...
URL
Expand | |||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| |||||||||||||||||||||||||||
|
Expand | ||||||||
---|---|---|---|---|---|---|---|---|
| ||||||||
|
Anforderungen
Allgemein
Request
- Das Harvesting einzelner DDB-IDs ist über die Methode
GetRecord
möglich.
...
Parameter
...
identifier (benötigt)
...
...
metadataPrefix (benötigt)
...
Metadatenformat: „oai_dc” oder „edm“
- Veränderungen innerhalb einen OAI-Datensets über die Zeit können durch einen Timestamp abfragbar sein.
- z. B.
...
...
...
...
...
language | xml |
---|---|
title | Response |
linenumbers | true |
collapse | true |
- Deleted Records werden gemäß der OAI/PMH-Spezifikation unterstützt.
- siehe http://www.
...
...
- Das Löschen von OAI-Sets ist zunächst nicht vorgesehen, da es eine komplette Neuindexierung notwendig macht. Das ist bisher nicht implementiert.
Blacklisting und Whitelisting
- Der (kooperations-) vertragliche Zusammenhang von Europeana-Weitergabe und API-Blacklisting hat keine Auswirkungen auf die OAI-Schnittstelle. Das ist ein vertragliches Problem und muss auch an dieser Stelle gelöst werden. Ein Blacklisting (Daten eines Datenpartners lassen sich nicht über die DDB-API abrufen) sollte nicht mit einer Datenlieferung über die DDB an Europeana kombiniert werden können. Für alle nicht-geblacklisteten Daten werden OAI-Sets erstellt. Die weitere Klärung obliegt DDB/DNB bzw. SSt.
- Eine Freischaltung auf dem OAI-Server (Whitelisting) ist nicht vorgesehen. Jedes DDB-Objekt bekommt auf dem OAI-Server einen OAI/DC-Datensatz, der erst einmal nur die DDB-ID enthält.
Konventionen/ Festlegungen
- Alle Datumswerte werden als UTC-Zeit (ohne Zeitzone) verwendet.
Das Format ist „yyyy-mm-ddTHH:mm:ssZ“, z. B. 2016-07-01T09:27:00Z}} - Die OAI-Schnittstelle der DDB ist unter https://oai.deutsche-digitale-bibliothek.de/
...
- erreichbar. http://oai.deutsche-digitale-bibliothek.de/ leitet auf die verschlüsselte Schnittstelle weiter.
Konfiguration der OAI-Schnittstelle (Logo: DDBpro_Logo_2_s_pos_RGB_G.svg oder DDBpro_Logo_2_s_pos_RGB_G.png oder DDBpro_Logo_2_s_pos_RGB_G_BG.jpg)
- Anzahl der Objekte in einem Request: 300 (konfigurierbar in der Server-konfiguration bis max 1.000)
- Gültigkeit der Resumption-Token: theoretisch ewig (Verwendung der Cursor-Funktionalität von SOLR)
Bei einem Update während des Harvestings: Da nach Datum aufsteigend sortiert wird werden geänderte Objekte ans Ende der Liste sortiert und werden ggf. zuletzt noch einmal ausgeliefert.
StatusCodes
Die OAI-Schnittstelle setzt HTTP-StatusCodes um.
- 200 - OK
- 503 - Service unavailable → Überlastung der Schnittstelle
- 429 - Too Many Requests → Überlastung der Schnittstelle
- 400 - Bad Request → OAI-ErrorConditions
- 404 - Not Found
HTTP compression
Die OAI-PMH-Schnittstelle der DDB unterstützt HTTP-Kompression gzip und br (Brotli). Siehe auch
Jira | ||||||
---|---|---|---|---|---|---|
|
Beschreibung
GetRecord
URL | ||
Parameter | identifier (benötigt) | |
| metadataPrefix (benötigt) | Metadatenformat: „oai_dc” oder „edm“ |
Request
Code Block | ||||||||
---|---|---|---|---|---|---|---|---|
| ||||||||
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <?xml-stylesheet type='text/xsl' href='https://oai.deutsche-digitale-bibliothek.de/oai2.xsl'?> <OAI-PMH xmlns="http://www.openarchives.org/OAI/2.0/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.openarchives.org/OAI/2.0/ http://www.openarchives.org/OAI/2.0/OAI-PMH.xsd"> <responseDate>2017-01-17T13:33:19.399Z</responseDate> <request identifier="IDEYVAM52SZTJUSL347PX6JUIFR545ZD" metadataPrefix="edm" verb="GetRecord">https://oai.deutsche-digitale-bibliothek.de/</request> <GetRecord> <record> <header> <identifier>IDEYVAM52SZTJUSL347PX6JUIFR545ZD</identifier> IDEYVAM52SZTJUSL347PX6JUIFR545ZD</identifier> <!-- Datum vom ingestDate --> <datestamp>2015-06-15T01:11:30Z</datestamp> <!-- Datum vom ingestDate --> <datestamp>2015-06-15T01:11:30Z</datestamp> <!-- Auflistung ALLER Sets in denen der Datensatz vorkommt --> <setSpec>2Q37XY5KXJNJE5MV6SWP3UKKZ6RSBLK5<<setSpec>5738807392711401XjYt</setSpec> <setSpec>5738807392711401XjYt:VSHJWG7QLS7Y3NS2HKE43E5Q5NJ7OCLS</setSpec> <setSpec>2Q37XY5KXJNJE5MV6SWP3UKKZ6RSBLK5:subset-1-100000<<setSpec>5738807392711401XjYt:mediatype_005</setSpec> </header> <metadata> <!-- Nicht valide. Bessere Vorschläge sind willkommen! Europeana macht es auch so. --> <rdf:RDF xmlns:edm="http://www.europeana.eu/schemas/edm/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> <!-- ... --> </rdf:RDF> </metadata> </record> </GetRecord> </OAI-PMH> |
...
Code Block | ||||||||
---|---|---|---|---|---|---|---|---|
| ||||||||
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <?xml-stylesheet type='text/xsl' href='https://oai.deutsche-digitale-bibliothek.de/oai2.xsl'?> <OAI-PMH xmlns="http://www.openarchives.org/OAI/2.0/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.openarchives.org/OAI/2.0/ http://www.openarchives.org/OAI/2.0/OAI-PMH.xsd"> <responseDate>2017-01-12T13:12:34Z</responseDate> <request verb="Identify">https://oai.deutsche-digitale-bibliothek.de/</request> <Identify> <repositoryName>Deutsche Digitale Bibliothek</repositoryName> <baseURL>https://oai.deutsche-digitale-bibliothek.de/</baseURL> <protocolVersion>2.0</protocolVersion> <adminEmail>service@deutsche-digitale-bibliothek.de</adminEmail> <earliestDatestamp>1998-05-13T00:00:00Z</earliestDatestamp> <deletedRecord>no<<deletedRecord>yes</deletedRecord> <granularity>YYYY-MM-DDThh:mm:ssZ</granularity> </Identify> </OAI-PMH> |
...
Code Block | ||||||||
---|---|---|---|---|---|---|---|---|
| ||||||||
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <?xml-stylesheet type='text/xsl' href='https://oai.deutsche-digitale-bibliothek.de/oai2.xsl'?> <OAI-PMH xmlns="http://www.openarchives.org/OAI/2.0/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.openarchives.org/OAI/2.0/ http://www.openarchives.org/OAI/2.0/OAI-PMH.xsd"> <responseDate>2017-01-13T08:45:20.794Z</responseDate> <request metadataPrefix="oai_dc" verb="ListIdentifiers">https://oai.deutsche-digitale-bibliothek.de/</request> <ListIdentifiers> <header> <identifier>http://www.deutsche-digitale-bibliothek.de/item/IDEYVAM52SZTJUSL347PX6JUIFR545ZD</identifier> <identifier>IDEYVAM52SZTJUSL347PX6JUIFR545ZD</identifier> <!-- Datum vom ingestDate --> <datestamp>2015-06-15T01:11:30Z</datestamp> <!-- Auflistung ALLER Sets in denen der Datensatz vorkommt --> <setSpec>2Q37XY5KXJNJE5MV6SWP3UKKZ6RSBLK5< <setSpec>5738807392711401XjYt</setSpec> <setSpec>5738807392711401XjYt:VSHJWG7QLS7Y3NS2HKE43E5Q5NJ7OCLS</setSpec> <setSpec>2Q37XY5KXJNJE5MV6SWP3UKKZ6RSBLK5:subset-1-100000< <setSpec>5738807392711401XjYt:mediatype_005</setSpec> </header> <header> <identifier>http://www.deutsche-digitale-bibliothek.de/item/K6UAEV22DSH4GC2VAKPRTF4ZOHIOU6EJ</identifier> <identifier>K6UAEV22DSH4GC2VAKPRTF4ZOHIOU6EJ</identifier> <datestamp>2015-06-15T01:11:32Z</datestamp> <setSpec>2Q37XY5KXJNJE5MV6SWP3UKKZ6RSBLK5< <setSpec>5738807392711401XjYt</setSpec> <setSpec>5738807392711401XjYt:VSHJWG7QLS7Y3NS2HKE43E5Q5NJ7OCLS</setSpec> <setSpec>2Q37XY5KXJNJE5MV6SWP3UKKZ6RSBLK5:subset-100001-200000< <setSpec>5738807392711401XjYt:mediatype_005</setSpec> </header> <!-- ... --> <resumptionToken completeListSize="6200747" cursor="0" expirationDate="2017-01-13T09:15:20Z">mCgPm-947-0</resumptionToken> </ListIdentifiers> </OAI-PMH> |
...
Code Block | ||||||||
---|---|---|---|---|---|---|---|---|
| ||||||||
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <?xml-stylesheet type='text/xsl' href='https://oai.deutsche-digitale-bibliothek.de/oai2.xsl'?> <OAI-PMH xmlns="http://www.openarchives.org/OAI/2.0/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.openarchives.org/OAI/2.0/ http://www.openarchives.org/OAI/2.0/OAI-PMH.xsd"> <responseDate>2017-01-17T15:50:20Z</responseDate> <request metadataPrefix="edm" verb="ListRecords">https://oai.deutsche-digitale-bibliothek.de/</request> <ListRecords> <record> <header> <identifier>http"ListRecords">https://wwwoai.deutsche-digitale-bibliothek.de/item</IDEYVAM52SZTJUSL347PX6JUIFR545ZD</identifier>request> <ListRecords> <record> <!-- Datum vom ingestDate --><header> <datestamp>2015-06-15T01:11:30Z</datestamp><identifier>IDEYVAM52SZTJUSL347PX6JUIFR545ZD</identifier> <!-- AuflistungDatum ALLER Sets in denen der Datensatz vorkommt --> <setSpec>2Q37XY5KXJNJE5MV6SWP3UKKZ6RSBLK5</setSpec>vom ingestDate --> <setSpec>2Q37XY5KXJNJE5MV6SWP3UKKZ6RSBLK5:subset<datestamp>2015-1-100000</setSpec>06-15T01:11:30Z</datestamp> </header> <!-- Auflistung ALLER Sets <metadata> in denen der Datensatz <rdf:RDF vorkommt --> xmlns:edm="http://www.europeana.eu/schemas/edm/" <setSpec>5738807392711401XjYt</setSpec> xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"><setSpec>5738807392711401XjYt:VSHJWG7QLS7Y3NS2HKE43E5Q5NJ7OCLS</setSpec> <setSpec>5738807392711401XjYt:mediatype_005</setSpec> <!-- ... --> </header> </rdf:RDF><metadata> </metadata> <rdf:RDF </record> <record> <!-- ... -->xmlns:edm="http://www.europeana.eu/schemas/edm/" </record> <resumptionToken completeListSize="16240" cursor="0" expirationDate="2017-01-17T16:20:35Z">mCgPm-1042-0</resumptionToken> </ListRecords> </OAI-PMH> |
ListSets
...
URL
...
https://oai.deutsche-digitale-bibliothek.de?verb=ListSets
...
Parameter
...
resumptionToken (optional)
...
Token zur Wiederaufnahme bei größeren Datensets
Request
https://oai.deutsche-digitale-bibliothek.de?verb=ListSets
...
language | xml |
---|---|
title | Response |
linenumbers | true |
collapse | true |
...
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
<!-- ... -->
</rdf:RDF>
</metadata>
</record>
<record>
<!-- ... -->
</record>
<resumptionToken completeListSize="16240" cursor="0" expirationDate="2017-01-17T16:20:35Z">mCgPm-1042-0</resumptionToken>
</ListRecords>
</OAI-PMH> |
ListSets
URL | ||
Parameter | resumptionToken (optional) | Token zur Wiederaufnahme bei größeren Datensets |
Request
...
://oai.deutsche-digitale-bibliothek.de?verb=ListSets
Code Block | ||||||||
---|---|---|---|---|---|---|---|---|
| ||||||||
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <?xml-stylesheet type='text/xsl' href='https://oai.deutsche-digitale-bibliothek.de/oai2.xsl'?> <OAI-PMH xmlns="http://www.openarchives.org/OAI/2.0/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.openarchives.org/OAI/2.0/ http://www.openarchives.org/OAI/2.0/OAI-PMH.xsd"> <responseDate>2017-01-12T13:51:56Z</responseDate> <request verb="ListSets">https://oai.deutsche-digitale-bibliothek.de/</request> <ListSets> <set> <setSpec>5738807392711401XjYt</setSpec> <setName>...</</request> <ListSets> <set> <setSpec>BZVTR553HLJBDMQD5NCJ6YKP3HMBQRF4</setSpec> <setName>Staats- und Universitätsbibliothek Hamburg Carl von Ossietzky - All</setName> </set> <set> <setSpec>BZVTR553HLJBDMQD5NCJ6YKP3HMBQRF4:subset-1-100000</setSpec> <setName>Staats- und Universitätsbibliothek Hamburg Carl von Ossietzky - Subset from 1 to 100000</setName> </set> <set> <setSpec>BZVTR553HLJBDMQD5NCJ6YKP3HMBQRF4:subset-100001-200000</setSpec> <setName>Staats- und Universitätsbibliothek Hamburg Carl von Ossietzky - Subset from 100001 to 200000</setName> </set> <set> <setSpec>BZVTR553HLJBDMQD5NCJ6YKP3HMBQRF4:subset-200001-300000<<setSpec>5738807392711401XjYt:VSHJWG7QLS7Y3NS2HKE43E5Q5NJ7OCLS</setSpec> <setName>Staats- und Universitätsbibliothek Hamburg Carl von Ossietzky - Subset from 200001 to 300000<<setName>...</setName> </set> <set> <setSpec>4BQJRZ3KZCAN5BLLGNBAPJHAP7FVHL3R<<setSpec>5738807392711401XjYt:mediatype_005</setSpec> <setName>DigiZeitschriften e.V - All<<setName>...</setName> </set> <!-- ... --> </ListSets> </OAI-PMH> |
StatusCodes
Die OAI-Schnittstelle setzt HTTP-StatusCodes um.
- 200 - OK
- 503 - Service unavailable → Überlastung der Schnittstelle
- 429 - Too Many Requests → Überlastung der Schnittstelle
- 400 - Bad Request → OAI-ErrorConditions
- 404 - Not Found
HTTP compression
...
-->
</ListSets>
</OAI-PMH> |
Daten-Harvesting über die OAI-Schnittstelle der DDB
Strategie 1: ListRecords mit Set-Identifier
Set-Identifier: 00050026 („DigiZeitschriften e.V“ mit 382.337 Objekten 5738807392711401XjYt (gesamtes Dataset)
- 1. Abfrage über Verb „ListRecords“
: ?verb=ListRecords&metadataPrefix=edm&set=000500265738807392711401XjYt - Wiederholung mit resumptionToken bis das Ende erreicht ist
: ?verb=ListRecords&resumptionToken=mCgPm-1073-0
Strategie 2: GetRecord über ListIdentifiers mit Set-Identifier
Set-Identifier: 00050026 („DigiZeitschriften e.V“ mit 382.337 Objekten)...