2021.06 2022.06

Persistent Identifier

MyCoRe bietet verschiedene Möglichkeiten an, Persistente Identifier zu generieren. Es ist möglich DOISs, URNs oder PURLs zu erzeugen. Für die Registrierung einer DOI wird aktuell ein XSL-Stylesheet angeboten, das aus MyCoRe-MODS-Objekten ein XML im Datacite-Format generiert, das dann entsprechend zur Registrierung genutzt werden kann.

DOI-Registrierung

Um DOIs aus der MyCoRe-Anwendung heraus zu prägen und beispielsweise bei DataCite über die REST-API zu registrieren stellt MyCoRe in der Komponente mycore-pi eine entsprechende Implementierung bereit. Mit der folgenden Konfiguration kann die DOI-Registrierung bei Datacite aktiviert werden. Diese Beispielkonfiguration geht von MyCoRe-MODS als Datenmodell aus. Für ein anderes Datenmodell müsste entsprechend ein eigener Transformer und MetadataManager implementiert werden.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
      MCR.DOI.Prefix=10.5072
      MCR.DOI.HostingInstitution=MyCoRe Community
      MCR.DOI.NISSPattern=yyyyMMdd-HHmmss
      MCR.PI.Service.Datacite.MetadataService=MODSDOI
      MCR.PI.Service.Datacite.Generator=DateDOI
      MCR.PI.Service.Datacite.RegisterBaseURL=https://intr2dok.vifa-recht.de
      MCR.PI.Service.Datacite.Username=
      MCR.PI.Service.Datacite.Password=
      # MCR.PI.Service.Datacite.UseTestServer=true
      MCR.PI.Service.Registration.Datacite.Transformer=datacite

      # Vordefiniert in MyCoRe
      MCR.PI.Generator.UUIDDOI=org.mycore.pi.doi.MCRUUIDDOIGenerator
      MCR.PI.Generator.DateDOI=org.mycore.pi.doi.MCRCreateDateDOIGenerator
      MCR.PI.Generator.MapObjectIDDOI=org.mycore.pi.doi.MCRMapObjectIDDOIGenerator
      MCR.PI.MetadataService.MODSDOI=org.mycore.mods.identifier.MCRMODSDOIPersistentIdentifierMetadataManager

Will man DOI in Abhängigkeit vom Objektidentifikator generieren lassen, bietet sich die folgende Konfiguration an.

1
2
        MCR.PI.Service.Datacite.Generator=MapObjectIDDOI
        MCR.PI.Generator.MapObjectIDDOI.Prefix.mir_mods=%MCR.DOI.Prefix%/{$Wunschtext}

Verwendet man zunächst die Testumgebung von DataCite und möchte dennoch eine korrekte Verlinkung erzielen, so muss noch das folgende Property hinzugefügt werden.

1
        MCR.DOI.Resolver.MasterURL=https://handle.stage.datacite.org/

Nachdem die Anwendung entsprechend konfiguriert wurde, kann über /receive mittels des URL-Parameters XSL.Transformer=datacite das datacite-XML angezeigt werden. Sollte im MODS bereits eine DOI angegeben sein, wird diese angezeigt.

MIR-Aktionen-Menü mit aktivierter DOI-Registrierung

Die Anwendung MIR stellt diese Funktionalität bereit, wenn das entsprechende Property MIR.registerDOI=true gesetzt wird. Dann erscheint im Aktionen-Menü eines einzelnen Objektes ein weiterer Menüpunkt "DOI Registrieren".

URN-Registrierung

Die Konfiguration für URN erfolgt analog zu DOI. Eine Beispiel für eine Konfiguration kann in den MIR-Properties gefunden werden.

Automatisches Erstellen und Reservieren von PI

Über das Property .CreationPredicate kann eine Bedingung festgelegt werden. Wenn diese Bedingung erfüllt ist, wird ein Persistent Identifier erstellt und registriert. Falls es nötig ist, zunächst nur ein PI zu reservieren, aber noch nicht zu registrieren kann man das Property .RegistrationPredicate setzen, welches eine Bedingung definiert, die für die Registrierung erfüllt sein muss. Die Bedingung muss auch erfüllt sein, wenn der PI nicht automatisch erstellt wurde!

MCRPIStatePredicate

Das MCRPIStatePredicate prüft, ob sich das MyCoRe-Objekt in einem gegebenen Zustand befindet.

Beispiel:
1
2
3
4
MCR.PI.Service.Datacite.CreationPredicate=org.mycore.pi.condition.MCRPIStatePredicate
MCR.PI.Service.Datacite.CreationPredicate.State=new
MCR.PI.Service.Datacite.RegistrationPredicate=org.mycore.pi.condition.MCRPIStatePredicate
MCR.PI.Service.Datacite.RegistrationPredicate.State=published

Wenn ein Objekt erzeugt wird und im Zustand new ist, dann wird ein PI angelegt (MCRPIStatePredicate mit Konfiguration State=new). Anschließend wird der PI nicht registriert, da die Bedingung für das Registrieren nicht erfüllt ist (MCRPIStatePredicate mit Konfiguration State=published). Stellt ein Nutzer das Objekt auf den Status published, dann wird der PI automatisch registriert. Bei jeder Änderung am Objekt wird die Bedingung durch einen EventHandler geprüft.

MCRPIXPathPredicate

Weiterhin gibt es zur Modellierung beliebiger Bedingungen das MCRPIXPathPredicate. Damit kann ein XPath-Ausdruck angegeben werden, der einen Wahrheitswert zurückliefert, z.B. um eine neue DOI nur dann anzulegen, wenn nicht bereits eine DOI in den Metadaten existiert.

Beispiel:
1
2
MCR.PI.Service.Datacite.CreationPredicate=org.mycore.pi.condition.MCRPIXPathPredicate
MCR.PI.Service.Datacite.CreationPredicate.XPath=not(//modsContainer//mods:mods/mods:identifier[@type='doi'])

MCRPIClassificationXPathPredicate

Soll die Entscheidung in Abhängigkeit der Eigenschaften eines vergebenen Klassifikationswertes getroffen werden, kann ein MCRPIClassificationXPathPredicate verwendet werden. Hierzu müssen eine Reihe von XPath-Ausdrücken konfiguriert werden. Einen, um ein Basis-Element im Objekt auszuwählen und zwei weitere um ausgehend von diesem Basis-Element die ID der Klassifikation und des vergebenen Klassifikationswertes zu ermitteln. Anhand dieser beiden Werte wird die entsprechende Kategorie geladen. Der vierte XPath-Ausdruck beschreibt die geforderte Eigenschaft des Klassifikationswertes. Dieser wird den XPath-Regeln entsprechend zu einem Wahrheitswert ausgewertet, z.B. um eine DOI nur dann anzulegen, wenn das Genre entsprechend gekennzeichnet ist (<label xml:lang="x-doi-service" text="datacite"/>):

Beispiel:
1
2
3
4
5
MCR.PI.Service.Datacite.CreationPredicate=org.mycore.pi.condition.MCRPIClassificationXPathPredicate
MCR.PI.Service.Datacite.CreationPredicate.BaseXPath=//modsContainer/mods:mods/mods:genre[@type='intern']
MCR.PI.Service.Datacite.CreationPredicate.ClassIdXPath='mir_genres'
MCR.PI.Service.Datacite.CreationPredicate.CategIdXPath=substring-after(@valueURI,'#')
MCR.PI.Service.Datacite.CreationPredicate.XPath=//category/label[lang('x-doi-service') and @text='datacite']

MCRPIAndPredicate / MCRPIOrPredicate

Es ist auch möglich komplexere Bedingungen mittels MCRPIAndPredicate oder MCRPIOrPredicate zu definieren:

Beispiel:
1
2
3
4
5
MCR.PI.Service.Datacite.CreationPredicate=org.mycore.pi.condition.MCRPIAndPredicate
MCR.PI.Service.Datacite.CreationPredicate.1=org.mycore.pi.condition.MCRPIStatePredicate
MCR.PI.Service.Datacite.CreationPredicate.1.State=new
MCR.PI.Service.Datacite.CreationPredicate.2=org.mycore.pi.condition.MCRPIXPathPredicate
MCR.PI.Service.Datacite.CreationPredicate.2.XPath=//modsContainer/mods:mods[count(mods:name[@type='corporate' and contains(@authorityURI, 'mir_institutes')])>0]

In dem Beispiel wird ein PI nur im Zustand new erzeugt und wenn eine Institution angegeben ist. Mehr erfährt man im Quellcode.