diff --git a/Taskfile.yml b/Taskfile.yml index 814ff3d..dc95cea 100644 --- a/Taskfile.yml +++ b/Taskfile.yml @@ -37,6 +37,30 @@ tasks: - task: wuppertal:default - task: siegen:default + openrefine-start: + label: '{{.TASK}}-{{.PROJECT}}' + dir: data/{{.PROJECT}}/refine + cmds: + - test -n "{{.PROJECT}}"; test -n "{{.PORT}}"; test -n "{{.RAM}}" + # OpenRefine starten und Logdatei schreiben für spätere checks + - $OPENREFINE -v warn -p {{.PORT}} -m {{.RAM}} -d $PWD > openrefine.log 2>&1 & + # Warten bis OpenRefine erreichbar ist + - timeout 30s bash -c "until curl -s http://localhost:{{.PORT}} | cat | grep -q -o OpenRefine ; do sleep 1; done" + + openrefine-stop: + label: '{{.TASK}}-{{.PROJECT}}' + dir: data/{{.PROJECT}}/refine + cmds: + - test -n "{{.PROJECT}}"; test -n "{{.PORT}}" + # Statistik zu Laufzeit und Ressourcenverbrauch + - ps -o start,etime,%mem,%cpu,rss -p $(lsof -t -i:{{.PORT}}) + # OpenRefine herunterfahren + - PID=$(lsof -t -i:{{.PORT}}); kill $PID; while ps -p $PID > /dev/null; do sleep 1; done + # OpenRefine-Projekt für Debugging archivieren + - tar cfz {{.PROJECT}}.openrefine.tar.gz -C $(grep -l {{.PROJECT}} *.project/metadata.json | cut -d '/' -f 1) . + # Temporäre Dateien löschen + - rm -rf ./*.project* && rm -f workspace.json + check: label: '{{.TASK}}-{{.PROJECT}}' dir: data/{{.PROJECT}}/refine diff --git a/tasks/siegen.yml b/tasks/siegen.yml index d7114d0..0827e16 100644 --- a/tasks/siegen.yml +++ b/tasks/siegen.yml @@ -3,91 +3,91 @@ version: '3' tasks: - # Tasks mit ":" sind für alle Datenquellen gleich in Taskfile.yml definiert default: desc: OPUS Siegen - deps: [harvest] + vars: + PROJECT: siegen + MINIMUM: 1250 # Mindestanzahl der zu erwartenden Datensätze cmds: + - task: harvest - task: refine + # Folgende Tasks beginnend mit ":" sind für alle Datenquellen gleich in Taskfile.yml definiert - task: :check - vars: {PROJECT: "siegen", MINIMUM: "1250"} + vars: {PROJECT: '{{.PROJECT}}', MINIMUM: '{{.MINIMUM}}'} - task: :split - vars: {PROJECT: "siegen"} + vars: {PROJECT: '{{.PROJECT}}'} - task: :validate - vars: {PROJECT: "siegen"} + vars: {PROJECT: '{{.PROJECT}}'} - task: :zip - vars: {PROJECT: "siegen"} + vars: {PROJECT: '{{.PROJECT}}'} - task: :diff - vars: {PROJECT: "siegen"} + vars: {PROJECT: '{{.PROJECT}}'} harvest: - dir: data/siegen/harvest + dir: data/{{.PROJECT}}/harvest + vars: + URL: https://dspace.ub.uni-siegen.de/oai/request + FORMAT: xMetaDissPlus + PROJECT: siegen 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 + - METHA_DIR=$PWD metha-sync --format {{.FORMAT}} {{.URL}} + - METHA_DIR=$PWD metha-cat --format {{.FORMAT}} {{.URL}} > {{.PROJECT}}.xml refine: - dir: data/siegen/refine + dir: data/{{.PROJECT}}/refine ignore_error: true # provisorisch verwaisten Java-Prozess bei Exit vermeiden https://github.com/go-task/task/issues/141 - env: + vars: PORT: 3334 RAM: 4G PROJECT: siegen cmds: - # OpenRefine starten - - $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" + - task: :openrefine-start + vars: {PROJECT: '{{.PROJECT}}', PORT: '{{.PORT}}', RAM: '{{.RAM}}'} # 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/{{.PROJECT}}.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) - - $OPENREFINE_CLIENT -P $PORT --apply ../../../rules/siegen/vorverarbeitung.json $PROJECT + - $OPENREFINE_CLIENT -P {{.PORT}} --apply ../../../rules/{{.PROJECT}}/vorverarbeitung.json {{.PROJECT}} # 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/{{.PROJECT}}/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 - - $OPENREFINE_CLIENT -P $PORT --apply ../../../rules/siegen/direktlinks.json $PROJECT + - $OPENREFINE_CLIENT -P {{.PORT}} --apply ../../../rules/{{.PROJECT}}/direktlinks.json {{.PROJECT}} # 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/{{.PROJECT}}/nur-mit-pdf.json {{.PROJECT}} # Aufteilung dc:subject in ddc und topic - - $OPENREFINE_CLIENT -P $PORT --apply ../../../rules/siegen/ddc-topic.json $PROJECT + - $OPENREFINE_CLIENT -P {{.PORT}} --apply ../../../rules/{{.PROJECT}}/ddc-topic.json {{.PROJECT}} # 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/{{.PROJECT}}/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 - - $OPENREFINE_CLIENT -P $PORT --apply ../../../rules/siegen/mime.json $PROJECT + - $OPENREFINE_CLIENT -P {{.PORT}} --apply ../../../rules/{{.PROJECT}}/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 - - $OPENREFINE_CLIENT -P $PORT --apply ../../../rules/siegen/doi.json $PROJECT + - $OPENREFINE_CLIENT -P {{.PORT}} --apply ../../../rules/{{.PROJECT}}/doi.json {{.PROJECT}} # 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/{{.PROJECT}}/hbz.json {{.PROJECT}} # 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/{{.PROJECT}}/nonsort.json {{.PROJECT}} # DINI Publikationstypen aus dc:type extrahieren - - $OPENREFINE_CLIENT -P $PORT --apply ../../../rules/siegen/dini.json $PROJECT + - $OPENREFINE_CLIENT -P {{.PORT}} --apply ../../../rules/{{.PROJECT}}/dini.json {{.PROJECT}} # 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/{{.PROJECT}}/doctype.json {{.PROJECT}} # 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/{{.PROJECT}}/join.json {{.PROJECT}} # Export in METS:MODS mit Templating - | - $OPENREFINE_CLIENT -P $PORT --export --template "$(< ../../../rules/siegen/template.txt)" --rowSeparator " + $OPENREFINE_CLIENT -P {{.PORT}} --export --template "$(< ../../../rules/{{.PROJECT}}/template.txt)" --rowSeparator " " --suffix " - " --output siegen.txt $PROJECT - # Statistik zu Laufzeit und Ressourcenverbrauch - - ps -o start,etime,%mem,%cpu,rss -p $(lsof -t -i:$PORT) - # OpenRefine beenden - - PID=$(lsof -t -i:$PORT); kill $PID; while ps -p $PID > /dev/null; do sleep 1; done - # OpenRefine-Projekt für Debugging archivieren - - tar cfz siegen.openrefine.tar.gz -C $(grep -l siegen *.project/metadata.json | cut -d '/' -f 1) . - # Temporäre Dateien löschen - - rm -rf ./*.project* && rm -f workspace.json + " --output {{.PROJECT}}.txt {{.PROJECT}} + - task: :openrefine-stop + vars: {PROJECT: '{{.PROJECT}}', PORT: '{{.PORT}}'} sources: - - ../harvest/siegen.xml - - ../../../rules/siegen/*.json - - ../../../rules/siegen/template.txt + - ../harvest/{{.PROJECT}}.xml + - ../../../rules/{{.PROJECT}}/*.json + - ../../../rules/{{.PROJECT}}/template.txt #TODO - ../../../rules/common/*.json generates: - openrefine.log - - siegen.txt - - siegen.openrefine.tar.gz + - '{{.PROJECT}}.txt' + - '{{.PROJECT}}.openrefine.tar.gz' linkcheck: desc: OPUS Siegen links überprüfen diff --git a/tasks/wuppertal.yml b/tasks/wuppertal.yml index bfcdb0c..04ed92d 100644 --- a/tasks/wuppertal.yml +++ b/tasks/wuppertal.yml @@ -3,93 +3,93 @@ version: '3' tasks: - # Tasks mit ":" sind für alle Datenquellen gleich in Taskfile.yml definiert default: desc: Elpub Wuppertal - deps: [harvest] + vars: + PROJECT: wuppertal + MINIMUM: 1300 # Mindestanzahl der zu erwartenden Datensätze cmds: + - task: harvest - task: refine + # Folgende Tasks beginnend mit ":" sind für alle Datenquellen gleich in Taskfile.yml definiert - task: :check - vars: {PROJECT: "wuppertal", MINIMUM: "1300"} + vars: {PROJECT: '{{.PROJECT}}', MINIMUM: '{{.MINIMUM}}'} - task: :split - vars: {PROJECT: "wuppertal"} + vars: {PROJECT: '{{.PROJECT}}'} - task: :validate - vars: {PROJECT: "wuppertal"} + vars: {PROJECT: '{{.PROJECT}}'} - task: :zip - vars: {PROJECT: "wuppertal"} + vars: {PROJECT: '{{.PROJECT}}'} - task: :diff - vars: {PROJECT: "wuppertal"} + vars: {PROJECT: '{{.PROJECT}}'} harvest: - dir: data/wuppertal/harvest + dir: data/{{.PROJECT}}/harvest + vars: + URL: http://elpub.bib.uni-wuppertal.de/servlets/OAIDataProvider + FORMAT: oai_dc + PROJECT: wuppertal cmds: - - METHA_DIR=$PWD metha-sync --format oai_dc http://elpub.bib.uni-wuppertal.de/servlets/OAIDataProvider - - METHA_DIR=$PWD metha-cat --format oai_dc http://elpub.bib.uni-wuppertal.de/servlets/OAIDataProvider > wuppertal.xml + - METHA_DIR=$PWD metha-sync --format {{.FORMAT}} {{.URL}} + - METHA_DIR=$PWD metha-cat --format {{.FORMAT}} {{.URL}} > {{.PROJECT}}.xml refine: - dir: data/wuppertal/refine + dir: data/{{.PROJECT}}/refine ignore_error: true # provisorisch verwaisten Java-Prozess bei Exit vermeiden https://github.com/go-task/task/issues/141 - env: + vars: PORT: 3335 RAM: 4G PROJECT: wuppertal cmds: - # OpenRefine starten - - $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" + - task: :openrefine-start + vars: {PROJECT: '{{.PROJECT}}', PORT: '{{.PORT}}', RAM: '{{.RAM}}'} # Import (erfordert absoluten Pfad zur XML-Datei) - - $OPENREFINE_CLIENT -P $PORT --create "$(readlink -e ../harvest/wuppertal.xml)" --recordPath Records --recordPath Record --storeEmptyStrings false --trimStrings true --projectName $PROJECT + - $OPENREFINE_CLIENT -P {{.PORT}} --create "$(readlink -e ../harvest/{{.PROJECT}}.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) - - $OPENREFINE_CLIENT -P $PORT --apply ../../../rules/wuppertal/vorverarbeitung.json $PROJECT + - $OPENREFINE_CLIENT -P {{.PORT}} --apply ../../../rules/{{.PROJECT}}/vorverarbeitung.json {{.PROJECT}} # Entfernen von HTML-Tags und Transformation von subscript und superscript in Unicode (betrifft dc:description, dc:source und dc:title) - - $OPENREFINE_CLIENT -P $PORT --apply ../../../rules/wuppertal/html.json $PROJECT + - $OPENREFINE_CLIENT -P {{.PORT}} --apply ../../../rules/{{.PROJECT}}/html.json {{.PROJECT}} # DDC einheitlich auf drei Ziffern vereinheitlichen (betrifft dc:subjects und oai:setSpec) - - $OPENREFINE_CLIENT -P $PORT --apply ../../../rules/wuppertal/ddc.json $PROJECT + - $OPENREFINE_CLIENT -P {{.PORT}} --apply ../../../rules/{{.PROJECT}}/ddc.json {{.PROJECT}} # dc:publisher setzen - - $OPENREFINE_CLIENT -P $PORT --apply ../../../rules/wuppertal/publisher.json $PROJECT + - $OPENREFINE_CLIENT -P {{.PORT}} --apply ../../../rules/{{.PROJECT}}/publisher.json {{.PROJECT}} # URNs, DOIs und PDF-Links aus dc:identifier extrahieren - - $OPENREFINE_CLIENT -P $PORT --apply ../../../rules/wuppertal/identifier.json $PROJECT + - $OPENREFINE_CLIENT -P {{.PORT}} --apply ../../../rules/{{.PROJECT}}/identifier.json {{.PROJECT}} # Direktlinks generieren durch Abgleich der URNs mit nbn-resolving und Datensätze ohne Direktlink auf ein PDF löschen - - $OPENREFINE_CLIENT -P $PORT --apply ../../../rules/wuppertal/nbn.json $PROJECT + - $OPENREFINE_CLIENT -P {{.PORT}} --apply ../../../rules/{{.PROJECT}}/nbn.json {{.PROJECT}} # Aufteilung dc:subject in ioo und topic - - $OPENREFINE_CLIENT -P $PORT --apply ../../../rules/wuppertal/subjects.json $PROJECT + - $OPENREFINE_CLIENT -P {{.PORT}} --apply ../../../rules/{{.PROJECT}}/subjects.json {{.PROJECT}} # Standardisierte Rechteangaben Teil 1 (Links zu CC-Lizenzen) - - $OPENREFINE_CLIENT -P $PORT --apply ../../../rules/wuppertal/rights.json $PROJECT + - $OPENREFINE_CLIENT -P {{.PORT}} --apply ../../../rules/{{.PROJECT}}/rights.json {{.PROJECT}} # Datenstruktur für Templating vorbereiten: Pro Zeile ein Datensatz und leere Zeilen löschen - - $OPENREFINE_CLIENT -P $PORT --apply ../../../rules/wuppertal/join.json $PROJECT + - $OPENREFINE_CLIENT -P {{.PORT}} --apply ../../../rules/{{.PROJECT}}/join.json {{.PROJECT}} # Zusammenführung gleichsprachiger Titelangaben zu Title/Subtitle - - $OPENREFINE_CLIENT -P $PORT --apply ../../../rules/wuppertal/subtitle.json $PROJECT + - $OPENREFINE_CLIENT -P {{.PORT}} --apply ../../../rules/{{.PROJECT}}/subtitle.json {{.PROJECT}} # Sprachangaben nach ISO-639-2b (betrifft dc:language sowie die xml:lang Attribute für dc:coverage, dc:description und dc:title) - - $OPENREFINE_CLIENT -P $PORT --apply ../../../rules/wuppertal/language.json $PROJECT + - $OPENREFINE_CLIENT -P {{.PORT}} --apply ../../../rules/{{.PROJECT}}/language.json {{.PROJECT}} # Standardisierte Rechteangaben Teil 2 (Canonical Name für CC-Lizenzen) - - $OPENREFINE_CLIENT -P $PORT --apply ../../../rules/wuppertal/rights-cc.json $PROJECT + - $OPENREFINE_CLIENT -P {{.PORT}} --apply ../../../rules/{{.PROJECT}}/rights-cc.json {{.PROJECT}} # Anreicherung HT-Nummer via lobid-resources - - $OPENREFINE_CLIENT -P $PORT --apply ../../../rules/wuppertal/hbz.json $PROJECT + - $OPENREFINE_CLIENT -P {{.PORT}} --apply ../../../rules/{{.PROJECT}}/hbz.json {{.PROJECT}} # Sortierung mods:nonSort für das erste Element in dc:title - - $OPENREFINE_CLIENT -P $PORT --apply ../../../rules/wuppertal/nonsort.json $PROJECT + - $OPENREFINE_CLIENT -P {{.PORT}} --apply ../../../rules/{{.PROJECT}}/nonsort.json {{.PROJECT}} # Export in METS:MODS mit Templating - | - $OPENREFINE_CLIENT -P $PORT --export --template "$(< ../../../rules/wuppertal/template.txt)" --rowSeparator " + $OPENREFINE_CLIENT -P {{.PORT}} --export --template "$(< ../../../rules/{{.PROJECT}}/template.txt)" --rowSeparator " " --suffix " - " --output wuppertal.txt $PROJECT - # Statistik zu Laufzeit und Ressourcenverbrauch - - ps -o start,etime,%mem,%cpu,rss -p $(lsof -t -i:$PORT) - # OpenRefine beenden - - PID=$(lsof -t -i:$PORT); kill $PID; while ps -p $PID > /dev/null; do sleep 1; done - # OpenRefine-Projekt für Debugging archivieren - - tar cfz wuppertal.openrefine.tar.gz -C $(grep -l wuppertal *.project/metadata.json | cut -d '/' -f 1) . - # Temporäre Dateien löschen - - rm -rf ./*.project* && rm -f workspace.json + " --output {{.PROJECT}}.txt {{.PROJECT}} + - task: :openrefine-stop + vars: {PROJECT: '{{.PROJECT}}', PORT: '{{.PORT}}'} sources: - - ../harvest/wuppertal.xml - - ../../../rules/wuppertal/*.json - - ../../../rules/wuppertal/template.txt + - ../harvest/{{.PROJECT}}.xml + - ../../../rules/{{.PROJECT}}/*.json + - ../../../rules/{{.PROJECT}}/template.txt #TODO - ../../../rules/common/*.json generates: - openrefine.log - - wuppertal.txt - - wuppertal.openrefine.tar.gz + - '{{.PROJECT}}.txt' + - '{{.PROJECT}}.openrefine.tar.gz' linkcheck: desc: Elpub Wuppertal links überprüfen