<code>
// ------------------------------------------------------------------------------------------
// Date: 2017/11/08
// Author: RLO/KPA
// ------------------------------------------------------------------------------------------
// History:
//
// 2017-08-22 RLO: changes in Field 100 (added role and rolename)
// 2017-08-22 RLO: added constant fields 336, 337, 338
// 2017-08-22 RLO: callname (Signatur): moved from Field 850 to Field 852
// 2017-08-23 RLO: added constant field 040
// 2017-08-30 RLO: field 936: changes for volume/month subfields
// 2017-11-08 RLO/KPA: setting GND fields only if GND value is not empty
//
// ------------------------------------------------------------------------------------------
// Testweises Erzeugen eines MARC21 XML-Files mittels Scripting
// wichtig: Am Ende _MUSS_ der generierte XML-String als Ergebnis zurückgegeben werden !
//
// WICHTIG: datafield Tags IMMER in aufsteigender Reihenfolge erzeugen!
//
// ------------------------------------------------------------------------------------------
// -----------------------------------------------------------
// -----------------------------------------------------------
// Indexnames as Script-Variables:
// use them instead numerics...
// -----------------------------------------------------------
// -----------------------------------------------------------
ind_Order_ID = 1; // Index Order-ID Type: Zeichenkette [kein zugeordneter Meta-Daten-Typ]: myBib eDoc Order-Number
ind_Titel_der_Zeitung_Zeitschrift = 2; // Index Titel der Zeitung/Zeitschrift Type: Zeichenkette [Titel]:
ind_Verlag = 3; // Index Verlag Type: Zeichenkette [Verlag]:
ind_Erscheinungsort = 4; // Index Erscheinungsort Type: Zeichenkette [Ort der Veröffentlichung]:
ind_ZDB_ID = 5; // Index ZDB-ID Type: Zahl [ZDB ID]:
ind_Titel_des_Artikels = 6; // Index Titel des Artikels Type: Zeichenkette [Artikel-Titel]:
ind_Untertitel_des_Artikels = 7; // Index Untertitel des Artikels Type: Zeichenkette [Artikel-Untertitel]:
ind_Sprache_des_Artikels = 8; // Index Sprache des Artikels Type: Sammlung (Optionsliste mit Mehrfachauswahl) [Sprache]:
ind_Erscheinungsdatum = 9; // Index Erscheinungsdatum Type: Zeichenkette [Article-Date]:
ind_Band = 10; // Index Band Type: Zeichenkette [Band]:
ind_Jahr = 11; // Index Jahr Type: Zeichenkette [Datum der Veröffentlichung]: Jahr des Bandes oder Heftes
ind_Seitenangabe = 12; // Index Seitenangabe Type: Zeichenkette [Seitenangabe]: von - bis
ind_Fotos = 13; // Index Fotos Type: Optionsliste [kein zugeordneter Meta-Daten-Typ]: Fotos
ind_Autoren_des_Artikels = 14; // Index Autoren des Artikels Type: Tabelle [Artikel-Autor]: Artikel-Autoren
col_Autor_Autorname = 1; // Column Autorname Type: Zeichenkette [Artikel-Autor]: Name des Autors in Ansetzungsform
col_Autor_Lebensdaten = 2; // Column Lebensdaten Type: Zeichenkette [Lebensdaten]: Geburts- und Sterbedaten
col_Autor_GND_ID_des_Autors = 3; // Column GND ID des Autors Type: Zeichenkette [GND ID]:
ind_Sonstige_Personen = 15; // Index Sonstige Personen Type: Tabelle [Andere Person]:
col_Sonst_Name = 1; // Column Name Type: Zeichenkette [Andere Person]:
col_Sonst_Rolle = 2; // Column Rolle Type: Optionsliste [Rolle der Person]: Rolle der Person
col_Sonst_Lebensdaten = 3; // Column Lebensdaten Type: Zeichenkette [Lebensdaten]:
col_Sonst_GND_ID = 4; // Column GND ID Type: Zahl [GND ID]:
ind_Schlagworte = 16; // Index Schlagworte Type: Tabelle [Schlagwort]: Schlagworte
col_Schla_Schlagwort = 1; // Column Schlagwort Type: Zeichenkette [Schlagwort]: Schlagwort
col_Schla_GND_ID = 2; // Column GND-ID Type: Zeichenkette [GND ID Schlagwort]: GND-ID
ind_Organisation_Koerperschaft = 17; // Index Organisation/Körperschaft Type: Tabelle [Körperschaft]: Organisation/Körperschaft
col_Organ_Organisation_Koerperschaft = 1; // Column Organisation/Körperschaft Type: Zeichenkette [Körperschaft]: Organisation/Körperschaft
col_Organ_GND_ID = 2; // Column GND-ID Type: Zeichenkette [GND ID]: GND-ID
ind_Veranstaltungen = 18; // Index Veranstaltungen Type: Tabelle [Veranstaltung]: Veranstaltungen
col_Veran_Veranstaltung = 1; // Column Veranstaltung Type: Zeichenkette [Veranstaltung]: Veranstaltung
col_Veran_GND_ID = 2; // Column GND-ID Type: Zeichenkette [GND ID]: GND-ID
col_Veran_Ort = 3; // Column Ort Type: Zeichenkette [kein zugeordneter Meta-Daten-Typ]: Ort
col_Veran_Zeitraum = 4; // Column Zeitraum Type: Zeichenkette [Lebensdaten]: Zeitraum oder Tag der Veranstaltung
ind_Kuenstler = 19; // Index Künstler Type: Tabelle [Artist]: Künstler
col_Kuens_Kuenstler = 1; // Column Künstler Type: Zeichenkette [Artist]: Name des Autors in Ansetzungsform
col_Kuens_Rolle = 2; // Column Rolle Type: Optionsliste [Rolle der Person]: Rolle der Person
col_Kuens_Lebensdaten = 3; // Column Lebensdaten Type: Zeichenkette [Lebensdaten]: Geburts- und Sterbedaten
col_Kuens_GND_ID_Kuenstler = 4; // Column GND ID Künstler Type: Zeichenkette [GND ID]:
ind_Textgattung = 20; // Index Textgattung Type: Optionsliste [kein zugeordneter Meta-Daten-Typ]: Textgattung
ind_Kategorie = 21; // Index Kategorie Type: Optionsliste [Typ (Monographie, Periodikum)]:
ind_Vorlagenart = 22; // Index Vorlagenart Type: Optionsliste [kein zugeordneter Meta-Daten-Typ]: Vorlagenart, Herkunftsangabe
ind_Medientyp = 23; // Index Medientyp Type: Optionsliste [Typ (Text, Karte, Video, Audio...)]:
ind_Genre = 24; // Index Genre Type: Optionsliste [Genre]: Das Genre definiert den Typ des Mediums: (Monografie (Buch), Artikel, ...)
ind_Nutzungsrecht = 25; // Index Nutzungsrecht Type: Optionsliste [Copyright]: Copyright
// -----------------------------------------------------------
// -----------------------------------------------------------
//
// initialisieren...
//
xr.initMarc21Doc();
//
// der "Leader"...
//
xr.setLeader();
//
// controlfield 001 enthält als eindeutige Kennung die MyBib Auftragsnummer
//
xr.addControlField ('001', job.keyMap['ME_Order_ID']);
//
// controlfield 003 enthält als die jeweilige ISIL (entnommen aus ME-Feld 'or_responder_id'
//
xr.addControlField ('003', job.myBibOrderRec['or_responder_id']);
//
// controlField 007: Typ der Ressource: hier muss der Index-Wert auf 'cr' oder 'tu' gemappt werden...
//
if (job.index(18) == 'Online-Ressource')
ressource_type = 'cr';
else
ressource_type = 'tu';
xr.addControlField ('007', ressource_type);
//
// datafield 040: Konstantes Feld (SWB, Katz)
//
xr.addDataField ("", "", "040");
xr.addSubField ("e", "rda");
//
// datafield 041: Sprache des Artikels
//
xr.addDataField ("0", "", "041");
// subfield a: Sprache
xr.addSubField ("a", job.index(ind_Sprache_des_Artikels));
//
// Autoren:
//
// erster Autor in Feld 100, zwei weitere in Feld 700
// NOTA: 700er weiter unten wegen Reihenfolge...
// maximal drei...
//
if (job.indexNumRows(ind_Autoren_des_Artikels) >= 1) {
//
// erster Autor:
//
xr.addDataField ("1", "", "100");
xr.addSubField ("a", job.indexVal(ind_Autoren_des_Artikels, 1, col_Autor_Autorname));
if (job.indexVal(ind_Autoren_des_Artikels, 1, col_Autor_GND_ID_des_Autors).length)
xr.addSubField ("0", "(DE-588)" + job.indexVal(ind_Autoren_des_Artikels, 1, col_Autor_GND_ID_des_Autors));
xr.addSubField ("e", "VerfasserIn");
if (job.indexVal(ind_Autoren_des_Artikels, 1, col_Autor_GND_ID_des_Autors).length)
xr.addSubField ("2", "gnd");
xr.addSubField ("4", "aut");
} // job.indexNumRows(ind_Autoren_des_Artikels) >= 1
//
// datafield 245: Titel des Artikels
//
xr.addDataField ("1", "0", "245");
// subfield a: Titel
// subfield b: Untertitel
xr.addSubField ("a", job.index(ind_Titel_des_Artikels));
xr.addSubField ("b", job.index(ind_Untertitel_des_Artikels));
//
// datafield 264: Verlag, Ort, Jahr...
//
xr.addDataField ("", "1", "264");
// subfield a: Ort
// subfield b: Verlag
// subfield c: Datum
xr.addSubField ("a", job.index(ind_Erscheinungsort));
xr.addSubField ("b", job.index(ind_Verlag));
xr.addSubField ("c", job.index(ind_Erscheinungsdatum));
//
// datafield 336: Konstantes Feld (SWB, Katz)
//
xr.addDataField ("", "", "336");
xr.addSubField ("a", "Text");
xr.addSubField ("b", "txt");
xr.addSubField ("2", "rdacontent");
//
// datafield 337: Konstantes Feld (SWB, Katz)
//
xr.addDataField ("", "", "337");
xr.addSubField ("a", "ohne Hilfsmittel zu benutzen");
xr.addSubField ("b", "n");
xr.addSubField ("2", "rdamedia");
//
// datafield 338: Konstantes Feld (SWB, Katz)
//
xr.addDataField ("", "", "338");
xr.addSubField ("a", "Band");
xr.addSubField ("b", "nc");
xr.addSubField ("2", "rdacarrier");
//
// datafield 600: Kuenstler als Schlagwoerter
//
if (job.indexNumRows(ind_Kuenstler) >= 1) {
//
// iteriere ueber alle Kuenstler
//
for (i = 1; i <= job.indexNumRows(ind_Kuenstler); i++) {
xr.addDataField ("1", "7", "600");
xr.addSubField ("a", job.indexVal(ind_Kuenstler, i, col_Kuens_Kuenstler));
if (job.indexVal(ind_Kuenstler, i, col_Kuens_GND_ID_Kuenstler).length) {
xr.addSubField ("0", "(DE-588)" + job.indexVal(ind_Kuenstler, i, col_Kuens_GND_ID_Kuenstler));
xr.addSubField ("2", "gnd");
}
} // for i...
} // job.indexNumRows(ind_Kuenstler) >= 1
//
// datafield 610: Koerperschaften als Schlagwoerter
//
if (job.indexNumRows(ind_Organisation_Koerperschaft) >= 1) {
//
// iteriere ueber alle Koerperschaften
//
for (i = 1; i <= job.indexNumRows(ind_Organisation_Koerperschaft); i++) {
xr.addDataField ("", "7", "610");
xr.addSubField ("a", job.indexVal(ind_Organisation_Koerperschaft, i, col_Organ_Organisation_Koerperschaft));
if (job.indexVal(ind_Organisation_Koerperschaft, i, col_Organ_GND_ID).length) {
xr.addSubField ("0", "(DE-588)" + job.indexVal(ind_Organisation_Koerperschaft, i, col_Organ_GND_ID));
xr.addSubField ("2", "gnd");
}
} // for i...
} // job.indexNumRows(ind_Organisation_Koerperschaft) >= 1
//
// datafield 610: Veranstaltungen als Schlagwoerter
//
if (job.indexNumRows(ind_Veranstaltungen) >= 1) {
//
// iteriere ueber alle Koerperschaften
//
for (i = 1; i <= job.indexNumRows(ind_Veranstaltungen); i++) {
xr.addDataField ("", "7", "610");
xr.addSubField ("a", job.indexVal(ind_Veranstaltungen, i, col_Veran_Veranstaltung));
if (job.indexVal(ind_Veranstaltungen, i, col_Veran_GND_ID).length) {
xr.addSubField ("0", "(DE-588)" + job.indexVal(ind_Veranstaltungen, i, col_Veran_GND_ID));
xr.addSubField ("2", "gnd");
}
} // for i...
} // job.indexNumRows(ind_Veranstaltungen) >= 1
//
// datafield 650: titel des Dossiers
// 650: Nebeneintragung unter einem Schlagwort
//
xr.addDataField ("", "7", "650");
// subfield a: Text
// subfield 2: Quelle (hier wieder ISIL)
xr.addSubField ("a", job.myBibOrderRec['or_item_series_title']);
xr.addSubField ("2", job.myBibOrderRec['or_responder_id']);
//
// datafield 650: Schlagwoerter
//
if (job.indexNumRows(ind_Schlagworte) >= 1) {
//
// iteriere ueber alle Schlagwoeter
//
for (i = 1; i <= job.indexNumRows(ind_Schlagworte); i++) {
xr.addDataField ("", "7", "650");
xr.addSubField ("a", job.indexVal(ind_Schlagworte, i, col_Schla_Schlagwort));
if (job.indexVal(ind_Schlagworte, i, col_Schla_GND_ID).length) {
xr.addSubField ("0", "(DE-588)" + job.indexVal(ind_Schlagworte, i, col_Schla_GND_ID));
xr.addSubField ("2", "gnd");
}
} // for i...
} // job.indexNumRows(ind_Schlagworte) >= 1
//
// Tag 700
//
// weitere Autoren:
//
// erster Autor in Feld 100, zwei weitere in Feld 700
// maximal drei...
//
if (job.indexNumRows(ind_Autoren_des_Artikels) >= 2) {
//
// zweiter Autor:
//
xr.addDataField ("1", "", "700");
xr.addSubField ("a", job.indexVal(ind_Autoren_des_Artikels, 2, col_Autor_Autorname));
if (job.indexVal(ind_Autoren_des_Artikels, 2, col_Autor_GND_ID_des_Autors).length)
xr.addSubField ("0", "(DE-588)" + job.indexVal(ind_Autoren_des_Artikels, 2, col_Autor_GND_ID_des_Autors));
xr.addSubField ("e", "VerfasserIn");
if (job.indexVal(ind_Autoren_des_Artikels, 2, col_Autor_GND_ID_des_Autors).length)
xr.addSubField ("2", "gnd");
xr.addSubField ("4", "aut");
} // job.indexNumRows(ind_Autoren_des_Artikels) >= 2
if (job.indexNumRows(ind_Autoren_des_Artikels) >= 3) {
//
// zweiter Autor:
//
xr.addDataField ("1", "", "700");
xr.addSubField ("a", job.indexVal(ind_Autoren_des_Artikels, 3, col_Autor_Autorname));
if (job.indexVal(ind_Autoren_des_Artikels, 3, col_Autor_GND_ID_des_Autors).length)
xr.addSubField ("0", "(DE-588)" + job.indexVal(ind_Autoren_des_Artikels, 3, col_Autor_GND_ID_des_Autors));
xr.addSubField ("e", "VerfasserIn");
if (job.indexVal(ind_Autoren_des_Artikels, 3, col_Autor_GND_ID_des_Autors).length)
xr.addSubField ("2", "gnd");
xr.addSubField ("4", "aut");
} // job.indexNumRows(ind_Autoren_des_Artikels) >= 3
//
// datafield 700: sonstige beteiligte Personen
//
if (job.indexNumRows(ind_Sonstige_Personen) >= 1) {
//
// iteriere ueber alle sonstigen Personen...
//
for (i = 1; i <= job.indexNumRows(15); i++) {
role = job.indexVal(ind_Sonstige_Personen, i, col_Sonst_Rolle);
role_abbrev = ut.subString(role, 0, 3);
role_name = ut.subString(role, 4);
xr.addDataField ("1", "", "700");
xr.addSubField ("a", job.indexVal(ind_Sonstige_Personen, i, col_Sonst_Name));
if (job.indexVal(ind_Sonstige_Personen, i, col_Sonst_GND_ID).length)
xr.addSubField ("0", "(DE-588)" + job.indexVal(ind_Sonstige_Personen, i, col_Sonst_GND_ID));
if (job.indexVal(ind_Sonstige_Personen, i, col_Sonst_GND_ID).length)
xr.addSubField ("2", "gnd");
xr.addSubField ("e", role_name);
xr.addSubField ("4", role_abbrev);
} // for i...
} // job.indexNumRows(ind_Sonstige_Personen) >= 1
//
// datafield 773: Titel der Zeitung/Zeitschrift
//
xr.addDataField ("0", "8", "773");
// subfield i: Text 'In'
// subfield t: Titel der Zeitschrift/Zeitung
// subfield w: ZDB-ID, (DE-600) wird vorangestellt
xr.addSubField ("i", "Enthalten in");
xr.addSubField ("t", job.index(ind_Titel_der_Zeitung_Zeitschrift));
xr.addSubField ("w", "(DE-600)" + job.index(ind_ZDB_ID));
//
// datafield 852: Signatur des Dossiers
//
xr.addDataField ("", "", "852");
// subfield a: ISIL
// subfield c: Signatur
xr.addSubField ("a", job.myBibOrderRec['or_responder_id']);
xr.addSubField ("e", job.myBibOrderRec['or_item_callname']);
//
// datafield 856: eL Link
//
//
// Aufruf-Formate: Java oder Web-Frontend...
//
// Web-Frontend: http://<server-url>/<mel-name>/web/index.html?open=<medianumber>
// Java Viewer: http://<server-url>/<mel-name>/browser/open/<medianumber>
//
eL_name = job.getWfKeyValue("EL_NAME");
server_url = job.getWfKeyValue("EL_SERVER");
url = server_url + eL_name + '/web/index.html?open=' + job.index1;
xr.addDataField ("4", "2", "856");
// subfield u: URL
// subfield x: immer "D"
// subfield y: immer "elektronische Ressource eL"
xr.addSubField ("u", url);
xr.addSubField ("x", "D");
xr.addSubField ("y", "elektronische Ressource eL");
//
// datafield 936: befuelle aus index ind_Erscheinungsdatum (Erscheinungsdatum), wenn dieser
// nicht leer ist.
//
// ansonsten nimm index ind_Band (Band) und ind_Jahr (Jahr)
//
var date_str = new String(job.index(ind_Erscheinungsdatum));
var date_year = new String;
var date_month = new String;
var date_day = new String;
//
// Zerlege den Index 9 in drei Teile, wenn moeglich...
//
pos_point = date_str.indexOf('.');
pos_last_point = date_str.lastIndexOf('.');
if (pos_point > 0) {
date_day = date_str.substring(0, pos_point).trim();
if (pos_last_point > pos_point) {
date_month = date_str.substring(pos_point + 1, pos_last_point).trim();
date_year = date_str.substring(pos_last_point + 1, date_str.length).trim();
} // pos_last_point > pos_point
} // pos_point > 0...
if ((date_year.length > 0) || (date_month.length > 0) || (date_day.length > 0)) {
//
// Fall 1: index ind_Erscheinungsdatum ist vorhanden und es liessen sich Jahr/Monat/Tag (oder Teile) extrahieren ...
//
//
// datafield 936: Band, Ausgabe, Seiten
//
xr.addDataField ("u", "w", "936");
// subfield b: Tag
// subfield c: Moant
// subfield j: Jahr
// subfield h: Seitenangabe
xr.addSubField ("b", date_day);
xr.addSubField ("c", date_month);
xr.addSubField ("j", date_year);
xr.addSubField ("h", job.index(ind_Seitenangabe));
} // date_year.length > 0...
else {
//
// Fall 2: Index 9 war leer, nimm nun Band und Jahr (Index 10/11)
//
var sl = ut.split(job.index(ind_Band), '=');
var band = '';
var monat = '';
if (sl.length >= 2) {
band = ut.trimmed(sl[0]);
monat = ut.trimmed(sl[1]);
} else {
band = ut.trimmed(job.index(ind_Band));
}
//
// datafield 936: Band, Ausgabe, Seiten
//
xr.addDataField ("u", "w", "936");
// subfield d: Ausgabe/Band
// subfield c: Monatsangabe
// subfield j: Jahr
// subfield h: Seitenangabe
if (band.length > 0)
xr.addSubField ("d", band);
if (monat.length > 0)
xr.addSubField ("c", monat);
xr.addSubField ("j", job.index(ind_Jahr));
xr.addSubField ("h", job.index(ind_Seitenangabe));
} // date_year.length > 0...
//
// Speichern des XML-Ergebnisses in der KeyMap des Jobs unter 'Marc21XML'
//
job.setKeyValue("Marc21XML", xr.marc21XmlString());
//
// dies liefert den (hoffentlich) erzeugten XML-String als Ergebnis zurück
// und führt dazu, dass die Datei - wie im Transferziel angegegben - geschrieben wird...
//
xr.marc21XmlString();