check

Warnung

Das Kommando check ist eine unstable-Funktion, die sich noch in der Entwicklung befindet und noch nicht in den Releases enthalten ist. Das Kommando kann durch Aktivierung der unstable-Funktion beim Bauen aus den Quellen aktiviert werden.

Das check-Kommando erlaubt es, Datensätze auf Konformität mit einem Regelwerk zu überprüfen. In einer (oder mehreren) Konfigurationsdateien können Regeln hinterlegt werden, gegen die jeder Datensatz überprüft wird. Trifft eine Regel zu, wird diese Regelverletzung unter Angabe der PPN (Feld 003@ $0) des Datensatzes und der ID der Regel in eine Ausgabedatei geschrieben. Die ID einer Regel kann von den Nutzenden frei gewählt werden.

Befinden sich die spezifizierten Regeln in der Datei rules.toml, kann mit dem folgenden Befehl die Datei DUMP.dat.gz gegen das Regelwerk überprüft werden. Die Ausgabe erfolgt im CSV-Format in die Ausgabedatei out.csv:

$ pica check -R rules.toml DUMP.dat.gz -o out.csv

Soll ein Regelwerk nur gegen eine Teilmenge der Eingabe getestet werden, erfolgt dies durch Einschränkung des (globalen) Geltungsbereichs (scope) mithilfe eines Filterausdrucks:

scope = '002@.0 =^ "T"'

[rule.XYZ]
...

Nicht bei jeder Regelverletzung handelt es sich gleich um einen Fehler. Deshalb wird zwischen folgenden Levels unterschieden:

Konfiguriert wird das Level über die level-Option. Ist die Option nicht gesetzt, wird automatisch das Level error ausgewählt:

[rule.XYZ]
level = "warning"

Zur Nachvollziehbarkeit und Dokumentation kann eine Regel mit einer Beschreibung (description) und einem Link (link) ausgezeichnet werden:

[rule.XYZ]
description = "Findet Datensätze, die gegen die Regel XYZ verstoßen."
link = "https://www.example.org/XYZ"

Checks

Datetime

Der datetime-Check überprüft, ob in einem Feld ein gültiges Datum bzw. Zeitangabe steht. Die Angabe der zu überprüfenden Felder erfolgt mittels der Option path, welche einen Pfadausdruck erwartet.

[rule.DATETIME]
check = "datetime"
description = "Findet ungültige Datumsangaben im Feld 010@ $D."
link = "https://wiki.dnb.de/display/ILTIS/1500"
format = "%Y-%m-%d"
path = "010@.D"

Optionen

case-ignore = true | false
Ist die Option gesetzt, wird die Groß- und Kleinschreibung beim Vergleichen von Werten ignoriert.
strsim-threshold = <value>
Festlegen des Schwellenwerts beim Ähnlichkeitsvergleich von Zeichenketten mittels des =*-Operators.
format = <string>
Angabe des Format-Strings, der das Format der Datums- bzw. Zeitangabe festlegt. Ist die Option nicht gesetzt, wird standardmäßig der Format- String %Y-%m-%d verwendet.
offset = <n>
Mit der offset-Option können die ersten <n> Zeichen übersprungen werden, wenn die Datums- bzw. Zeitangabe nicht am Anfang des zu überprüfenden Feldes steht.

Filter

Mittels des filter-Checks können Datensätze gefunden werden, die einem Filterausdruck entsprechen. Zum Beispiel können mit der folgenden Regel Datensätze gefunden werden, die einen ungültigen Projektcode im Feld 017C $a enthalten:

[rule.TITLE-017C-001]
check = "filter"
description = "Findet ungültige Projektcodes im Feld 017C $a."
link = "https://wiki.dnb.de/display/ILTIS/0602"
filter = '017C.a not in ["a","d","f","i","m","n","t"]'

Optionen

case-ignore = true | false
Ist die Option gesetzt, wird die Groß- und Kleinschreibung beim Vergleichen von Werten ignoriert.
strsim-threshold = <value>
Festlegen des Schwellenwerts beim Ähnlichkeitsvergleich von Zeichenketten mittels des =*-Operators.
invert-match = true | false
Ist die Option gesetzt, werden Datensätze gefunden, die nicht dem Filterausdruck entsprechen.

ISNI

Die Gültigkeit eines ISNI-Identifikators, bspw. einer ORCID, lässt sich mit dem isni-Check überprüfen.

Die folgende Regel findet ungültige ORCID-Identifikatoren im Feld 028A $y, wobei nur die Werte überprüft werden, die mit dem Prefix (orcid) beginnen:

[rule.ORCID]
check = 'isni'
description = 'Findet ungültige ORCID-Einträge im Feld 028A $y.'
link = 'https://wiki.dnb.de/display/ILTIS/3000'
path = '028A{ y | y =^ "(orcid)" }'
prefix = '(orcid)'

Optionen

case-ignore = true | false
Ist die Option gesetzt, wird die Groß- und Kleinschreibung beim Vergleichen von Werten ignoriert.
strsim-threshold = <value>
Festlegen des Schwellenwerts beim Ähnlichkeitsvergleich von Zeichenketten mittels des =*-Operators.
prefix = '<prefix>'
Es werden nur Werte überprüft, die mit dem Prefix <prefix> beginnen. Wird kein Prefix angegeben, werden alle Werte des path-Ausdrucks überprüft.

ISO 639-2B

Ob ein Unterfeld einen gültigen Sprachencode nach ISO 639-2B enthält, lässt sich mit dem iso639-2b-Check testen. Die zu überprüfenden Werte werden mit path adressiert:

[rule.SPRACHENCODE]
check = 'iso639-2b'
description = 'Findet ungültige Sprachencodes im Feld 010@ $a.'
link = 'https://wiki.dnb.de/display/ILTIS/1500'
path = '010@.a'

Optionen

case-ignore = true | false
Ist die Option gesetzt, wird die Groß- und Kleinschreibung beim Vergleichen von Werten ignoriert.
strsim-threshold = <value>
Festlegen des Schwellenwerts beim Ähnlichkeitsvergleich von Zeichenketten mittels des =*-Operators.

Unicode

Der unicode-Check überprüft, ob die Werte aller Unterfelder eines Datensatzes gültige Unicode-Zeichenketten enthalten.

[rule.UNICODE]
check = "unicode"

Darüber hinaus kann überprüft werden, ob diese Werte in einer der Unicode-Normalformen nfc, nfkc, nfd oder nfkd vorliegen. Alle nicht konformen Werte werden in der message-Spalte der Ausgabedatei aufgeführt.

[rule.UNICODE]
check = "unicode"
normalization = "nfd"

Optionen

normalization = <value>
Auswahl einer Unicode-Normalform, auf die zusätzlich überprüft werden soll. Es können die Werte nfc, nfkc, nfd oder nfkd ausgewählt werden.

Optionen

-s, --skip-invalid
Überspringt jene Zeilen aus der Eingabe, die nicht dekodiert werden konnten.
-p, --progress
Anzeige des Fortschritts, der die Anzahl der eingelesenen gültigen sowie invaliden Datensätze anzeigt. Das Aktivieren der Option erfordert das Schreiben der Datensätze in eine Datei mittels -o bzw. --output.
-R <filename>, --rule-set <filename>
Angabe eines Regelwerks, gegen das die Datensätze aus der Eingabe getestet werden.
-o, --output
Angabe, in welche Datei die Ausgabe geschrieben werden soll. Standardmäßig wird die Ausgabe in die Standardausgabe stdout geschrieben.