14. Zugriff auf die GND für typisierte PersonenKapitel hinzufügen
JavaScript zum Zugriff auf die GND für typisierte Personen (DNB). Das Script ist Bestandteil von BCS-2 V6 Professional. Sie finden es unter dem Dateinamen dnb_gnd_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(2,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
//
xr.url = "http://services.dnb.de/sru/authorities?version=1.1&operation=searchRetrieve&query=per%3D" +
index_for_query +
" and BBG=Tp*";
//
// performRequest() führt den Zugriff durch und holt die Ergebnisliste ab.
//
id.setInformation("Anfrage in der GND (DNB) für '" + 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 ("Name", "100", "a");
xr.addFetchItemBySubfield("Jahrgang", "548", "a", "i", "Lebensdaten", "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 '" + id.index(8) + "'",
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(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(3).length > 0) {
id.setIndex(8, xr.resultColumn(1));
id.setIndex(12, xr.resultColumn(2));
id.setIndex(11, xr.resultColumn(3));
}
xr.requestResult;
} else {
xr.alertUser ("Ergebnis GND-ID Recherche", "KEINE TREFFER !");
}