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}} - > # internetMediaType bei Dateiendung .pdf in URL einheitlich auf application/pdf setzen "$CLIENT" -P {{.PORT}} "{{.PROJECT}}" --apply config/mime.json > {{.LOG}} - > # 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"