2021-05-11 22:20:40 +02:00
version : '3'
tasks :
main :
desc : pub UB Bielefeld
vars :
MINIMUM : 12000 # Mindestanzahl der zu erwartenden Datensätze
PROJECT : '{{splitList ":" .TASK | first}}' # results in the task namespace, which is identical to the directory name
cmds :
- task : harvest
- task : refine
# Folgende Tasks beginnend mit ":" sind für alle Datenquellen gleich in Taskfile.yml definiert
- task : : check
vars : {PROJECT : '{{.PROJECT}}' , MINIMUM : '{{.MINIMUM}}' }
- task : : split
vars : {PROJECT : '{{.PROJECT}}' }
- task : : validate
vars : {PROJECT : '{{.PROJECT}}' }
- task : : zip
vars : {PROJECT : '{{.PROJECT}}' }
- task : : diff
vars : {PROJECT : '{{.PROJECT}}' }
harvest :
dir : ./{{.PROJECT}}/harvest
desc : pub UB Bielefeld harvesten
vars :
URL : https://pub.uni-bielefeld.de/oai
FORMAT : mods
SET : open_access
PROJECT : '{{splitList ":" .TASK | first}}'
cmds :
- METHA_DIR=$PWD metha-sync --format {{.FORMAT}} --set {{.SET}} --no-intervals {{.URL}} # Selective Harvesting mit metha schlägt bei diesem Endpoint fehl, daher mit Option --no-intervals
- METHA_DIR=$PWD metha-cat --format {{.FORMAT}} --set {{.SET}} {{.URL}} > {{.PROJECT}}.xml
status :
- test -f ./{{.PROJECT}}.xml # Da Selective Harvesting nicht funktioniert, hier Statuscheck ob Datei existent, um nicht jedesmal einen Gesamtdatenabzug zu laden. Aktualisierungen müssen bis auf Weiteres manuell erfolgen mit task bielefeld:harvest --force
refine :
dir : ./{{.PROJECT}}
vars :
PORT : 3337 # assign a different port for each project
RAM : 4G # maximum RAM for OpenRefine java heap space
PROJECT : '{{splitList ":" .TASK | first}}'
LOG : '>(tee -a "refine/{{.PROJECT}}.log") 2>&1'
cmds :
- mkdir -p refine
- task : : start # launch OpenRefine
vars : {PROJECT : '{{.PROJECT}}' , PORT : '{{.PORT}}' , RAM : '{{.RAM}}' }
- > # Import (erfordert absoluten Pfad zur XML-Datei)
"$CLIENT" -P {{.PORT}}
--create "$(readlink -m harvest/{{.PROJECT}}.xml)"
--recordPath Records --recordPath Record
--storeEmptyStrings false --trimStrings true
--projectName "{{.PROJECT}}"
> {{.LOG}}
- > # Vorverarbeitung : Identifier in erste Spalte id; nicht benötigte Spalten (ohne differenzierende Merkmale) löschen; verbleibende Spalten umbenennen (Pfad entfernen)
"$CLIENT" -P {{.PORT}} "{{.PROJECT}}"
--apply config/vorverarbeitung.json
> {{.LOG}}
- > # Datensätze ohne PDF löschen
"$CLIENT" -P {{.PORT}} "{{.PROJECT}}"
--apply config/nur-mit-pdf.json
> {{.LOG}}
- > # Index : Spalte index mit row.record.index generieren
"$CLIENT" -P {{.PORT}} "{{.PROJECT}}"
--apply config/index.json
> {{.LOG}}
- > # Sortierung nonSort für das erste Element in title
"$CLIENT" -P {{.PORT}} "{{.PROJECT}}"
--apply config/nonsort.json
> {{.LOG}}
- > # ORCID-iDs aus name - description extrahieren
"$CLIENT" -P {{.PORT}} "{{.PROJECT}}"
--apply config/orcid.json
> {{.LOG}}
- > # Rollenangaben in name - role - roleTerm in MARC relators konvertieren (nur für Personen)
"$CLIENT" -P {{.PORT}} "{{.PROJECT}}"
--apply config/roleterm.json
> {{.LOG}}
- > # doctype für mods:genre aus setSpec in oai header extrahieren
"$CLIENT" -P {{.PORT}} "{{.PROJECT}}"
--apply config/doctype.json
> {{.LOG}}
- > # Visual Library doctype aus doctype ableiten
"$CLIENT" -P {{.PORT}} "{{.PROJECT}}"
--apply config/vldoctype.json
> {{.LOG}}
- > # ddc für mods:classification aus setSpec in oai header extrahieren
"$CLIENT" -P {{.PORT}} "{{.PROJECT}}"
--apply config/ddc.json
> {{.LOG}}
- > # Sonderzeichen in relatedItem - location - url encoden
"$CLIENT" -P {{.PORT}} "{{.PROJECT}}"
--apply config/urlencode.json
> {{.LOG}}
2021-07-06 13:39:07 +02:00
- > # internetMediaType bei Dateiendung .pdf in URL einheitlich auf application/pdf setzen
"$CLIENT" -P {{.PORT}} "{{.PROJECT}}"
--apply config/mime.json
> {{.LOG}}
2021-05-11 22:20:40 +02:00
- > # Rechteangaben aus dc:rights in Format OAI_DC ergänzen
"$CLIENT" -P {{.PORT}} "{{.PROJECT}}"
--apply config/rights.json
> {{.LOG}}
- > # Anreicherung HT-Nummer via lobid-resources : Bei mehreren URNs ODER-Suche; bei mehreren Treffern wird nur der erste übernommen
"$CLIENT" -P {{.PORT}} "{{.PROJECT}}"
--apply config/hbz.json
> {{.LOG}}
- | # Export in METS:MODS mit Templating
"$CLIENT" -P {{.PORT}} "{{.PROJECT}}" --export --template "$(< config/template.txt)" --rowSeparator "" --output "$(readlink -m refine/{{.PROJECT}}.txt)" > {{.LOG}}
- | # print allocated system resources
PID="$(lsof -t -i:{{.PORT}})"
echo "used $(($(ps --no-headers -o rss -p "$PID") / 1024)) MB RAM" > {{.LOG}}
echo "used $(ps --no-headers -o cputime -p "$PID") CPU time" > {{.LOG}}
- task : : stop # shut down OpenRefine and archive the OpenRefine project
vars : {PROJECT : '{{.PROJECT}}' , PORT : '{{.PORT}}' }
sources :
- Taskfile.yml
- harvest/{{.PROJECT}}.xml
- config/**
generates :
- refine/{{.PROJECT}}.openrefine.tar.gz
- refine/{{.PROJECT}}.txt
ignore_error : true # workaround to avoid an orphaned Java process on error https://github.com/go-task/task/issues/141
linkcheck :
desc : pub UB Bielefeld links überprüfen
vars :
PROJECT : '{{splitList ":" .TASK | first}}'
cmds :
- task : : linkcheck
vars : {PROJECT : '{{.PROJECT}}' }
delete :
desc : pub UB Bielefeld cache löschen
vars :
PROJECT : '{{splitList ":" .TASK | first}}'
cmds :
- task : : delete
vars : {PROJECT : '{{.PROJECT}}' }
default : # enable standalone execution (running `task` in project directory)
cmds :
- DIR="${PWD##*/}:main" && cd .. && task "$DIR"