noah/tasks/siegen.yml

150 lines
6.8 KiB
YAML
Raw Normal View History

2021-01-14 16:51:39 +01:00
# https://taskfile.dev
version: '3'
tasks:
default:
desc: harvesten und transformieren
deps: [harvest]
cmds:
- task: refine
- task: check
- task: split
- task: validate
- task: zip
- task: diff
2021-01-14 16:51:39 +01:00
harvest:
desc: nur harvesten
dir: data/siegen/harvest
cmds:
- METHA_DIR=$PWD metha-sync --format xMetaDissPlus https://dspace.ub.uni-siegen.de/oai/request
- METHA_DIR=$PWD metha-cat --format xMetaDissPlus https://dspace.ub.uni-siegen.de/oai/request > siegen.xml
refine:
dir: data/siegen/refine
ignore_error: true # provisorisch verwaisten Java-Prozess bei Exit vermeiden https://github.com/go-task/task/issues/141
2021-01-14 16:51:39 +01:00
env:
PORT: 3334
RAM: 8G
PROJECT: siegen
cmds:
# OpenRefine starten
2021-01-14 16:51:39 +01:00
- $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"
# 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
# Vorverarbeitung: Identifier in erste Spalte; nicht benötigte Spalten (ohne differenzierende Merkmale) löschen; verbleibende Spalten umbenennen (Pfad entfernen)
2021-01-14 16:51:39 +01:00
- $OPENREFINE_CLIENT -P $PORT --apply ../../../rules/siegen/vorverarbeitung.json $PROJECT
# URNs extrahieren: Dubletten entfernen und verschiedene URNs zusammenführen
- $OPENREFINE_CLIENT -P $PORT --apply ../../../rules/siegen/urn.json $PROJECT
# Fehlende Direktlinks aus Format METS ergänzen: Wenn keine Angabe in ddb:transfer, dann zusätzlich METS Format abfragen und daraus METS Flocat extrahieren
2021-01-14 16:51:39 +01:00
- $OPENREFINE_CLIENT -P $PORT --apply ../../../rules/siegen/direktlinks.json $PROJECT
# Datensätze ohne Direktlink auf ein PDF löschen
- $OPENREFINE_CLIENT -P $PORT --apply ../../../rules/siegen/nur-mit-pdf.json $PROJECT
# Aufteilung dc:subject in ddc und topic
- $OPENREFINE_CLIENT -P $PORT --apply ../../../rules/siegen/ddc-topic.json $PROJECT
# Standardisierte Rechteangaben (Canonical Name aus CC Links in dc:rights)
- $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
2021-01-14 16:51:39 +01:00
- $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 und daraus dc:identifier mit Typ doi extrahieren
2021-01-14 16:51:39 +01:00
- $OPENREFINE_CLIENT -P $PORT --apply ../../../rules/siegen/doi.json $PROJECT
# Anreicherung HT-Nummer via lobid-resources: Bei mehreren URNs ODER-Suche; bei mehreren Treffern wird nur der erste übernommen
2021-01-14 16:51:39 +01:00
- $OPENREFINE_CLIENT -P $PORT --apply ../../../rules/siegen/hbz.json $PROJECT
# Sortierung mods:nonSort für das erste Element in dc:title
2021-01-14 16:51:39 +01:00
- $OPENREFINE_CLIENT -P $PORT --apply ../../../rules/siegen/nonsort.json $PROJECT
# DINI Publikationstypen aus dc:type extrahieren
- $OPENREFINE_CLIENT -P $PORT --apply ../../../rules/siegen/dini.json $PROJECT
# Visual Library doctype aus dc:type: Wenn thesis:level == thesis.habilitation dann doctype oaHabil
2021-01-14 16:51:39 +01:00
- $OPENREFINE_CLIENT -P $PORT --apply ../../../rules/siegen/doctype.json $PROJECT
2021-01-15 18:35:32 +01:00
#TODO # Links auf Volltexte prüfen: HTTP status code ermitteln (z.B. 200)
#TODO - $OPENREFINE_CLIENT -P $PORT --apply ../../../rules/siegen/linkcheck.json $PROJECT
# Datenstruktur für Templating vorbereiten: Pro Zeile ein Datensatz und leere Zeilen löschen
2021-01-14 16:51:39 +01:00
- $OPENREFINE_CLIENT -P $PORT --apply ../../../rules/siegen/join.json $PROJECT
# Export in METS:MODS mit Templating
2021-01-14 16:51:39 +01:00
- |
$OPENREFINE_CLIENT -P $PORT --export --template "$(< ../../../rules/siegen/template.txt)" --rowSeparator "
<!-- SPLIT -->
" --output siegen.txt $PROJECT
# Export für Debugging
- $OPENREFINE_CLIENT -P $PORT --export --output siegen-debug.tsv $PROJECT
# OpenRefine beenden
- ps -o start,etime,%mem,%cpu,rss -p $(lsof -t -i:$PORT) # Statistik
- kill -9 $(lsof -t -i:$PORT) # SIGKILL (-9) verhindert unnötigen Speichervorgang
- rm -rf ./*.project* && rm -f workspace.json # temporäre Dateien von OpenRefine löschen
2021-01-14 16:51:39 +01:00
sources:
- ../harvest/siegen.xml
- ../../../rules/siegen/*.json
- ../../../rules/siegen/template.txt
# - ../../../rules/common/*.json
generates:
- siegen.txt
- siegen-debug.tsv
check:
dir: data/siegen/refine
cmds:
# Logdatei von OpenRefine auf Warnungen und Fehlermeldungen prüfen
- if grep -i 'exception\|error' openrefine.log; then echo 1>&2 "Logdatei $PWD/openrefine.log enthält Warnungen!" && exit 1; fi
# Prüfen, ob Mindestanzahl von 1250 Datensätzen generiert wurde
- if (( 1250 > $(grep -c recordIdentifier wuppertal.txt) )); then echo 1>&2 "Unerwartet geringe Anzahl an Datensätzen in $PWD/wuppertal.txt!" && exit 1; fi
2021-01-14 16:51:39 +01:00
split:
dir: data/siegen/split
cmds:
# in Einzeldateien aufteilen
- csplit -q ../refine/siegen.txt --suppress-matched '/<!-- SPLIT -->/' "{*}"
# ggf. vorhandene XML-Dateien löschen
- rm -f *.xml
# Identifier als Dateinamen
- for f in xx*; do mv "$f" "$(xmllint --xpath "//*[local-name(.) = 'recordIdentifier']/text()" "$f").xml"; done
sources:
- ../refine/siegen.txt
generates:
- ./*.xml
validate:
dir: data/siegen
2021-01-14 16:51:39 +01:00
cmds:
# Validierung gegen METS Schema
- wget -q -nc https://www.loc.gov/standards/mets/mets.xsd
- xmllint --schema mets.xsd --noout split/*.xml > validate.log 2>&1
sources:
- split/*.xml
generates:
- validate.log
zip:
dir: data/siegen
2021-01-14 16:51:39 +01:00
cmds:
# ZIP-Archiv mit Zeitstempel erstellen
- zip -q -FS -j siegen_{{.DATE}}.zip split/*.xml
sources:
- split/*.xml
generates:
- siegen_{{.DATE}}.zip
diff:
dir: data/siegen
cmds:
# Inhalt der beiden letzten ZIP-Archive vergleichen
- unzip -q -d old $(ls -t *.zip | sed -n 2p)
- unzip -q -d new $(ls -t *.zip | sed -n 1p)
- diff -d old new > diff.log || exit 0
- rm -rf old new
# Diff prüfen, ob es weniger als 500 Zeilen enthält
- if (( 500 < $(wc -l <diff.log) )); then echo 1>&2 "Unerwartet große Änderungen in $PWD/diff.log!" && exit 1; fi
sources:
- split/*.xml
generates:
- diff.log
status:
# Task nicht ausführen, wenn weniger als zwei ZIP-Archive vorhanden
- test -z $(ls -t *.zip | sed -n 2p)
2021-01-14 16:51:39 +01:00
delete:
2021-01-15 18:35:09 +01:00
desc: harvesting cache löschen
2021-01-14 16:51:39 +01:00
cmds:
2021-01-15 18:35:09 +01:00
- rm -rf data/siegen/harvest