2019.06 2020.06

Schnittstellen - OAI

In diesem Abschnitt wird die Nutzung der integrierten OAI-Schnittstelle erläutert. Diese Schnittstelle liefert jedoch nicht die konkreten ausgelieferten Datenformate für das eigene Datenmodell wie Dublin Core, MODS, LIDO usw. Die hierfür erforderlichen Stylesheets müssen selbst erstellt werden.

Das Repository als OAI-Data-Provider

Im folgenden soll die Konfiguration der OAI-Schnittstelle beschrieben werden. Zum Austausch von Metadaten unterstützt MyCoRe das Open Archives Initiative Protocol for Metadata Harvesting (OAI-PMH). Die Beschreibung des Standards finden Sie unter http://www.openarchives.org/pmh/. Machen Sie sich zunächst grob mit diesem Standard vertraut. In die Implementierung sind auch Anforderungen aus dem DINI-Zertifikat 2010 ( http://www.dini.de/dini-zertifikat/) eingeflossen.

Die OAI-Schnittstelle ist auch in der MIR-Anwendung bereits integriert und kann dort getestet werden:

Konfiguration des OAI-Providers

Mehrfache Verwendung

Es ist möglich mehrere OAI-Provider parallel zu betreiben. So kann man beispielsweise einen OAIProvider für das Melden der Dissertationen an die Deutsche Nationalbibliothek verwenden und mit einem zweiten OAIProvider den gesamten Dokumentenbestand für OpenAccess-Portale wie OAIster oder BASE bereit stellen.

Als Unterscheidungskriterium gilt der Servlet-Name, wie er in der web.xml verwendet wird. Er ist auch Bestandteil der Property-Namen in den Konfigurationsdateien. Die Verwendung derselben Servletklasse ist möglich.

Aktivierung des Servlets

Das OAI2 Servlet muss in der web.xml aktiviert werden:

1
2
3
4
5
6
7
8
9
<servlet id="OAI2Provider">
  <servlet-name>OAI2</servlet-name>
  <servlet-class>org.mycore.oai.MCROAIDataProvider</servlet-class>
</servlet>

<servlet-mapping>
  <servlet-name>OAI2</servlet-name>
  <url-pattern>/oai2</url-pattern>
</servlet-mapping>

Properties

Für die Konfiguration der Schnittstelle sind eine Reihe von Properties notwendig. Viele können in der Defaulteinstellung verwendet werden, einige sind jedoch in der eigenen Anwendung zu überschreiben.

Property für die Ausgabeformatierung

Für die Visualisierung der OAI-Requests im Webbrowser wird das OAI2 to HTML XSLT Style Sheet von Eprints verwendet.

Folgendes Property gibt den Pfad zu diesem Stylesheet in der eigenen Anwendung an:

1
MCR.OAIDataProvider.OAI2.ResponseStylesheet=oai/oai2.xsl

Properties für den Identify-Request

Für die genaue Bedeutung der Properties und ihre möglichen Werte sei ein Blick in den OAI-Standard empfohlen:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
# Properties for OAI Identify Request:
MCR.OAIDataProvider.OAI2.RepositoryName=MyCoRe Repository
MCR.OAIDataProvider.OAI2.AdminEmail=admin@mycore.de
MCR.OAIDataProvider.OAI2.RepositoryIdentifier=www.mycore.de

MCR.OAIDataProvider.OAI2.RecordSampleID=mycore_mods_00000001
MCR.OAIDataProvider.OAI2.EarliestDatestamp=1970-01-01
MCR.OAIDataProvider.OAI2.EarliestDatestamp.SortBy=modified asc
MCR.OAIDataProvider.OAI2.EarliestDatestamp.FieldName=modified

MCR.OAIDataProvider.OAI2.DeletedRecord=transient
MCR.OAIDataProvider.OAI2.DeletedRecordTypes=derivate,mods
MCR.OAIDataProvider.OAI2.Granularity=YYYY_MM_DD

MCR.OAIDataProvider.OAI2.Friends.DuEPublico=https://duepublico2.uni-due.de/servlets/OAIDataProvider
MCR.OAIDataProvider.OAI2.Friends.DBThueringen=https://www.db-thueringen.de/servlets/OAIDataProvider
      

Properties für Resumption Tokens

Mittels Resumption Tokens kann die Rückgabe großer Mengen an Dokumenten partitioniert werden. Genauere Angaben entnehmen Sie der OAI-Spezifikation.

Für die Konfiguration werden folgende Properties verwendet:

1
2
3
MCR.OAIDataProvider.ResumptionTokens.PartitionSize=100
MCR.OAIDataProvider.ResumptionTokens.MaxAge=1441
      

Properties für den OAIAdapter

Mit dem OAIAdapter wird der einheitliche, protokoll-spezifische Teil der OAImplementierung von den konkreten Anforderungen der Anwendung (MIR, MILESS, PAPYRI usw.) getrennt. Für MyCoRe-Anwendungen steht die Klasse MCROAIAdapter zur Verfügung. In wenigen Ausnahmefällen kann es notwendig sein, diese Klasse neu zu implementieren oder zu erweitern.

1
MCR.OAIDataProvider.OAI2.Adapter=org.mycore.oai.MCROAIAdapter

Die Erzeugung des Header- und des Metadatenteils eines OAI-Responses erfolgt generisch, es können aber auch Stylesheets dieses generische Verhalten überschreiben. Dann müssen entsprechende XSL-Dateien hinterlegt werden.

1
2
3
4
# MCR.OAIDataProvider.OAI2.Adapter.HeaderURIPattern=xslStyle:mods2oaiheader:mcrobject:{id}
# MCR.OAIDataProvider.OAI2.Adapter.RecordURIPattern=xslStyle:mods2{format}:mcrobject:{id}
MCR.OAIDataProvider.OAI2.Adapter.RecordURIPattern=xslTransform:oai-{format}:mcrobject:{id}
      

Properties für die Suche

Mit den folgenden Properties lässt sich die Menge der Dokumente, die über die OAI-Schnittstelle ausgeliefert werden, einschränken und sortieren.

1
2
3
4
MCR.OAIDataProvider.OAI2.Search.Restriction=objectType:mods
MCR.OAIDataProvider.OAI2.Search.FromUntil=modified
MCR.OAIDataProvider.OAI2.EarliestDatestamp.SortBy=modified asc
      

Properties für Sets

Das Konzept der Sets im OAI-Standard lässt sich mit dem Klassifikationskonzept von MyCoRe vergleichen. Daher bietet es sich an, Klassifikationen als Sets zu verwenden.

Mit dem Property FilterEmptySets kann bestimmt werden, ob auch leere Sets bei einem List-Sets-Request zurückgegeben werden.

1
MCR.OAIDataProvider.OAI2.FilterEmptySets=true

Mit dem folgenden Property werden zunächst alle Sets definiert, die in der Anwendung verwendet werden sollen:

1
MCR.OAIDataProvider.OAI2.Sets=open_access,doc-type

Mit einem XSLT-Stylesheet und unter Verwendung des URI-Resolvers kann aus einer MyCoRe-Klassifikation die entsprechende Ausgabe für einen OAI-List-Sets-Request generiert werden:

1
MCR.OAIDataProvider.OAI2.Sets.doc-type.URI=xslStyle:classification2sets:classification:metadata:10:children:diniPublType

Mit dem Property FilterDisabledCategories kann hierbei pro Klassifikation bestimmt werden, ob Sets für Klassifikationswerte ausgelassen werden sollen, die mit <label xml:lang="x-disable" text="true" /> markiert sind.

1
MCR.OAIDataProvider.OAI2.FilterDisabledCategories.diniPublType=true=true

Für die Suche nach Dokumenten, die als Inhalt eines Sets zurückgegeben werden sollen, kann einem Set-Namen ein Klassifikationsname zugeordnet werden:

1
MCR.OAIDataProvider.OAI2.Sets.doc-type.Classification=diniPublType

Alternativ besteht auch die Möglichkeit, per URI-Resolver direkt eine XML-Datei mit der Set-Konfiguration anzugeben:

1
MCR.OAIDataProvider.OAI2.Sets.open_access.URI=webapp:oai/set_open_access.xml

Beispiel für eine statische Sets Datei im XML Format:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
<?xml version="1.0" encoding="UTF-8"?>
<ListSets 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">
  <set>
    <setSpec>open_access</setSpec>
    <setName>Open Access publications</setName>
  </set>
</ListSets>

Zu Beachten ist hierbei die Verwendung des OAI Namensraumes.

Bei statisch definierte Sets muss für jeden Eintrag ein Property gesetzt werden, welches eine Suchanfrage auf die Dokumente innerhalb des Sets zurückliefert:

1
MCR.OAIDataProvider.OAI2.Sets.open_access.Query=(worldReadableComplete:true)

Wenn die ID des Sets (setSpec) Doppelpunkte enthält, werden diese mit einem Backslash gequotet:

1
2
3
MCR.OAIDataProvider.OAI2.Sets.foo\:bar.URI=webapp:oai/set_foobar.xml
MCR.OAIDataProvider.OAI2.Sets.foo\:bar.Query=(mods.title:*foobar*)
      

Properties für Metadatenformate

Zunächst sind die unterstützten Metadatenformate aufzulisten und dann jeweils Namensraum und URL der XMLSchema-Definition anzugeben:

1
2
3
4
5
6
MCR.OAIDataProvider.OAI2.MetadataFormats=oai_dc,epicur
MCR.OAIDataProvider.MetadataFormat.oai_dc.Schema=http://www.openarchives.org/OAI/2.0/oai_dc.xsd
MCR.OAIDataProvider.MetadataFormat.oai_dc.Namespace=http://www.openarchives.org/OAI/2.0/oai_dc/
MCR.OAIDataProvider.MetadataFormat.epicur.Schema=http://www.persistent-identifier.de/xepicur/version1.0/xepicur.xsd
MCR.OAIDataProvider.MetadataFormat.epicur.Namespace=urn:nbn:de:1111-2004033116
      

Für jedes Metadatenformat ist außerdem ein XSL-Stylesheet zu erstellen, welches aus dem MyCoRe-Datenmodell das entsprechende Ausgabeformat erzeugt. Im MIR befinden sich beispielhafte Implementierungen für mods2oai_dc.xsl und mods2epicur.xsl. Diese sind jedoch in der Regel an das eigene Datenmodell anzupassen.

OpenAIRE-Compliance

Damit das Repository OpenAIRE-compliant ist, müssen entsprechend der OpenAIRE-Spezifikation Informationen zum Forschungsprojekt erfasst werden. In der MIR-Anwendung stehen dafür die notwendigen Formular-Templates bereit. Auch sind die nötigen Suchfelder und Stylesheets vorhanden, um ein OpenAIRE-kompatibles DublinCore-Format aus dem MODS zu erzeugen. Wenn man dies nutzen und die OAI-Schnittstelle dafür konfigurieren möchte, sind die nachfolgenden Properties zu setzen. Wobei der obere Block für alle Anwendungen gleich bleiben sollte - hier werden nur die Sets an sich definiert. Der zweite Block zeigt die Solr-Anfragen, mit denen die Sets gebildet werden. Diese sind natürlich stark von den Inhalten abhängig. Das hier gezeigte Beispiel gilt für MODS in der MIR-Anwendung.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
MCR.OAIDataProvider.OAI2.Sets=open_access,openaire,driver,ec_fundedresources
MCR.OAIDataProvider.OAI2.Sets.open_access.URI=webapp:oai/set_open_access.xml
MCR.OAIDataProvider.OAI2.Sets.openaire.URI=webapp:oai/set_openaire.xml
MCR.OAIDataProvider.OAI2.Sets.driver.URI=webapp:oai/set_driver.xml
MCR.OAIDataProvider.OAI2.Sets.ec_fundedresources.URI=webapp:oai/set_ec_fundedresources.xml

MCR.OAIDataProvider.OAI2.Sets.open_access.Query=(worldReadableComplete:true)
MCR.OAIDataProvider.OAI2.Sets.driver.Query=((derCount:[1 TO *] AND mods.embargo:[* TO NOW]) OR (derCount:[1 TO *] AND NOT mods.embargo:[* TO *])) AND NOT (mods.rights:"Alle Rechte vorbehalten" OR mods.rights:"All rights reserved")
MCR.OAIDataProvider.OAI2.Sets.openaire.Query=((derCount:[1 TO *] AND mods.embargo:[* TO NOW]) OR (derCount:[1 TO *] AND NOT mods.embargo:[* TO *])) AND (mods.identifier:info\\:eu-repo/grantAgreement*)
MCR.OAIDataProvider.OAI2.Sets.ec_fundedresources.Query=((derCount:[1 TO *] AND mods.embargo:[* TO NOW]) OR (derCount:[1 TO *] AND NOT mods.embargo:[* TO *])) AND (mods.identifier:info\\:eu-repo/grantAgreement*)
      

Hat man auch Forschungsdaten im Repository, könnte das datacite-Format interessant werden, dass OpenAIRE von Daten-Archiven verlangt. Auch hierfür ist für MODS bereits alles vorbereitet. Es müssen nur die nachfolgend spezifizierten properties gesetzt werden, um über die OAI-Schnittstelle auch das oai_datacite-Format auszuliefern.

1
2
3
4
MCR.OAIDataProvider.OAI2.MetadataFormats=oai_dc,epicur,oai_datacite
MCR.OAIDataProvider.MetadataFormat.oai_datacite.Namespace=http://schema.datacite.org/oai/oai-1.0/
MCR.OAIDataProvider.MetadataFormat.oai_datacite.Schema=https://schema.datacite.org/oai/oai-1.0/oai.xsd
      

OAI-Validatoren

Es gibt verschiedene Validatoren für die eigene OAI-Schnittstelle. Hier eine kurze Liste bekannter Seiten (Stand 10/2015):