...
- 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.
Generelle Datensets
Lieferung an Europeana
Kriterium | Benennung der des Datensets | Kommentar | Beispiele (in Solr-Query-Syntax) |
---|---|---|---|
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:
TODO Michael Büchner
Weitere Anforderungen
- Das Harvesting einzelner DDB-IDs sollte möglich sein (GetRecord).
- Veränderungen innerhalb einen OAI-Datensets müssen über die Zeit durch einen Timestamp abfragbar sein.
Fragen & Antworten
- Zusammenhang: Europeana-Weitergabe und Blacklisting
- Stand der Dinge: 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.
- Ist eine Freischaltung auf dem OAI Server noch nötig? (Whitelist)
- Nein, eine zusätzliche Freischaltung ist nicht vorgesehen. Jedes DDB-Objekt bekommt auf dem OAI-Server einen OAI/DC-Datensatz, der erst einmal nur die DDB-ID enthält. J).
- Daten in den Lieferformate harvesten (Anforderung FS Archiv für EAD)
- Anforderung ist erst einmal zurückgestellt.
- Umgang mit Deleted Records
- Deleted Records werden gemäß der OAI/PMH-Spezifikation unterstützt.
- Löschen von OAI-Sets
- Komplette Neuindexierung notwendig. Das ist bisher nicht implementiert
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'?> |
Expand | |||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| |||||||||||||||||||||||||||
|
Expand | ||||||||
---|---|---|---|---|---|---|---|---|
| ||||||||
|
Anforderungen
Allgemein
- Das Harvesting einzelner DDB-IDs ist über die Methode
GetRecord
möglich. - Veränderungen innerhalb einen OAI-Datensets über die Zeit können durch einen Timestamp abfragbar sein.
- Deleted Records werden gemäß der OAI/PMH-Spezifikation unterstützt.
- 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
https://oai.deutsche-digitale-bibliothek.de?verb=GetRecord&metadataPrefix=edm&identifier=https%3A%2F%2Fwww.deutsche-digitale-bibliothek.de%2Fitem%2FIDEYVAM52SZTJUSL347PX6JUIFR545ZDIDEYVAM52SZTJUSL347PX6JUIFR545ZD
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="https://www.deutsche-digitale-bibliothek.de/item/IDEYVAM52SZTJUSL347PX6JUIFR545ZD" metadataPrefix="edm" verb="GetRecord">https://oai.deutsche-digitale-bibliothek.de/</request> <GetRecord> <record> <header> <identifier>https://www.deutsche-digitale-bibliothek.de/item/IDEYVAM52SZTJUSL347PX6JUIFR545ZD</<identifier>IDEYVAM52SZTJUSL347PX6JUIFR545ZD</identifier> <!-- Datum vom ingestDate --> <datestamp>2015-06-15T01:11:30Z</datestamp> <!-- Auflistung ALLER Sets in denen der Datensatz vorkommt --> <setSpec>5738807392711401XjYt</setSpec> <setSpec>5738807392711401XjYt_:VSHJWG7QLS7Y3NS2HKE43E5Q5NJ7OCLS</setSpec> <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"?> <?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>https://www.deutsche-digitale-bibliothek.de/item/IDEYVAM52SZTJUSL347PX6JUIFR545ZD</<identifier>IDEYVAM52SZTJUSL347PX6JUIFR545ZD</identifier> <!-- Datum vom ingestDate --> <datestamp>2015-06-15T01:11:30Z</datestamp> <!-- Auflistung ALLER Sets in denen der Datensatz vorkommt --> <setSpec>5738807392711401XjYt</setSpec> <setSpec>5738807392711401XjYt_:VSHJWG7QLS7Y3NS2HKE43E5Q5NJ7OCLS</setSpec> <setSpec>5738807392711401XjYt_:mediatype_005</setSpec> </header> <header> <identifier>K6UAEV22DSH4GC2VAKPRTF4ZOHIOU6EJ</identifier> <datestamp>2015-06-15T01:11:32Z</datestamp> <setSpec>5738807392711401XjYt</setSpec> <setSpec>5738807392711401XjYt_:VSHJWG7QLS7Y3NS2HKE43E5Q5NJ7OCLS</setSpec> <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>https://www.deutsche-digitale-bibliothek.de/item/IDEYVAM52SZTJUSL347PX6JUIFR545ZD</<identifier>IDEYVAM52SZTJUSL347PX6JUIFR545ZD</identifier> <!-- Datum vom ingestDate --> <datestamp>2015-06-15T01:11:30Z</datestamp> <!-- Auflistung ALLER Sets in denen der Datensatz vorkommt --> <setSpec>5738807392711401XjYt</setSpec> <setSpec>5738807392711401XjYt_:VSHJWG7QLS7Y3NS2HKE43E5Q5NJ7OCLS</setSpec> <setSpec>5738807392711401XjYt_:mediatype_005</setSpec> </header> <metadata> <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> <record> <!-- ... --> </record> <resumptionToken completeListSize="16240" cursor="0" expirationDate="2017-01-17T16:20:35Z">mCgPm-1042-0</resumptionToken> </ListRecords> </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:51:56Z</responseDate> <request verb="ListSets">https://oai.deutsche-digitale-bibliothek.de/</request> <ListSets> <set> <setSpec>5738807392711401XjYt</setSpec> <setName>...</setName> </set>>https://oai.deutsche-digitale-bibliothek.de/</request> <ListSets> <set> <setSpec>5738807392711401XjYt_VSHJWG7QLS7Y3NS2HKE43E5Q5NJ7OCLS<<setSpec>5738807392711401XjYt</setSpec> <setName>...</setName> </set> <set> <setSpec>5738807392711401XjYt_mediatype_005<:VSHJWG7QLS7Y3NS2HKE43E5Q5NJ7OCLS</setSpec> <setName>...</setName> </set> <set> <setSpec>BZVTR553HLJBDMQD5NCJ6YKP3HMBQRF4:subset-200001-300000<<setSpec>5738807392711401XjYt:mediatype_005</setSpec> <setName>...</setName> </set> <!-- <setName>... --> </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
...
setName>
</set>
<!-- ... -->
</ListSets>
</OAI-PMH> |
Daten-Harvesting über die OAI-Schnittstelle der DDB
...