Hinweis auf Prototyp; Kommentare vereinheitlicht
This commit is contained in:
parent
316ce16015
commit
9c85c91042
35
README.md
35
README.md
|
@ -1,6 +1,8 @@
|
||||||
# Datenintegration für noah.nrw
|
# Datenintegration für noah.nrw
|
||||||
Harvesting von OAI-PMH-Schnittstellen und Transformation in METS/MODS für das Portal [noah.nrw](https://noah.nrw/)
|
Harvesting von OAI-PMH-Schnittstellen und Transformation in METS/MODS für das Portal [noah.nrw](https://noah.nrw/)
|
||||||
|
|
||||||
|
> **:warning: Dies ist ein Prototyp für die Beta-Version des Portals noah.nrw; für den Produktivbetrieb ist der Einsatz von [metafacture](https://github.com/metafacture) geplant.**
|
||||||
|
|
||||||
## Datenfluss
|
## Datenfluss
|
||||||
|
|
||||||
![Datenflussdiagramm](flowchart.svg)
|
![Datenflussdiagramm](flowchart.svg)
|
||||||
|
@ -28,21 +30,20 @@ Harvesting von OAI-PMH-Schnittstellen und Transformation in METS/MODS für das P
|
||||||
2. [OpenRefine 3.4.1](https://github.com/OpenRefine/OpenRefine/releases/tag/3.4.1) (benötigt JAVA 8+)
|
2. [OpenRefine 3.4.1](https://github.com/OpenRefine/OpenRefine/releases/tag/3.4.1) (benötigt JAVA 8+)
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
# download OpenRefine
|
# in Unterverzeichnis openrefine installieren
|
||||||
wget -O openrefine.tar.gz https://github.com/OpenRefine/OpenRefine/releases/download/3.4.1/openrefine-linux-3.4.1.tar.gz
|
wget -O openrefine.tar.gz https://github.com/OpenRefine/OpenRefine/releases/download/3.4.1/openrefine-linux-3.4.1.tar.gz
|
||||||
# install OpenRefine in subdirectory openrefine
|
|
||||||
mkdir -p openrefine
|
mkdir -p openrefine
|
||||||
tar -xzf openrefine.tar.gz -C openrefine --strip 1 && rm openrefine.tar.gz
|
tar -xzf openrefine.tar.gz -C openrefine --strip 1 && rm openrefine.tar.gz
|
||||||
# do not try to open OpenRefine in browser
|
# automatisches Starten des Browsers abschalten
|
||||||
sed -i '$ a JAVA_OPTIONS=-Drefine.headless=true' "openrefine/refine.ini"
|
sed -i '$ a JAVA_OPTIONS=-Drefine.headless=true' "openrefine/refine.ini"
|
||||||
# set autosave period from 5 minutes to 25 hours
|
# Zeitraum für automatisches Speichern von 5 Minuten auf 25 Stunden erhöhen
|
||||||
sed -i 's/#REFINE_AUTOSAVE_PERIOD=60/REFINE_AUTOSAVE_PERIOD=1440/' "openrefine/refine.ini"
|
sed -i 's/#REFINE_AUTOSAVE_PERIOD=60/REFINE_AUTOSAVE_PERIOD=1440/' "openrefine/refine.ini"
|
||||||
```
|
```
|
||||||
|
|
||||||
3. [openrefine-client 0.3.10](https://github.com/opencultureconsulting/openrefine-client/releases/tag/v0.3.10)
|
3. [openrefine-client 0.3.10](https://github.com/opencultureconsulting/openrefine-client/releases/tag/v0.3.10)
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
# install openrefine-client in subdirectory openrefine
|
# in Unterverzeichnis openrefine installieren
|
||||||
mkdir -p openrefine
|
mkdir -p openrefine
|
||||||
wget -O openrefine/openrefine-client https://github.com/opencultureconsulting/openrefine-client/releases/download/v0.3.10/openrefine-client_0-3-10_linux
|
wget -O openrefine/openrefine-client https://github.com/opencultureconsulting/openrefine-client/releases/download/v0.3.10/openrefine-client_0-3-10_linux
|
||||||
chmod +x openrefine/openrefine-client
|
chmod +x openrefine/openrefine-client
|
||||||
|
@ -53,33 +54,29 @@ Harvesting von OAI-PMH-Schnittstellen und Transformation in METS/MODS für das P
|
||||||
a) RPM-basiert (Fedora, CentOS, SLES, etc.)
|
a) RPM-basiert (Fedora, CentOS, SLES, etc.)
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
# download and install rpm package
|
|
||||||
wget https://github.com/miku/metha/releases/download/v0.2.20/metha-0.2.20-0.x86_64.rpm
|
wget https://github.com/miku/metha/releases/download/v0.2.20/metha-0.2.20-0.x86_64.rpm
|
||||||
sudo dnf install ./metha-0.2.20-0.x86_64.rpm && rm metha-0.2.20-0.x86_64.rpm
|
sudo dnf install ./metha-0.2.20-0.x86_64.rpm && rm metha-0.2.20-0.x86_64.rpm
|
||||||
```
|
```
|
||||||
|
|
||||||
b) DEB-basiert (Debian, Ubuntu etc.)
|
b) DEB-basiert (Debian, Ubuntu etc.)
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
# download and install deb package
|
|
||||||
wget https://github.com/miku/metha/releases/download/v0.2.20/metha_0.2.20_amd64.deb
|
wget https://github.com/miku/metha/releases/download/v0.2.20/metha_0.2.20_amd64.deb
|
||||||
sudo apt install ./metha_0.2.20_amd64.deb && rm metha_0.2.20_amd64.deb
|
sudo apt install ./metha_0.2.20_amd64.deb && rm metha_0.2.20_amd64.deb
|
||||||
```
|
```
|
||||||
|
|
||||||
5. [Task 3.2.2](https://github.com/go-task/task/releases/tag/v3.2.2)
|
5. [Task 3.2.2](https://github.com/go-task/task/releases/tag/v3.2.2)
|
||||||
|
|
||||||
a) RPM-basiert (Fedora, CentOS, SLES, etc.)
|
a) RPM-basiert (Fedora, CentOS, SLES, etc.)
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
# download and install rpm package
|
|
||||||
wget https://github.com/go-task/task/releases/download/v3.2.2/task_linux_amd64.rpm
|
wget https://github.com/go-task/task/releases/download/v3.2.2/task_linux_amd64.rpm
|
||||||
sudo dnf install ./task_linux_amd64.rpm && rm task_linux_amd64.rpm
|
sudo dnf install ./task_linux_amd64.rpm && rm task_linux_amd64.rpm
|
||||||
```
|
```
|
||||||
|
|
||||||
b) DEB-basiert (Debian, Ubuntu etc.)
|
b) DEB-basiert (Debian, Ubuntu etc.)
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
# download and install deb package
|
|
||||||
wget https://github.com/go-task/task/releases/download/v3.2.2/task_linux_amd64.deb
|
wget https://github.com/go-task/task/releases/download/v3.2.2/task_linux_amd64.deb
|
||||||
sudo apt install ./task_linux_amd64.deb && rm task_linux_amd64.deb
|
sudo apt install ./task_linux_amd64.deb && rm task_linux_amd64.deb
|
||||||
```
|
```
|
||||||
|
@ -115,7 +112,7 @@ Harvesting von OAI-PMH-Schnittstellen und Transformation in METS/MODS für das P
|
||||||
* Umgebungsvariablen in [Taskfile.yml](Taskfile.yml)
|
* Umgebungsvariablen in [Taskfile.yml](Taskfile.yml)
|
||||||
* Workflow für die Datenquellen in [tasks](tasks)
|
* Workflow für die Datenquellen in [tasks](tasks)
|
||||||
* Beispiel: [tasks/siegen.yml](tasks/siegen.yml)
|
* Beispiel: [tasks/siegen.yml](tasks/siegen.yml)
|
||||||
* Transformationsregeln in [rules](rules)
|
* OpenRefine-Transformationsregeln in [rules](rules)
|
||||||
* Beispiel: [rules/siegen/hbz.json](rules/siegen/hbz.json)
|
* Beispiel: [rules/siegen/hbz.json](rules/siegen/hbz.json)
|
||||||
|
|
||||||
## OAI-PMH Data Provider
|
## OAI-PMH Data Provider
|
||||||
|
|
|
@ -7,7 +7,7 @@ tasks:
|
||||||
desc: harvesten und transformieren
|
desc: harvesten und transformieren
|
||||||
deps: [harvest]
|
deps: [harvest]
|
||||||
cmds:
|
cmds:
|
||||||
- ulimit -n 10000 # prevent "too many open files" exit
|
- ulimit -n 10000 # provisorisch Exit durch "too many open files" vermeiden
|
||||||
- task: refine
|
- task: refine
|
||||||
- task: check
|
- task: check
|
||||||
- task: split
|
- task: split
|
||||||
|
@ -23,22 +23,22 @@ tasks:
|
||||||
|
|
||||||
refine:
|
refine:
|
||||||
dir: data/siegen/refine
|
dir: data/siegen/refine
|
||||||
ignore_error: true # Bei Exit würde java-Prozess verwaisen https://github.com/go-task/task/issues/141
|
ignore_error: true # provisorisch verwaisten Java-Prozess bei Exit vermeiden https://github.com/go-task/task/issues/141
|
||||||
env:
|
env:
|
||||||
PORT: 3334
|
PORT: 3334
|
||||||
RAM: 8G
|
RAM: 8G
|
||||||
PROJECT: siegen
|
PROJECT: siegen
|
||||||
cmds:
|
cmds:
|
||||||
# start OpenRefine
|
# OpenRefine starten
|
||||||
- $OPENREFINE -v warn -p $PORT -m $RAM -d $PWD > openrefine.log 2>&1 &
|
- $OPENREFINE -v warn -p $PORT -m $RAM -d $PWD > openrefine.log 2>&1 &
|
||||||
- timeout 30s bash -c "until curl -s http://localhost:$PORT | cat | grep -q -o OpenRefine ; do sleep 1; done"
|
- timeout 30s bash -c "until curl -s http://localhost:$PORT | cat | grep -q -o OpenRefine ; do sleep 1; done"
|
||||||
# Import (erfordert absoluten Pfad zur XML-Datei)
|
# Import (erfordert absoluten Pfad zur XML-Datei)
|
||||||
- $OPENREFINE_CLIENT -P $PORT --create "$(readlink -e ../harvest/siegen.xml)" --recordPath Records --recordPath Record --storeEmptyStrings false --trimStrings true --projectName $PROJECT
|
- $OPENREFINE_CLIENT -P $PORT --create "$(readlink -e ../harvest/siegen.xml)" --recordPath Records --recordPath Record --storeEmptyStrings false --trimStrings true --projectName $PROJECT
|
||||||
# Vorverarbeitung: Spalte mit Identifier nach Vorne; Nicht benötigte Spalten (ohne differenzierende Merkmale) löschen; verbleibende Spalten umbenennen (Pfad entfernen)
|
# Vorverarbeitung: Identifier in erste Spalte; nicht benötigte Spalten (ohne differenzierende Merkmale) löschen; verbleibende Spalten umbenennen (Pfad entfernen)
|
||||||
- $OPENREFINE_CLIENT -P $PORT --apply ../../../rules/siegen/vorverarbeitung.json $PROJECT
|
- $OPENREFINE_CLIENT -P $PORT --apply ../../../rules/siegen/vorverarbeitung.json $PROJECT
|
||||||
# URNs extrahieren: Dubletten entfernen und verschiedene URNs zusammenführen
|
# URNs extrahieren: Dubletten entfernen und verschiedene URNs zusammenführen
|
||||||
- $OPENREFINE_CLIENT -P $PORT --apply ../../../rules/siegen/urn.json $PROJECT
|
- $OPENREFINE_CLIENT -P $PORT --apply ../../../rules/siegen/urn.json $PROJECT
|
||||||
# Fehlende Direktlinks ergänzen: Wenn keine Angabe in ddb:transfer, dann zusätzlich METS Format abfragen; aus METS Flocat extrahieren und die URLs in ddb:transfer ablegen
|
# Fehlende Direktlinks aus Format METS ergänzen: Wenn keine Angabe in ddb:transfer, dann zusätzlich METS Format abfragen und daraus METS Flocat extrahieren
|
||||||
- $OPENREFINE_CLIENT -P $PORT --apply ../../../rules/siegen/direktlinks.json $PROJECT
|
- $OPENREFINE_CLIENT -P $PORT --apply ../../../rules/siegen/direktlinks.json $PROJECT
|
||||||
# Datensätze ohne Direktlink auf ein PDF löschen
|
# Datensätze ohne Direktlink auf ein PDF löschen
|
||||||
- $OPENREFINE_CLIENT -P $PORT --apply ../../../rules/siegen/nur-mit-pdf.json $PROJECT
|
- $OPENREFINE_CLIENT -P $PORT --apply ../../../rules/siegen/nur-mit-pdf.json $PROJECT
|
||||||
|
@ -46,33 +46,33 @@ tasks:
|
||||||
- $OPENREFINE_CLIENT -P $PORT --apply ../../../rules/siegen/ddc-topic.json $PROJECT
|
- $OPENREFINE_CLIENT -P $PORT --apply ../../../rules/siegen/ddc-topic.json $PROJECT
|
||||||
# Standardisierte Rechteangaben (Canonical Name aus CC Links in dc:rights)
|
# Standardisierte Rechteangaben (Canonical Name aus CC Links in dc:rights)
|
||||||
- $OPENREFINE_CLIENT -P $PORT --apply ../../../rules/siegen/cc.json $PROJECT
|
- $OPENREFINE_CLIENT -P $PORT --apply ../../../rules/siegen/cc.json $PROJECT
|
||||||
# Internet Media Type aus ddb:transfer ableiten: Mapping manuell nach Apache: http://svn.apache.org/viewvc/httpd/httpd/trunk/docs/conf/mime.types?view=markup
|
# Internet Media Type aus ddb:transfer ableiten: Mapping manuell nach Apache http://svn.apache.org/viewvc/httpd/httpd/trunk/docs/conf/mime.types?view=markup
|
||||||
- $OPENREFINE_CLIENT -P $PORT --apply ../../../rules/siegen/mime.json $PROJECT
|
- $OPENREFINE_CLIENT -P $PORT --apply ../../../rules/siegen/mime.json $PROJECT
|
||||||
# DOIs aus Format OAI_DC ergänzen: Für alle Datensätze zusätzlich DC Format abfragen; Aus DC dc:identifier mit xsi:type doi:doi extrahieren
|
# DOIs aus Format OAI_DC ergänzen: Für alle Datensätze zusätzlich DC Format abfragen und daraus dc:identifier mit Typ doi extrahieren
|
||||||
- $OPENREFINE_CLIENT -P $PORT --apply ../../../rules/siegen/doi.json $PROJECT
|
- $OPENREFINE_CLIENT -P $PORT --apply ../../../rules/siegen/doi.json $PROJECT
|
||||||
# Abgleich mit lobid resources für HT-Nummer: teilweise mehrere URNs: wir machen dann eine ODER-Suche bei lobid; teilweise mehrere Treffer für eine URN: wir nehmen hier immer den ersten Treffer bei lobid
|
# Anreicherung HT-Nummer via lobid-resources: Bei mehreren URNs ODER-Suche; bei mehreren Treffern wird nur der erste übernommen
|
||||||
- $OPENREFINE_CLIENT -P $PORT --apply ../../../rules/siegen/hbz.json $PROJECT
|
- $OPENREFINE_CLIENT -P $PORT --apply ../../../rules/siegen/hbz.json $PROJECT
|
||||||
# Für die Sortierung mods:nonSort: nur für das erste Element in dc:title je Datensatz
|
# Sortierung mods:nonSort für das erste Element in dc:title
|
||||||
- $OPENREFINE_CLIENT -P $PORT --apply ../../../rules/siegen/nonsort.json $PROJECT
|
- $OPENREFINE_CLIENT -P $PORT --apply ../../../rules/siegen/nonsort.json $PROJECT
|
||||||
# DINI Publikationstypen aus dc:type extrahieren
|
# DINI Publikationstypen aus dc:type extrahieren
|
||||||
- $OPENREFINE_CLIENT -P $PORT --apply ../../../rules/siegen/dini.json $PROJECT
|
- $OPENREFINE_CLIENT -P $PORT --apply ../../../rules/siegen/dini.json $PROJECT
|
||||||
# Visual Library doctype aus dc:type: Wenn thesis:level == thesis.habiliation dann oaHabil
|
# Visual Library doctype aus dc:type: Wenn thesis:level == thesis.habilitation dann doctype oaHabil
|
||||||
- $OPENREFINE_CLIENT -P $PORT --apply ../../../rules/siegen/doctype.json $PROJECT
|
- $OPENREFINE_CLIENT -P $PORT --apply ../../../rules/siegen/doctype.json $PROJECT
|
||||||
# Links auf Verfügbarkeit prüfen: ermittelt HTTP status code (z.B. 200)
|
# Links auf Volltexte prüfen: HTTP status code ermitteln (z.B. 200)
|
||||||
- $OPENREFINE_CLIENT -P $PORT --apply ../../../rules/siegen/linkcheck.json $PROJECT
|
- $OPENREFINE_CLIENT -P $PORT --apply ../../../rules/siegen/linkcheck.json $PROJECT
|
||||||
# Pro Zeile ein Datensatz und anschließend leere Zeilen löschen
|
# Datenstruktur für Templating vorbereiten: Pro Zeile ein Datensatz und leere Zeilen löschen
|
||||||
- $OPENREFINE_CLIENT -P $PORT --apply ../../../rules/siegen/join.json $PROJECT
|
- $OPENREFINE_CLIENT -P $PORT --apply ../../../rules/siegen/join.json $PROJECT
|
||||||
# Export mit Templating
|
# Export in METS:MODS mit Templating
|
||||||
- |
|
- |
|
||||||
$OPENREFINE_CLIENT -P $PORT --export --template "$(< ../../../rules/siegen/template.txt)" --rowSeparator "
|
$OPENREFINE_CLIENT -P $PORT --export --template "$(< ../../../rules/siegen/template.txt)" --rowSeparator "
|
||||||
<!-- SPLIT -->
|
<!-- SPLIT -->
|
||||||
" --output siegen.txt $PROJECT
|
" --output siegen.txt $PROJECT
|
||||||
# Export für Debugging
|
# Export für Debugging
|
||||||
- $OPENREFINE_CLIENT -P $PORT --export --output siegen-debug.tsv $PROJECT
|
- $OPENREFINE_CLIENT -P $PORT --export --output siegen-debug.tsv $PROJECT
|
||||||
# stop OpenRefine
|
# OpenRefine beenden
|
||||||
- ps -o start,etime,%mem,%cpu,rss -p $(lsof -t -i:$PORT) # print server load
|
- ps -o start,etime,%mem,%cpu,rss -p $(lsof -t -i:$PORT) # Statistik
|
||||||
- kill -9 $(lsof -t -i:$PORT) # SIGKILL prevents saving projects
|
- kill -9 $(lsof -t -i:$PORT) # SIGKILL (-9) verhindert unnötigen Speichervorgang
|
||||||
- rm -rf ./*.project* && rm -f workspace.json # delete temporary OpenRefine files
|
- rm -rf ./*.project* && rm -f workspace.json # temporäre Dateien von OpenRefine löschen
|
||||||
sources:
|
sources:
|
||||||
- ../harvest/siegen.xml
|
- ../harvest/siegen.xml
|
||||||
- ../../../rules/siegen/*.json
|
- ../../../rules/siegen/*.json
|
||||||
|
@ -85,10 +85,8 @@ tasks:
|
||||||
check:
|
check:
|
||||||
dir: data/siegen/refine
|
dir: data/siegen/refine
|
||||||
cmds:
|
cmds:
|
||||||
# check OpenRefine log for any warnings
|
# Logdatei von OpenRefine auf Warnungen und Fehlermeldungen prüfen
|
||||||
- if grep -i 'exception\|error' openrefine.log; then echo 1>&2 "log contains warnings!" && exit 1; fi
|
- if grep -i 'exception\|error' openrefine.log; then echo 1>&2 "log contains warnings!" && exit 1; fi
|
||||||
# TODO: Prüfung, ob Mindestmenge an Datensätzen vorhanden ist (z.B. mit wc -l)
|
|
||||||
# TODO: Linkcheck-Ergebnis aus siegen-debug.tsv mit grep auf nicht 200 prüfen
|
|
||||||
|
|
||||||
split:
|
split:
|
||||||
dir: data/siegen/split
|
dir: data/siegen/split
|
||||||
|
|
Loading…
Reference in New Issue