Dieser Code funktioniert mit DSpace Version 8.1+ und 7.6.2+. Für ältere Versionen nutzen Sie bitte den Code aus dem Tag enricher-1.0.
Der Enricher wurde im Rahmen des von swissuniversities ko-finanzierten Projekts AURORA als zweites Tool von der ZHAW Zürcher Hochschule für Angewandte Wissenschaften und der Fachhochschule Nordwestschweiz FHNW entwickelt. Das Tool wird zur Anreicherung von Publikationen im DSpace-Repositorium mit Informationen zur Zweitveröffentlichung eingesetzt. Die entsprechenden Daten können unter anderem aus Quellen wie Open policy finder Jisc (ehemals SherpaRomeo) oder einer eigenen CSV-Liste stammen.
- Ablauf des Enricher-Tools
- Voraussetzungen
- Installation
- Verwendung
- Konfigurationen
- Controllers
- Models
- Organisation
- Services
- Best practice
Das Enricher-Tool ergänzt Publikationen im DSpace-Repository mit Informationen zu Zweitveröffentlichungsrechten, indem diese gezielt in ein festgelegtes Metadatenfeld eingetragen werden. Dabei müssen die beiden Zustände berücksichtigt werden, in denen sich Publikationen befinden können: Published Items und Workflow Items. Je nach Zustand sind unterschiedliche Prozesse erforderlich, um die Anreicherung korrekt durchzuführen. Dies liegt an der spezifischen Anforderung, die DSpace an die Bearbeitung dieser Zustände stellt.
Zu Beginn überprüft die Methode, ob eine spezifische UUID (eine eindeutige Identifikationsnummer) für ein Item angegeben wurde.
Wenn eine UUID vorhanden ist, sucht die Methode gezielt nach diesem Item. Hierbei wird ein Service-Objekt verwendet, das den aktuellen Zustand des Items aus dem DSpace-Repositorium holt. Wird das Item mit der gegebenen UUID gefunden, reichert das Tool dieses Item mit Informationen zu Rahmenbedingungen der Zweitveröffentlichung an. Diese Informationen werden in einem entsprechenden Metadatenfeld der Publikation im DSpace-Repositorium hinzugefügt. Sollte die Anreicherung des Items fehlschlagen, wird das Item zur weiteren Analyse in einer CSV-Datei gespeichert und eine Fehlermeldung ausgegeben. Wird das Item nicht gefunden, erfolgt ebenfalls eine entsprechende Rückmeldung.
Falls keine UUID angegeben wird, führt das Tool die Anreicherung über alle Items der mitgegebenen Zustände durch und fügt ebenfalls die Informationen zur Zweitveröffentlichung in das entsprechende Metadatenfeld der Publikationen in DSpace hinzu.
- Java Version 17
- Repositorium in DSpace 7.6.2+ / 8.1+
-
Vorbereitungen im DSpace – Zweitveröffentlichungsrechte-Feld erstellen, Rechte setzen (Admin)
-
Projekt von Github holen
-
Anpassungen in der Konfiguration und den Klassen vornehmen
-
die JAR-Datei mit diesem Befehl erstellen:
mvn clean packageoder mit Profil (siehe Konfigurationen)
mvn clean package -Pdev mvn clean package -Ptest mvn clean package -PprodDie Datei befindet sich dann im target Ordner.
-
Prozesseinbindung im DSpace durchführen
Führen Sie den Befehl in folgendem Format aus:
java -jar ./target/enricher-jar-with-dependencies.jar -controller [option] -items [option] -id [option] -updateAll| Flag | Beschreibung | Pflicht |
|---|---|---|
-controller |
Der Name des Controllers, welcher verwendet werden soll. Zum Beispiel: SherpaRomeoController |
Ja |
-items |
Die Art des/der Items. WorkflowItem, PublishedItem oder beide. | Ja |
-id |
Die UUID eines Items aus dem Repositorium. | Nein |
-updateAll |
Sollten auch die bereits angereicherten Publikationen einer erneuten Prüfung unterzogen werden, wird die Flag aktiviert. | Nein |
-controller CSVController -items WorkflowItem -id 8032f56a-8b1a-4edd-ae44-17ab8b51bf17
-controller SherpaRomeoController -items PublishedItem
-controller SherpaRomeoController -items PublishedItem,WorkflowItem
-controller SherpaRomeoController -items PublishedItem -updateAllIm ./src/main/resources/assets/config/organisation.properties
| Feldname | Beschreibung | Pflicht | Beispiel |
|---|---|---|---|
| type.{providerName}.{typeOfPublication} | Name des Typs der Publikation im Repositorium. Der typeOfPublication kann frei gewählt werden, , sollte jedoch je Provider nur einmal vorkommen. | Ja | type.sherpa.journalArticle = Beitrag in wissenschaftlicher Zeitschrift |
| matchString.{providerName}.location | Eine Reihe von Veröffentlichungsoptionen, wo eine Zweitveröffentlichung gestattet ist. Verschiedene Orte werden mit | getrennt. | Ja für SherpaRomeo. | matchString.sherpa.location = Any Repository|Any Website|Institutional Repository|Non-Commercial Repository|Non-Commercial Institutional Repository |
| matchString.{providerName}.version | Akzeptierte Dokumentenversionen, verschiedene Versionstypen werden mit | getrennt. | Ja für SherpaRomeo. | matchString.sherpa.version = Published|Accepted |
| metadata.{providerName} | Metadatenfeld im Repositorium,wo die Informationen zur Zweitveröffentlichung gespeichert werden sollen. | Ja | metadata.sherpa = zhaw.oastatus.aurora |
| metadata.{providerName}.section | Die Sektion im Repository des Metadatenfeldes, welches die Informationen zur Zweitveröffentlichung speichert. | Ja, ausser die Section wird dynamisch festgelegt. | metadata.sherpa.section = zhawdescriptionclassic |
| url.{providerName} | Die URL der API des Providers. | Ja für SherpaRomeo | url.sherpa = https://api.openpolicyfinder.jisc.ac.uk/retrieve_by_id?item-type=publication&format=Json |
| organisation.repositoryAPI | URL der Server API des Repositoriums. | Ja | https://digitalcollection.zhaw.ch/server/api oder ${app.url}/server/api (mit pom.xml Profilen) |
| organisation.policyList | Der Pfad zur Liste mit den Informationen zur Zweitveröffentlichung. | Ja für CSV Controller. | organisation.policyList = files/input/self-archiving-policies.csv |
| organisation.unsuccessfulItemList | Der Pfad zur Liste mit den Items, bei denen die Anreicherung erfolglos war. | Ja | organisation.unsuccessfulItemList = /pfad/zum/output/ordner/unsuccessful-item-list.csv |
| organisation.itemsPerPage | Wie viele Items pro Seite von der API abgefragt werden sollen. | Ja | organisation.itemsPerPage = 100 |
| dspace.version | DSpace Version, um festzulegen, wie das csrf-Token empfangen wird. | Yes | dspace.version = 7.6.0 |
Konfiguration im pom.xml, falls die organisation.repositoryAPI Url je nach Umgebung (Maven Profil) angepasst werden soll. Beispiel für eine Prod und Test Umgebung mit unterschiedlicher URL:
<profiles>
<profile>
<id>test</id>
<properties>
<maven.compiler.source>
17
</maven.compiler.source>
<maven.compiler.target>
17
</maven.compiler.target>
<encoding>
UTF-8
</encoding>
<app.url>
https://digitalcollection-test.zhaw.ch
</app.url>
</properties>
</profile>
<profile>
<id>prod</id>
<properties>
<maven.compiler.source>
17
</maven.compiler.source>
<maven.compiler.target>
17
</maven.compiler.target>
<encoding>
UTF-8
</encoding>
<app.url>
https://digitalcollection.zhaw.ch
</app.url>
</properties>
</profile>
</profiles>
Um das Metadatenfeld anreichern zu können, wird im Repositorium ein Benutzer mit Admin- und Workflow-Rechten angelegt, der Zugriff auf die Items hat.
Im ./src/main/resources/assets/config/credentials.properties
| Feldname | Beschreibung | Pflicht | Beispiel |
|---|---|---|---|
| username | Der Benutzeremail des Users. | Ja | manumusterperson@muster.ch |
| password | Das Passwort des Users. | Ja | admin123 |
| apikey.sherpa | Der API Schlüssel für SherpaRomeo. | Ja | XXX-XXX |
src/main/resources/assets/config/organisation.properties
Die Logs werden in zwei Kategorien (Admin / Helpdesk) gesammelt und am Ende des Programms an die jeweilige E-Mail-Adresse versendet.
| Feldname | Beschreibung | Pflicht | Beispiel |
|---|---|---|---|
| organisation.mail.admin | Emailempfänger für Adminlogs. | Ja | manumusterperson@muster.ch |
| organisation.mail.helpdesk | Emailempfänger für Helpdesklogs. | Ja | manumusterperson@muster.ch |
src/main/resources/assets/config/credentials.properties
| Feldname | Beschreibung | Pflicht | Beispiel |
|---|---|---|---|
| Emailadresse des Absenders der Logmails. | Ja | manumusterperson@muster.ch | |
| mail.password | Passwort der Emailadresse des Absenders der Logmails. | Ja | admin123 |
Die LogCollectors und der EmailReportService befinden sich hier:
- src/main/java/ch/zhaw/hsb/aurora/enricher/Service/Email/EmailReportService.java
- src/main/java/ch/zhaw/hsb/aurora/enricher/LogCollector/AdminLogCollector.java
- src/main/java/ch/zhaw/hsb/aurora/enricher/LogCollector/HelpdeskLogCollector.java
Es können verschiedene Logs gesammelt werden:
- Informationen (logInfo) - HelpdeskLogCollector und AdminLogCollector
- Warnungen (logWarning) - nur beim AdminLogCollector
- Fehler (logErrorAndExit) - nur beim AdminLogCollector und das Programm wird beendet.
./src/main/java/ch/zhaw/hsb/aurora/enricher/Controller
Die Controller leiten Nutzeranfragen an die entsprechenden Services weiter und koordinieren Aufgaben wie das Abrufen von Items, das Abfragen von Informationen beim Provider und die Aufbereitung der Daten für die Einspielung in die entsprechenden Felder.
Der EnrichmentControllerAbstract ist ein abstrakter Controller, der alle Standardfunktionen eines Controllers bereitstellt. Als abstrakte Klasse kann EnrichmentControllerAbstract selbst nicht instanziiert werden. Stattdessen werden SherpaRomeoController und CSVController instanziiert.
Der SherpaRomeoController erbt alle Funktionen des OrganisationControllerAbstract, das wiederum vom EnrichmentControllerAbstract erbt, und ermöglicht die Services für den Provider SherpaRomeo anzupassen und aufzurufen.
Der CSVController erbt alle Funktionen des OrganisationControllerAbstract, das wiederum vom EnrichmentControllerAbstract erbt, und ermöglicht die Services für die CSV-Datei anzupassen und aufzurufen.
./src/main/java/ch/zhaw/hsb/aurora/enricher/Model
Die Klasse EnrichmentModel repräsentiert ein Datenmodell, das dazu dient, die Informationen zur Zweitveröffentlichung zwischenzuspeichern, welche von einer Policy stammen. Folgende Daten werden dabei erfasst:
- version: Die Dokumentenversion, für welche eine Zweitveröffentlichung erlaubt ist.
- embargoAmount und embargoUnit: Die Sperrfrist (Embargo) für den Zugang zum Dokument, wobei embargoAmount die numerische Dauer und embargoUnit die Einheit (z. B. Monate oder Jahre) angibt.
- license: Die Lizenz einer Zweitveröffentlichung.
- uri: Die URI der Policy.
Die Klasse enthält Getter- und Setter-Methoden, um auf die einzelnen Felder zuzugreifen und sie zu modifizieren, was eine flexible Datenmanipulation ermöglicht.
Die abstrakte Klasse ItemAbstract dient als Basisklasse, von der zwei konkrete Klassen abgeleitet werden: PublishedItem und WorkflowItem. Diese Klassen repräsentieren unterschiedliche Arten von "Items" im Repositorium und erben gemeinsame Attribute und Methoden von ItemAbstract, die ihnen eine einheitliche Struktur und Funktionalität bieten.
- id: Eine eindeutige ID des Items. Zum Beispiel die Workflow ID, welche sich von der UUID unterscheidet.
- uuid: Ein eindeutiger Bezeichner (UUID) zur Identifizierung des Items, unabhängig davon, in welchem Stadium des Workflows sich das Item befindet.
- issn: Die International Standard Serial Number (ISSN) des Journals des Items.
- publisher: Der Name des Verlags oder der Institution, die das Item veröffentlicht hat.
- type: Der Der Publikationstyp (z.B. Artikel, Buch) des Items.
Die Klasse enthält Getter- und Setter-Methoden für den Zugriff auf die Attribute und die Datenmanipulation erlauben.
Als abstrakte Klasse kann ItemAbstract selbst nicht instanziiert werden. Stattdessen werden PublishedItem und WorkflowItem verwendet, um die jeweiligen Items darzustellen. Beide Klassen erben die gemeinsamen Attribute und Methoden, können jedoch zusätzliche, spezialisierte Attribute oder Methoden enthalten, die für ihre spezifischen Anforderungen notwendig sind.
./src/main/java/ch/zhaw/hsb/aurora/enricher/Organisation
Im Organisations-Ordner befinden sich die Klassen, welche modifiziert werden können, um das Tool an die eigenen Anforderungen des Repositoriums anzupassen.
Die Klasse OrganisationControllerAbstract ist eine abstrakte Controller-Klasse, die von der übergeordneten Klasse EnrichmentControllerAbstract erbt. Sie ist für die Steuerung von organisations-spezifischen Logiken zuständig.
In unserem Beispiel ist die Klasse leer. Es gibt hier jedoch die Möglichkeiten Erweiterungen hinzuzufügen, wie zum Beispiel die Abfrage der Section des Metadatenfeldes dynamisch zu gestalten.
Als abstrakte Klasse kann OrganisationControllerAbstract nicht direkt instanziiert werden, sodass die Provider Controller von ihr erben.
Die Klasse OrganisationItemServiceAbstract ist eine abstrakte Service-Klasse, die von der übergeordneten Klasse ItemServiceAbstract erbt. Sie enthält eine Methode zur Vorbereitung des Inputs für das Metadatenfeld.
Die abstrakte Klasse OrganisationItemServiceAbstract kann nicht direkt instanziiert werden. Sie dient vielmehr als Grundlage für Items, die sich in verschiedenen Zuständen wie PublishedItem oder WorkflowItem befinden.
Für jeden Provider wird ein eigener Service erstellt. Im OrganisationCSVService und im OrganisationSherpaRomeoService wird festgelegt, wie das EnrichmentModel mit den Daten befüllt werden soll. Der OrganisationSherpaRomeoService definiert zusätzlich, wie der Output von SherpaRomeo verarbeitet wird, einschließlich der Vorverarbeitung der Daten und der Anwendung von Ausschlusskriterien.
./src/main/java/ch/zhaw/hsb/aurora/enricher/Service
Im Service-Ordner sind alle Services abgelegt, die für die Bearbeitung von Dateien, Items, Providern und Anfragen ans Repositorium erforderlich sind. Hier befinden sich auch die abstrakten Service-Klassen, die im Organisationsordner überschrieben werden können.
- File: Enthält Funktionen, die das Lesen und Manipulieren von CSV-Dateien ermöglichen.
- Item: Beinhaltet die Funktionalitäten für Items sowie die spezifischen Funktionen der einzelnen Itemzustände wie WorkflowItem und PublishedItem.
- Provider: Umfasst die Funktionen der Provider-Services, die definieren, wie die Informationen zur Zweitveröffentlichung abgerufen werden. In unseren Beispielen sucht der SherpaRomeoService mithilfe der ISSN der Publikation nach den entsprechenden Policies, während der CSVService im Policies-CSV nach Policies sucht, die auf dem Namen des Publishers und dem Publikationstyp basieren.
- Request: Beinhaltet die Funktionen zum An- und Abfragen des Repositoriums.
Nachdem das Metadatenfeld im Repositorium um Informationen zur Zweitveröffentlichung der Items ergänzt wurde, können diese Informationen über die Suche im Repositorium gezielt gefunden werden. Anschließend besteht die Möglichkeit, die entsprechenden Autoren zu kontaktieren, um die Volltexte der betreffenden Publikationen anzufordern und zur Veröffentlichung bereitzustellen.
./src/main/resources/files/input/self-archiving-policies.csv
Die Datei enthält umfassende Informationen zu den Zweitveröffentlichungen, die pro Verlag und Publikationstyp dokumentiert sind.
Zu den erfassten Informationen gehören dieselben Informationen, welche im EnrichmentModel hinterlegt werden. Für zusätzliche Anmerkungen oder Hinweise, die nicht durch die standardisierten Felder abgedeckt werden, steht ein Freitextfeld namens Comments zur Verfügung. Abschließend wird im Feld Last Check das Datum der letzten Überprüfung der eingetragenen Informationen festgehalten, um sicherzustellen, dass die Daten aktuell und korrekt sind.
| Publisher | PublicationType | Version | EmbargoAmount | EmbargoUnit | License | URL | Comments | Last Check |
|---|---|---|---|---|---|---|---|---|
| Routledge | Buchbeitrag | Accepted | 12 | Months | CC BY-NC-ND | https://www.routledge.com/our-products/open-access-books/publishing-oa-books/chapters | "One chapter per author. Credit line: This is an Accepted Manuscript of a book chapter published by Routledge/CRC Press in [BOOK TITLE] on [date of publication], available online: http://www.routledge.com/[BOOK ISBN URL] or http://www.crcpress.com/[BOOK ISBN URL]." | 02.08.2024 |

