Beschreibung

Die Funktion datensatzAendernAutomat kann für die Datensätze einer IDN-Liste die folgenden Aktionen durchführen:

  • Ersetzen eines Feldes/Feldinhalt durch einen anderen Feldinhalt
  • Hinzufügen eines neuen Feldes bzw eines neuen Feldinhaltes
Einbinden in WinIBW
  1. WinIBW öffnen und anmelden
  2. in Menuleiste auf Optionen > Werkzeugleiste anpassen
  3. falls nicht schon ausgewählt, Reiter "Kommandos" öffnen
  4. im Auswahlfenster "Kategorien" nach ganz unten gehen und "Alle Kommandos" auswählen
  5. im Auswahlfenster "Kommandos" auf "DatensatzAendernAutomat" gehen
  6. Kommando "DatensatzAendernAutomat" per Drag&Drop auf die Menuleiste der WinIBW ziehen
  7. im sich öffnenden Dialogfenster "Text" statt "Icon" auswählen
  8. auf "Schließen" zum Schließen des Dialogfensters gehen
Ablauf

Die "Bedienung" des Skripts erfolgt in der Reihenfolge

  1. Ausfüllen Eingabemaske -> Allgemeine Angaben
  2. Ausfüllen Angaben zum 1. und 2. (optional) Feld oder: Angaben einer Konkordanz
  3. Klicken auf OK
  4. Auswahl der IDN-Liste bzw. der Konkordanz
Eingabemaske
Allgemeine Angaben

  • Das Passwort bitte bei den WinIBW-Betreuern in der IT erfragen.
  • Dummy-Lauf: Wenn hier ein Häkchen gesetzt wird, findet keine produktive Änderung in der Datenbank statt, sondern es wird nur eine Logdatei erstellt mit dem Inhalt "Datensatz vorher ↔ Datensatz, wie er nach einer Änderung aussehen würde"
Angaben zum 1. (und eventuell 2.) Feld

In dieser Maske wird die eigentliche Aktion konfiguriert. Man kann Aktionen für zwei verschiedene Felder angeben (Reiter "1. Feld" und "2. Feld"). Mögliche Aktionen sind

  • "obengenannten Feldinhalt neu einfügen:
    • Ist das angegebene Ausgangsfeld und Inhalt bereits vorhanden, geschieht nichts. IDN und eine entsprechende Bemerkung werden in eine Fehlerdatei geschrieben
    • Ist das angegebene Ausgangsfeld noch gar nicht vorhanden, wird es mit dem angegebenen Inhalt neu in den Datensatz geschrieben
    • Ist das angegebene Ausgangsfeld vorhanden, aber mit anderem Inhalt, hängt die stattfindende Aktion von der Wiederholbarkeit ab:
      • ist "Feld ist wiederholbar" angehakt, wird es als wiederholtes Feld mit dem angegebenen Inhalt neu in den Datensatz ans Ende der bereits vorhandenen gleichen Felder geschrieben
      • ist "Feld ist wiederholbar" und "Neues Feld als 1. Vorkommen des Feldes eintragen" angehakt, wird es als wiederholtes Feld mit dem angegebenen Inhalt neu in den Datensatz als erstes der bereits vorhandenen gleichen Felder geschrieben
      • ist "Feld ist wiederholbar" nicht angehakt und ein Trennzeichen angegeben (";", ". - " o.ä.), wird der neue Inhalt an den bereits vorhandenen Inhalt des Feldes mit dem angegebenen Trennzeichen angehängt
      • ist "Feld ist wiederholbar" nicht angehakt und kein Trennzeichen angegeben, wird die IDN und eine entsprechende Bemerkung in eine Fehlerdatei geschrieben
  • "obengenannten Feldinhalt ersetzen durch"
    • Ist das angegebene Ausgangsfeld und Inhalt vorhanden, wird es durch das neue Feld und den neuen Inhalt ersetzt.
    • Ist das angegebene Ausgangsfeld und/oder der Inhalt nicht vorhanden, wird die IDN und eine entsprechende Bemerkung in eine Fehlerdatei geschrieben
    • Auch eine Feldlöschung ist möglich, hierzu einfach "Feldinhalt ersetzen durch" anhaken und "Feld" und "Feldinhalt" leer lassen. Dies funktioniert nicht, wenn das Feld eine Verknüpfung/Online-Expansion enthält, dann kann man nur mit der nächsten Option löschen
  • "Feld löschen"
    • Ist das angegebene Ausgangsfeld vorhanden und beginnt mit dem angegebenen Inhalt, wird es gelöscht.
    • Reguläre Ausdrücke können in diesem Fall nicht genutzt werden, dann kann nur die Ersetzen-Option (mit der dort genannten Einschränkung) verwendet werden
    • Für Konkordanzen ist diese Löschfunktion noch nicht eingerichtet
Angaben zu einer Konkordanz

Falls verschiedenen Datensätzen verschiedene Inhalte hinzugefügt werden sollen bzw. verschiedene Inhalte ersetzt werden sollen, ist dies über eine Konkordanz möglich. Diese Konkordanz muss folgendermaßen aufgebaut sein:

  • IDN - Tabulator - neuer Feldinhalt (für neu Einfügen)
  • IDN - Tabulator - alter Feldinhalt - Tabulator - neuer Feldinhalt (für Ersetzungen)

Mögliche Aktionen:

  • Neu Einfügen: Im Feld "Feld, das bearbeitet werden soll", das neu zu erfassende Feld eingeben, Wiederholbarkeit je nach Fall angeben, "obengenanntes Feld mit neuem Inhalt aus Konkordanz neu einfügen" auswählen. Dann weiter mit "OK".
  • Ersetzen: Im Feld "Feld, das bearbeitet werden soll", das Feld eingeben, dessen Inhalt ersetzt werden soll, "obengenannten Feldinhalt ersetzen durch Feld und Inhalt der Konkordanz"  auswählen, bei Feld das neue Feld eingeben (kann ein neues oder das bisher verwendete Feld sein). Dann weiter mit "OK".
Suche-/Ersetzungsmöglichkeiten (Angaben zu den Feldern und Inhalten)

Es gibt zwei verschiedene Suchmöglichkeiten, um die zu bearbeitenden Felder und Inhalte im Datensatz zu finden:

  • Standard: Hier wird die angegebene Feldbezeichnung und der Inhalt einfach hintereinander geschrieben und dann gesucht/ersetzt. Dies hat zur Folge, dass der gesuchte Inhalt am Anfang des Feldes stehen muss, sonst wird er nicht gefunden und damit auch nicht ersetzt.
    • Beispiel: Angabe: Ausgangsfeld "008", Inhalt des Ausgangsfeldes "kio" ergibt Suche nach "008 kio"; wenn im Datensatz vorhanden : "008 kio;kiz" (Haken) Suche erfolgreich, Ersetzung kann stattfinden; aber: wenn im Datensatz vorhanden : "008 kiz;kio" (Fehler) Suche nicht erfolgreich, Ersetzung kann nicht stattfinden
  • Reguläre Ausdrücke: Auch die Verwendung von regulären Ausdrücken ist möglich. Hierzu bitte den entsprechenden Haken setzen
    • Alle Parameter, Zeichenklassen, Quantoren etc. der regulären Ausdrücke können verwendet werden. Die Suchbegriffe können hierdurch viel flexibler gestaltet werden.
      • Beispiel: Ausgangsfeld "008", Inhalt des Ausgangsfeldes ".*?kio.*?" findet sowohl "008 kio;kiz" als auch "008 kiz;kio"
      • Beispiel: Ausgangsfeld "548", Inhalt des Ausgangsfeldes "\d\.\d\.\d\d\d\d" findet "548 9.7.1974", "548 2.8.1822" etc.
      • Informationen über reguläre Ausdrücke
      • Für die Generierung spezieller regulärer Ausdrücke können Sie sich auch gerne an IT1.1 wenden
      • S.a. unten bei "Anwendungsbeispielen"
  • Auch in den Angaben in Konkordanzen können reguläre Ausdrücke genutzt werden
Auswahl der IDN-Liste bzw. der Konkordanz

Das Skript bearbeitet Datensätze nach einer IDN-Liste, pro Zeile muss dabei eine IDN stehen. Für die Konkordanzen gelten die oben gemachten Angaben. Die IDN-Liste bzw. Konkordanz wird durch den üblichen Windows-Datei-Öffnen-Dialog ausgewählt.

  • Eine IDN-Liste kann aus einem Suchset durch die Funktion "ErstelleDNListe" im Menü "Datei" der WinIBW erstellt werden. Regulär werden dabei höchstens 1.000 IDNs in die Liste geschrieben. Wenn das Suchset mehr als 1.000 Datensätze umfasst, kann nach dem Laufen des DatensatzAendernAutomat-Skripts eine neue Suche durchgeführt werden und dann eine neue Liste mit den nächsten 1.000 IDNs erstellt werden (die vorherigen 1.000 IDNs wurden ja mittlerweile abgearbeitet und sollten nicht mehr im Suchset vorhanden sein). Die Einschränkung auf 1.000 hat auch seine Vorteile, weil die Laufzeit des Skriptes sonst sehr lang werden kann.
  • Wenn man durch eine WinIBW-Abfrage nicht die Datensätze selektieren kann, die automatisiert geändert werden soll (weil die Indizes es nicht hergeben), können Sie sich an IT1.1 wenden und dort um Unterstützung bitten.
  • Die IDN-Liste sollte möglichst in ein eigenes Verzeichnis gelegt werden, weil genau dorthin auch die Logdateien von DatensatzAendernAutomat geschrieben werden (s.u.) und man sich so schneller orientieren kann.
Logdateien

Das Skript schreibt verschiedene Logdateien, um die Ergebnisse des Laufes kontrollieren zu können. Der Name jeder Logdatei beginnt mit dem Feld, das man unter "1. Ausgangsfeld" angegeben hat. Sie werden in dem Verzeichnis abgelegt, in dem die abzuarbeitende IDN-Liste liegt. Daher ist es notwendig, dass die genutzte Windows-Kennung in dem Verzeichnis auch Schreibberechtigungen hat.

  1. <Feld>_alle_log.txt: Enthält alle bearbeiteten IDNs. Bei einem Abbruch des Skriptes (Absturz der WiniIBW o.ä.) kann man hier sehen, bis zu welcher IDN das Skript gekommen ist.
  2. <Feld>_log.txt: Enthält alle IDNs, die erfolgreich vom Skript bearbeitet wurden, bei denen es also keine Fehlermeldung im Verlauf der Bearbeitung gab.
  3. <Feld>_err.txt: Enthält alle IDNs, bei denen im Lauf der Bearbeitung ein Fehler auftrat. Diese Datensätze wurden also nicht geändert. Zusätzlich wird der Fehler mit ausgegeben:
    1. "Fehler: nicht gefunden f idn <IDN>": Die IDN konnte im CBS nicht gefunden werden
    2. "Fehler: zu ersetzende Inhalte nicht vorhanden <Ausgangsfeld> <Inhalt des Ausgangsfelds> <IDN>": Es sollte ein bestimmter Inhalt in einem bestimmten Feld ersetzt werden, aber das zu ersetzende Feld und/oder der zu ersetzende Inhalt wurde nicht gefunden
    3. "Fehler: neuer Inhalt <Ausgangsfeld> <Inhalt des Ausgangsfelds> bereits vorhanden <IDN>): Es sollte ein neuer Feldinhalt eingefügt werden, aber das Feld und der Inhalt waren bereits vorhanden
    4. "Fehler: Feld bereits mit anderem Inhalt vorhanden, Anhang-Trennzeichen wurde nicht definiert! <IDN": Es sollte ein neuer Feldinhalt in ein nicht als wiederholbar gekennzeichnetes Feld eingefügt werden, aber das Feld war bereits vorhanden. Da kein Trennzeichen angegeben wurde, konnte der neue Inhalt nicht angehängt werden.
    5. "Fehler beim Abschicken: <Meldung der WinIBW> <IDN": Der Datensatz konnte wie gewünscht geändert werden, aber beim Abschicken gab es eine Fehlermeldung der WinIBW (z. B. Validationsfehlermeldungen), so dass der geänderte Datensatz nicht gespeichert werden konnte.
  4. <Feld>_volllog.txt: Enthält alle bearbeiteten Datensätze in der Vollanzeige, und zwar "vorher - nachher". Man kann hier also schnell prüfen, ob die Änderungen so durchgeführt werden, wie gewünscht. Dies geht auch im Dummylauf, es bietet sich also immer an, mit einer reduzierten IDN-Liste erst einen Dummylauf durchzuführen, um dann in dieser Datei die Änderungen prüfen zu können.
  5. <Feld>_stat.txt: Enthält <Tagesdatum> <Anzahl der veränderten Datensätze> (Format muss noch angepasst werden, wurde im GND-Zusammenhang zu einem bestimmten Zweck genutzt)
Anwendungsbeispiele
  1. in den Datensätzen einer IDN-Liste soll im Feld 008 der Entitätencode "kio" eingefügt werden, falls es noch keinen anderen Entitätencode gibt.
    1. Ausgangsfeld "008"
    2. Inhalt des Ausgangsfelds "kio"
    3. kein Haken bei "Feld ist wiederholbar" und "Regulärer Ausdruck"
    4. Aktion: Haken bei "oben genannten Feldinhalt neu einfügen"
    5. kein Trennzeichen angeben, da der Entitätencode nicht an einen eventuell bereits vorhanden angehängt werden soll
  2. in den Datensätzen einer IDN-Liste soll im Feld 008 der Entitätencode "kio" eingefügt werden. Falls es bereits einen anderen Entitätencode gibt, soll er hinzugefügt werden
    1. Ausgangsfeld "008"
    2. Inhalt des Ausgangsfelds "kio"
    3. kein Haken bei "Feld ist wiederholbar" und "Regulärer Ausdruck"
    4. Aktion: Haken bei "oben genannten Feldinhalt neu einfügen"
    5. als Trennzeichen ";" angeben, da der Entitätencode an einen eventuell bereits vorhanden angehängt werden soll. Laut Datenformat werden weitere Entitätencodes mit ";" angehängt.
  3. in den Datensätzen einer IDN-Liste soll das Feld 5540 gelöscht werden, wenn es mit "[GND]!989819264!" beginnt
    1. Ausgangsfeld "5540"
    2. Inhalt des Ausgangsfelds "[GND]!989819264!"
    3. Aktion: Haken bei Löschen
  4. in den Datensätzen (GND) einer IDN-Liste sollen strukturell falsche exakte Lebensdaten im Feld 548 korrigiert werden. Korrekte Struktur: "DD.MM.JJJJ", in den Daten gibt es aber oft "D.M.JJJJ"
    1. für Geburtsdatum in $a
      1. Ausgangsfeld "548"
      2. Inhalt des Ausgangsfelds: "(\d\.)(\d\.)(\d\d\d\d.*\$4datx)"
      3. Haken bei "Feld ist wiederholbar" und "Regulärer Ausdruck"
      4. Aktion: Haken bei "oben genannten Feldinhalt ersetzen durch",
      5. Feld: "548"
      6. Feldinhalt: "0$10$2$3"
    2. für Sterbedatum in $b
      1. Ausgangsfeld "548"
      2. Inhalt des Ausgangsfelds: "(.*\$b)(\d\.)(\d\.)(\d\d\d\d.*\$4datx)"
      3. Haken bei "Feld ist wiederholbar" und "Regulärer Ausdruck"
      4. Aktion: Haken bei "oben genannten Feldinhalt ersetzen durch",
      5. Feld: "548"
      6. Feldinhalt: "$10$20$3$4"
  5. in den Datensätzen des Bonner Katalogs sollen in den Personenfeldern (30XY) die dort noch vorhandenen Strings durch Verknüpfungsnummern ersetzt werden. Eine Konkordanz "Name - IDN" liegt vor, so dass man für häufig vorkommenden Namen (Mozart, Verdi, Wagner...) das Skript verwenden kann. Beispiel Grundlage: IDN-Liste des Suchsets "f (per mozart, wolfgang amadeus or per egk, werner) and bbg maxl" (so hat man in einem Suchset zwei Namen und kann gleich beide in einem Lauf abarbeiten).
    1. Ausgangsfeld (1): "(30..)"
    2. Inhalt des Ausgangsfelds (1) "Mozart, Wolfgang Amadeus"
    3. Haken bei "Feld ist wiederholbar" und "Regulärer Ausdruck" (1)
    4. Aktion: Haken bei "oben genannten Feldinhalt ersetzen durch" (1)
    5. Feld: "$1" (1)
    6. Inhalt: "!118584596!" (1)
    7. Ausgangsfeld (2): "(30..)"
    8. Inhalt des Ausgangsfelds (2) "Egk, Werner"
    9. Haken bei "Feld ist wiederholbar" und "Regulärer Ausdruck" (2)
    10. Aktion: Haken bei "oben genannten Feldinhalt ersetzen durch" (2)
    11. Feld: "$1" (2)
    12. Inhalt: "!118529129!" (2)
      Bei diesem Beispiel muss beachtet werden, dass in jedem Datensatz der IDN-Liste nach beiden Namen gesucht wird, in den meisten Fälle aber nur einer gefunden wird. Daher wird fast jeder Datensatz in der Fehlerliste auftauchen, obwohl der jeweils andere Name korrigiert werden konnte, was in diesem Fall eigentlich kein Fehler wäre.
  6. in einigen Datensätzen gibt es im Feld 4060 einen spezifischen Tippfehler: "1 Schallackplatte" statt "1 Schellackplatte". IDN-Liste: "f ufa Schallackplatte"
    1. Ausgangsfeld: "4060"
    2. Inhalt des Ausgangsfelds: "1 Schallackplatte"
    3. kein Haken bei "Feld ist wiederholbar"und "Regulärer Ausdruck"
    4. Aktion: Haken bei "oben genannten Feldinhalt ersetzen durch"
    5. Feld: "4060" 
    6. Inhalt: "1 Schellackplatte"
      Wenn der falsche Inhalt auch "2 Schallackplatten" sein könnte oder ähnliches, könnte man dies mit regulären Ausdrücken abfangen: Inhalt des Ausgangsfelds dann : "(\d) Schallackplatte(n?)"; ersetzen durch "$1 Schellackplatte$2"
  7. Für eine IDN-Liste soll in Exemplardaten jeweils das Feld 8034 hinzugefügt werden, mit jeweils anderem Inhalt. Achtung: Bei Exemplardaten gelten besonderen Bedingungen, da hier die Feldzählung im Vergleich zu den bibliographischen Angaben nicht aufsteigend ist. Beispielsweise kann es nach dem einleitenden Feld 7001 ein Feld 4801 geben. Damit kommt das Skript nicht zurecht. Lösung: Immer ein Feld mit einer höheren Nummern als die Level0-Felder als Anker benutzen (z. B. 8100) und dieses Feld inkl. Inhalt durch sich selbst und das neue gewünschte Feld + Inhalt ersetzen.
    1. Anlegen einer Konkordanz "IDN" - Tabulator - alter Inhalt, am besten RegEx: "(.*)" - Tabulator - "neues Feld/Inhalt, inkl. Bezug auf den RegEx des Inhalt des alten Feldes, damit das wieder eingefügt wird: "$1\n<neues Feld> <neuer Inhalt"
    2. Reiter "Angabe einer Konkordanz" auswählen
    3. Ausgangsfeld: "8100"
    4. Regulärer Ausdruck anhaken
    5. "obengenannten Feldinhalt ersetzen durch ...": "8100"
    Ergebnis: Eintrag der Konkordanz 
    1054371873    (.*)    $1\n8034 Seitenzählung entspricht dem Original
    erzeugt im Datensatz aus
    8100 F-1914-296156485
    ->
    8100 F-1914-296156485
    8034 Seitenzählung entspricht dem Original


Historie

Datum

geändert von

Beschreibung

2012-10-04

Mujkic

neu erstellt

2014-01-20Grundausführliche Beschreibung
2016-04-01GrundBeschreibung der Konkordanz, Beispiel 6
Scriptdatei(en)

dnb_public.js

  • Keine Stichwörter

9 Kommentare

  1. Was mir für die regulären Ausdrücke doch noch helfen würde, ist eine Art "Begrenzer" für einen bestimmten Feldinhalt. So könnte man noch besser dafür sorgen, dass der Ausdruck NUR die gewünschte Stelle korrigiert.

    Da $a immer am Zeilenanfang steht, aber der Unterfeldinhalt in Pica3 nicht direkt adressiert werden kann, wäre es super den regexp mit ^ (weist auf Zeilenanfang hin) beginnen zu lassen, was leider nicht funktioniert. Auch \n als Indikator für einen Zeilenumbruch ist nicht möglich, da dieser vielleicht schon vor der 548 ist (?).

    Des Weiteren wäre es auch gut, dem regulären Ausdruck mitteilen zu können, dass er nur bis zum Beginn eines neuen Feldes (Ende des gefundenen Feldinhaltes) suchen soll. Anwendung von $ (für Zeilenende) oder Zeilenumbruch in Analogie zum obigen Anliegen wäre prima.

  2. Wäre es auch möglich, beim Ersetzen Zeilenumbrüche einzufügen? Dann könnte man aus einem Feld ein zusätzliches neues Feld ableiten.

    Beispiel:

    aus

    130 Konzerte$mVl$mOrch$nRV 322 

    soll werden:

    130 Konzerte$mVl$mOrch$nRV 322

    430 Violinkonzerte$nRV 322

    Dafür brauchte man so etwas wie einen regulären Ausdruck "(Konzerte\$mVl\$mOrch)(.*)" und eine Ersetzung "$1$2\n430 Violinkonzert$2"

    1. Lieber Herr Baumann,

      ich hätte gedacht, dass das geht. Haben Sie es mal ausprobiert?

  3. Hallo Stefan,

     

    gibt es eine Möglichkeit, mehrere Felder auf einmal einzufügen?

     

    Beispiel:

    • vorhandenes Feld: Schauspieler und Schriftsteller
    • zu ersetzen durch 550 Schauspieler$4beru[ZEILENUMBRUCH]550 Schriftsteller$4beru

    habe es schon mit Leerzeichen und \n versucht, was leider nicht funktioniert.

     

    Danke & Grüße, alex

  4. Lieber Herr Baumann, lieber Alex,

    das mit dem Zeilenumbruch via "\n" funktioniert jetzt (bzw. ab Mittwoch, 26. März in allen WinIBWs). Das Problem war bisher, dass bei der Übergabe aus der Inputbox an das WinIBW-Skript mit "\" erfasste Zeichen escaped , also gerade nicht als Steuerzeichen interpretiert wurden (aus "\n" wurde "\\n"). Dies konnte ich jetzt im Skript selbst rückgängig machen, so dass jetzt

    • zu ersetzen durch 550 Schauspieler$4beru\n550 Schriftsteller$4beru

    geht.

    @Alex: Ist der in Deinem Kommentar vom 29.1. angesprochene Begrenzer noch relevant? Dann würde ich mal schauen, ob man das auch mit \n lösen könnte.  Würde ich mir aber gerne in Ruhe anschauen, um nicht irgendwelche unerwünschte Nebenwirkungen zu generieren.

    Viele Grüße

    Stefan |Grund

    1. Hallo Stefan,

      ganz herzlichen Dank für die schnelle Lösung.

      Bzgl. meines ersten Kommentars, bin ich mir unsicher, ob das wirklich notwendig ist. Ich vermute, dass ja eh immer nur ein Feld betrachtet wird, oder?

      Grüße, alex

      1. Hi Alex,

        Ich vermute, dass ja eh immer nur ein Feld betrachtet wird, oder?

        das Skript arbeitet nicht mit Feldgrenzen, sondern schaut sich den gesamten Datensatz an, daher muss ich Deine Frage mit nein beantworten...

        Viele Grüße

        Stefan

  5. Hallo Stefan,

    habe ein Problem mit dem Skript entdeckt. Wenn man in Feld 1 und in Feld 2 eine Ersetzen-Operation ausführt, wird nur die aus Feld 1 umgesetzt. Mein konkretes Beispiel war:

    Ist-Stand:

    • 678 amerikan. Autor
    • 043 ZZ

    Operation Feld 1:

    • 678
    • \$b.merikan. ([A-Za-z]*)
    • ersetzen durch:
    • 550
    • $1$4berc

    Operation Feld 2:

    • 043
    • ZZ
    • ersetzen durch
    • 043
    • US

    Kannst du dir das mal bitte anschauen.

    Danke & Grüße, alex

    1. Hi Alex,

      danke für den Hinweis, habe es jetzt repariert, ist ab morgen (Dienstag) aktiv in der produktiven WinIBW. Der Fehler entstand übrigens durch eine Änderung, die ich vor kurzem vornahm, damit der Kopierspeicher nicht mehr belegt wird. D.h. normales Arbeiten am PC inkl. Cut&Paste sollte jetzt auch möglich sein, wenn das Skript läuft.

      Viele Grüße

      Stefan