5  Verarbeiten von PICA-Daten

Dieses Kapitel gibt eine allgemeine Übersicht von frei zugänglichen Werkzeugen zur Verarbeitung von PICA-Daten. Auf folgende Werkzeuge wird ausführlicher eingegangen:

Darüber hinaus gibt es die Web-Komponente PicaEditor und mehrere Programmbibliotheken zur Entwicklung eigener Werkzeuge und Anwendungen. Schließlich können PICA-Daten in beliebigen Programmiersprachen auch direkt verarbeitet werden.

5.1 PicaEditor

PicaEditor ist eine Komponente für Webanwendungen mit der PICA-Daten im Browser analysiert und bearbeitet werden können. Die Komponente basiert auf CodeMirror und dem JavaScript-Framework Vue3.

Der zentrale Teil des Editors dient der Anzeige und Bearbeitung von PICA+ Daten. Syntaxfehler und Fehler bei der Validierung gegen ein Avram Schema werden dabei hervorgehoben und mit dem Tabular kann schnell zwischen (Unter)feldern des Datensatzes gewechselt werden. Unter dem Bearbeitungsfeld werden (sofern vorhanden) Schema-Informationen zum jeweils ausgewählten Feld angezeigt. Über dem Bearbeitungsfeld stehen die PPN und ein Link in den Katalog, aus dem Datensätze per PPN geladen werden können. Eine Möglichkeit zum Speichern in den Katalog besteht allerdings nicht.

Die Darstellung an dieser Stelle wird gerade überarbeitet!

<pica-editor :databases=“databases” :unapi=“‘https://unapi.k10plus.de/’” :avram=“‘https://format.k10plus.de/avram.pl?profile=k10plus’”>
003@ $0355973081
010@ $ager
011@ $a2001
019@ $aXA-DE$XXX
021A $a@Zehn Jahre Pica in Niedersachsen und Deutschland$dSkizzen eines Erfolgs aus Anlass der 5. Verbundkonferenz des Gemeinsamen Bibliotheksverbundes der Länder Bremen, Hamburg, Mecklenburg-Vorpommern, Niedersachsen, Sachsen-Anhalt, Schleswig-Holstein und Thüringen, vom 11.-12. September, 2001 in Göttingen$h[Redaktion, Elmar Mittler]
029A $a@Gemeinsamer Bibliotheksverbund der Länder Bremen, Hamburg, Mecklenburg-Vorpommern, Niedersachsen, Sachsen-Anhalt, Schleswig-Holstein und Thüringen$bVerbundkonferenz$xGöttingen, Germany)
029F $a@Niedersächsische Staats- und Universitätsbibliothek Göttingen
033A $pGöttingen$nNiedersächsische Staats- und Universitätsbibliothek
034D $a181 p
034I $a21 cm
034M $aill
044A $aPICA Project$aCongresses
045A $aZ699.4.P23
045V $a10$a24,2

Technische Details zur Installation und Konfiguration findet sich in der PicaEditor-Dokumentation.

5.2 Programmbibliotheken

Bei komplexeren Aufgaben stoßen die vorhandenen Werkzeuge mitunter an ihre Grenzen, so dass eigene Programme entwickelt werden müssen. Für einige Programmiersprachen gibt es Softwarebibliotheken, die die Arbeit mit PICA-Daten vereinfachen und verlässlicher machen. Bislang gibt es:

  • Die Perl-Programmbibliotheken PICA::Data, auf der sowohl picadata (Kapitel 8) als auch die PICA-Funktionen von Catmandu (Kapitel 9) basiert (ein ältere, inzwischen nicht mehr weiterentwickelte Version der Bibliothek ist PICA::Record).
  • Das Node-Modul pica-data stellt JavaScript-Funktionen zur Verarbeitung von PICA+ als PICA Plain und PICA JSON bereit.
  • luapica ist eine Programmbibliothek zur PICA-Verarbeitung in Lua.
  • pica_parse ist eine Python-Bibliothek für PICA+ Daten.
  • Das mit Catmandu vergleichbare Werkzeug Metafacture unterstützt neben anderen Formaten auch das Lesen und Schreiben von PICA-Daten (siehe Java-Quellcode).

5.3 Direkte Verarbeitung

Die relativ einfache Struktur von PICA ermöglicht die direkte Verarbeitung von PICA-Daten, insbesondere wenn diese in Form von normalisiertem PICA vorliegen. Ohne PICA-Programmbibliothek können sich zwar etwas leichter Fehler einschleichen, dafür muss nichts installiert werden und die Verarbeitung ist unter Umständen sogar schneller. Hier ein Beispiel in Perl, das aus normalisiertem PICA alle Unterfelder $a von Felder mit Inhaltserschließung (044. und 045.) ausgibt:

while (<>) {                                  # Ein Datensatz pro Zeile
  for ( split // ) {                      # Schleife über alle Felder 
    my ( $field, $tmp ) = split ' ', , 2;   # Tag und Occurrence
    my ( undef, @sfs ) = split //, $tmp;  # Unterfelder
    next if $field !~ /^04[45]/;              # Verarbeitung des Datensatz
    for (@sfs) {
      say  if  =~ /^a(.+)/;
    }
  }
}