Harvesting und Transformation der Daten des Zeitschriftenservers der Ruhr-Universität Bochum (RUB) für das Portal noah.nrw
Dieser Workflow harvestet die Daten des Zeitschriftenservers der RUB im Format Dublin Core und transformiert diese in METS/MODS für das Portal noah.nrw.
Die Daten in diesem Repository werden alle 24 Stunden nachts ab 03:21 Uhr aktualisiert. (pausiert)
- GNU/Linux (getestet mit Fedora 32)
- JAVA 8+ (für OpenRefine)
- PHP 7.3+ und Composer (für VuFindHarvest)
- go-task 3.10.0+
- xmllint (libxml2)
Der Workflow wird in Taskfile definiert und kann entweder lokal (task default
) oder mit GitHub Actions ausgeführt werden. Er besteht aus zwei Hauptbestandteilen:
-
Der Task
harvest
lädt die öffentlichen Datensätze der gehosteten Zeitschriften über OAI-PMH-Schnittstellen im Format Dublin Core. Das Ergebnis sind XML-Dateien im Verzeichnis input. -
Der Task
transform
transformiert die heruntergeladenen Daten in METS/MODS. Das Ergebnis sind XML-Dateien im Verzeichnis output.
Beide genannten Tasks verwenden einen Cache, um nur neue Daten abzurufen bzw. zu verarbeiten. Über OAI bekanntgemachte Löschungen werden berücksichtigt. Der Task reset
führt bei Bedarf ein vollständiges Harvesting inklusive Transformation aus.
Die Ausgangsdaten werden wie folgt in METS/MODS übertragen:
Generell:
- id: Nummer aus OAI identifier mit Präfix
rub-journals_
MODS:
- titleInfo@lang: dc:title@xml:lang mit Mapping auf iso693-2b
- titleInfo@type:
translated
wenn dc:language =deu
und dc:title@xml:lang nichtde-DE
- titleInfo/title: 1. Teil von dc:title vor Trennzeichen
:
, Artikel am Anfang entfernen und Doppelpunkt am Ende entfernen - titleInfo/nonsort: Artikel am Anfang von dc:title
- titleInfo/subTitle: 2. Teil von dc:title nach Trennzeichen
:
und Doppelpunkt am Ende entfernen - name@type:
personal
(wenn name/displayForm vorhanden) name@authority=gnd@valueURI- name/displayForm: dc:creator wenn es
,
und nicht-, Editors
enthält - name/namePart@type=family: 1. Teil von name/displayForm vor Trennzeichen
,
- name/namePart@type=given: 2. Teil von name/displayForm nach Trennzeichen
,
name/nameIdentifier@type=orcid- name/role/roleTerm@authority=marcrelator:
ctb
(wenn name/displayform vorhanden) - typeOfResource:
text
- genre@authority=dini:
article
- originInfo/dateIssued: dc:date
- originInfo/dateIssued@keyDate:
yes
(wenn dc:date vorhanden) originInfo/dateOtheroriginInfo/dateOther@keyDate- language/languageTerm@authority=iso639-2b: dc:language mit Mapping auf iso693-2b
- physicalDescription/extent@unit=page: Seitenzahlen extrahieren aus Literaturangabe in dc:source und Differenz berechnen
- abstract: dc:description
- abstract@lang: dc:description@xml:lang mit Mapping auf iso693-2b
notenote@type- subject@lang: dc:subject@xml:lang mit Mapping auf iso693-2b
- subject/topic: dc:subject mit Trennzeichen
,
sowie;
aufteilen classification@authority=ddcclassification@authority=ioo@displayLabel- relatedItem@type:
host
(wenn relatedItem/titleInfo/title vorhanden) - relatedItem/titleInfo/title: 1. Teil von dc:source mit Trennzeichen
;
(mit Filter dc:source@xml:lang aufde-DE
) - relatedItem/originInfo/publisher: dc:publisher
- relatedItem/identifier@type=issn: Werte aus dc:source im Format 1234-5678 und davon nur den ersten Wert und Bindestrich entfernen
- relatedItem/part/detail@type=volume/number: 2. Teil von dc:source mit Trennzeichen
;
und daraus Nummer die aufBd.
folgt (mit Filter dc:source@xml:lang aufde-DE
) - relatedItem/part/detail@type=issue/number: 2. Teil von dc:source mit Trennzeichen
;
und daraus Nummer die aufNr.
folgt (mit Filter dc:source@xml:lang aufde-DE
) - relatedItem/part/extent@unit=page/start: Letzter Teil von dc:source mit Trennzeichen
;
und daraus Teil 1 (Nummer) mit Trennzeichen-
(mit Filter dc:source@xml:lang aufde-DE
) - relatedItem/part/extent@unit=page/end: Letzter Teil von dc:source mit Trennzeichen
;
und daraus Teil 2 (Nummer) mit Trennzeichen-
(mit Filter dc:source@xml:lang aufde-DE
) identifier@type=urn- identifier@type=doi: DOIs (beginnend mit 10.) aus dc:identifier
identifier@type=sys- accessCondition: Für
creativecommons.org
in dc:rights den Canonical Name aus der URL extrahieren - accessCondition@xlink:href: URL aus dc:rights (mit Filter
creativecommons.org
) - extension/vl:doctype:
oaArticle
- recordInfo/recordIdentifier: wie id (s.o.), Umsetzung direkt im Template
METS:
- fileSec/fileGrp@USE:
pdf upload
für das erste Vorkommen vonapplication/pdf
in dc:format;generic file
für alle anderen Links (beginnend mithttp
) aus dc:relation- Datensätze ohne Direktlink auf ein PDF (d.h. kein
application/pdf
in dc:format) löschen
- Datensätze ohne Direktlink auf ein PDF (d.h. kein
- fileSec/fileGrp/file@MIMETYPE: dc:format
- fileSec/fileGrp/file/Flocat@xlink:href: Links (beginnend mit
http
) aus dc:relation und/view/
durch/download/
ersetzen structMap/div@LABEL