11. Zugriff auf die GND für typisierte Personen
Kapitel hinzufügen

JavaScript zum Zugriff auf die GND für typisierte Personen (DNB). Version für den C3+-Dialog. Die Kommunikation erfolgt über „ar“- und „ap“-Objekte. Das Script ist Bestandteil von BCS-2 V6 Professional. Sie finden es unter dem Dateinamen dnb_gnd_c3_plus_query.js im folgenden Verzeichnis: C:\ProgramData\ImageWareComponents\BCS2_V6_64\js.

//
// 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
//
xr.url = "http://services.dnb.de/sru/authorities?version=1.1&operation=searchRetrieve&query=per%3D" +
         ap.author +
         " and BBG=Tp*";

//
// performRequest() führt den Zugriff durch und holt die Ergebnisliste ab.
//
ut.setInformation ("Abfrage der Normdaten bei der DNB...", "GND Recherche für " + ap.author + " läuft ...");
ut.showInformation();
xr.performRequest();
ut.hideInformation();

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.
  //
  xr.addFetchItem("Qualitaet",              "042", "a");
  xr.addFetchItem("Name",                   "100", "a");
  xr.addFetchItem("Jahrgang",               "548", "a", "longest");
  xr.addFetchItem("GND-ID",                 "035", "a", "first", "(DE-588)");
  xr.addFetchItem("Beruf",                  "550", "a");
  xr.addFetchItem("Geburtsort",             "551", "a");
  xr.addFetchItem("weitere Informationen",  "678", "b");

  //
  // 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 den Autor '" + ap.author + "'",
                         xr.itemListLength() + " Treffer. Bitte doppelt klicken um die GND-ID zu übernehmen!");
  } else {
     xr.notifyUser ("Ergebnis GND-ID Recherche", "KEINE TREFFER !");
  }


  //
  // Hinweis für den Nutzer
  // (Kann auch auskommentiert werden)
  //
if (xr.resultColumn(4).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(4).length > 0) {
     ar.author      = xr.resultColumn(2);
     ar.dob         = xr.resultColumn(3);
     ar.gnd_id      = xr.resultColumn(4);
     ar.profession  = xr.resultColumn(5);
     ar.pob         = xr.resultColumn(6);
     ar.information = xr.resultColumn(7);
  }

  xr.requestResult;

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