15. Zugriff auf die GND für Schlagwörter
Kapitel hinzufügen

JavaScript zum Zugriff auf die GND für Schlagwörter (DNB). Das Script ist Bestandteil von BCS-2 V6 Professional. Sie finden es unter dem Dateinamen dnb_gnd_schlagwort_query.js im folgenden Verzeichnis: C:\ProgramData\ImageWareComponents\BCS2_V6_64\js.

//
// WICHTIG:
//
// in den folgenden Zeilen werden Variablen definiert, die fuer
// den konkreten Anwendungsfall im Wofkflow die betroffenen
// Indizes benennen
//

//
// index_for_query:
//
// hier wird der Wert zugewiesen, der fuer den Zugriff
// auf die Normadatei verwendet werden soll.
// Dies ist typischerweise einer der Job-Indizes
// fuer den besonderen Fall, dass dieser Job-Index vom Typ "Tabelle" ist,
// muss zusaetzlich noch die Tabellen-Spalte benannt werden, die den
// jeweiligen Wert enthaelt (typischerweise ist dies ja ein Name)
// Im aktuellen Fall (bitte anpassen !) ist dies der zweite Job-Index
//
//index_for_query = id.index(2);

//
// Falls der betreffende Index vom Typ Tabelle ist:
// die folgende Zeile aktivieren (also die beiden // entfernen...
// und als zweites Argument die Nummer der Tabellenspalte angeben
// Im Beispiel wird dann also Index 2, erste Spalte verwendet.
// ACHTUNG: Falls in der Tabelle eine Zeile markiert ist, wird diese
// verwendet, ansonsten wird automatisch die erste Zeile genommen !
//

index_for_query = id.index(16,1);

//
// WICHTIG: weiter unten im Script werden die Ergebnisse der Query
// als Werte wieder auf die Job-Indizes uebertragen
// An dieser Stelle ist das Script anzupassen !
//
// Falls der zuzuweisende Index den Typ Tabelle hat, muss wieder
// zusaetzlich zur Nummer des Indexes die Nummer der Spalte angegeben werden!
//
// Beispiel: weise Ergebnisspalte 4 dem 3. Job-Index zu:
//
// id.setIndex(3,  xr.resultColumn(4));
//
// Beispiel: weise Ergebnisspalte 1 dem 2. Job-Index in der Spalte 5 zu:
//
// id.setIndex(2,  5, xr.resultColumn(4));
//


//
// das xr Objekt:
//
// zuständig für XML-Requests an SRU oder andere Server
//
// xr.url: die URL, welche für den Zugriff verwendet wird.
//         eingebette in die URL ist immer ein Ausdruck,
//         der aus einem Index-Wert stammt und vom Nutzer
//         eingegeben wurde.
//         im vorliegenden Fall: id.index(1), dies steht
//         für den momentan aktiven Index-Dialog, dort dann
//         der entsprechende Index
//         "and BBG=Tp*" bedeutet: nur 'typisierte' Personen nehmen
//         "and BBG=Ts*" bedeutet: nur Schlagworte nehmen
//
// query=per ... oder query=woe ... bezeichnet den zu verwendenden Index (DNB)
//
// bekannte Indizes:
//
// per : Person
// woe : alle Begriffe...
//
xr.url = "http://services.dnb.de/sru/authorities?version=1.1&operation=searchRetrieve&query=woe%3D" +
         index_for_query +
         " and BBG=Ts*";

//
// performRequest() führt den Zugriff durch und holt die Ergebnisliste ab.
//
id.setInformation("Anfrage in der GND (DNB) für Schlagwort '" + index_for_query + "' läuft...");
xr.performRequest();
id.setInformation("");

num_records = 0;
if (xr.elementExists("", "numberOfRecords"))
  num_records = xr.elementText ("numberOfRecords");


if (num_records > 0) {

  //
  // clearMarItemList() löscht die interne Ergebnisliste.
  //
  xr.clearMarcItemList();

  //
  // für die Darstellung der Liste in der Anwendung muss zunächst eine Menge
  // von Spalten definiert werden.
  // Die Daten werden aus dem MARC21-xml Ergebnis ausgelesen.
  // xr.addFetchItem hat die folgenden Parameter:
  //
  // column_name:     Name der Spalte in der Anzeige
  // item_number:     MARC-Feldname (Nummer)
  // subfield_code:   MARC-Unterfeld (Ziffer oder Buchstabe)
  // serial_type:     steuert, wie mit Mehrfacheinträgen zumzugehen ist:
  //                  all:      alle Einträge werden genommen, getrennt durch Kommata
  //                  first:    nur der erste Eintrag wird genommen
  //                  last:     nur der letzte Eintrag wird genommen
  //                  longest:  der längste Eintrag wird genommen
  //                  smallest: der kürzeste Eintrag wird genommen
  // prefix:          optionaler Prefix, ist dieser nicht-leer, muss das
  //                  Textelement mit dem Prefix anfangen, damit es
  //                  zum Ergebnis genommen wird.
  //                  Das Prefix wird aus dem Ergebnis entfernt
  //
  // Beispiel: um die GND-ID zu erhalten, muss das MARC-Feld 035 untersucht
  //           werden. Dort das Unterfeld "a".
  //           Allerdings sind nur die Treffer richtig, bei denen das Prefix
  //           "(DE-588)" ist.
  //
  // NEU:
  //
  // Beim Beispiel der Lebensdaten ("Jahrgang") ist es erforderlich,
  // das im subfield 'i' 'Lebensdaten' oder 'Exakte Lebensdaten' steht.
  // nur dann hat die Angabe etwas mit der Lebenszeit der Person zu tun...
  //
  // daher wird die alternative Funktion xr.addFetchItemBySubfield verwendet...
  //
  xr.addFetchItem             ("Schlagwort",             "150", "a");
  xr.addFetchItem             ("GND-ID",                 "035", "a", "first", "(DE-588)");

  xr.addFetchItemBySubfieldCtl("Oberbegriff",            "550", "a", "9", ["4:obal", "4:obge"], "ALL", "");
  xr.addFetchItemBySubfieldCtl("GND-ID Oberbegriff",     "550", "0", "9", ["4:obal", "4:obge"], "first", "(DE-588)");

  xr.addFetchItemBySubfield   ("AndererName",            "450", "a", "", "");


  //
  // fetchMarcItemList extrahiert aus dem internen XML-Ergebnis die einzelnen
  // Records
  //
  // Parameter:
  //
  // path_to_list:       Pfad vom Root-Element zur Liste der Records. Im vorliegenden Fall "records"
  // list_element_name:  Name des eigentlichen Record-Elements. hier "record"
  // path_to_items:      Unterhalb des Record-Elements der Pfad zu den eigentlichen Record-Daten
  //
  xr.fetchMarcItemList ("records", "record", "recordData/record");

  //
  // Anzeige der Liste
  //
  if (xr.itemListLength() > 0) {
     xr.showMarcItemList("GND-Abfrage bei der DNB für das Schlagwort '" + index_for_query + "'",
                         xr.itemListLength() + " Treffer. Bitte doppelt klicken um die GND-ID zu übernehmen!");
  } else {
     xr.notifyUser ("Ergebnis GND-ID Recherche", "KEINE TREFFER !");
  }

//xr.showXmlResult();

  //
  // Hinweis für den Nutzer
  // (Kann auch auskommentiert werden)
  //
  //if (xr.resultColumn(3).length > 0)
  //   xr.notifyUser ("Ergebnis GND-ID", xr.resultColumn(3));

  //
  // Falls eine GND-ID ermittelt wurde, werden nun einige Werte
  // in die aktuellen Index-Werte übernommen:
  // resultColumn (n) liefert den Wert der n-ten Spalte
  // id.setIndex(i, wert) setzt den Index-Wert des i-ten Index
  //
  if (xr.resultColumn(2).length > 0) {
    id.setIndex(16, 1, xr.resultColumn(1));
    id.setIndex(16, 2, xr.resultColumn(2));
    id.setIndex(16, 3, xr.resultColumn(3));
    id.setIndex(16, 4, xr.resultColumn(4));
    id.setIndex(16, 5, xr.resultColumn(5));
  }

  xr.requestResult;

} else {
     xr.alertUser ("Ergebnis GND-ID Recherche", "KEINE TREFFER !");
}