Generischer JSON Import
OPAC Plugin für die Datenübernahme von JSON Datensätzen
Übersicht
Name | Wert |
---|---|
Identifier | intranda_opac_json |
Repository | |
Lizenz | GPL 2.0 oder neuer |
Letzte Änderung | 25.07.2024 12:02:24 |
Einführung
Die vorliegende Dokumentation beschreibt die Installation, Konfiguration und den Einsatz des Plugins. Mit Hilfe dieses Plugins können Daten aus einem externen System abgefragt und in Goobi übernommen werden. Der Katalog muss eine API haben, über die Datensätze als JSON ausgeliefert werden können.
Installation
Das Plugin besteht aus drei Dateien:
Die Datei plugin_intranda_opac_json-base.jar
enthält die Programmlogik und muss für den Nutzer tomcat8
lesbar an folgendem Pfad installiert werden:
Die Datei plugin_intranda_opac_json-gui.jar
enthält die Nutzeroberfläche und muss für den Nutzer tomcat8
lesbar an folgendem Pfad installiert werden:
Die Datei plugin_intranda_opac_json.xml
muss ebenfalls für den Nutzer tomcat8
lesbar sein und unter folgendem Pfad liegen:
Überblick und Funktionsweise
Wenn in Goobi nach einem Identifier gesucht wird, wird im Hintergrund eine Anfrage an die konfigurierte URL gestellt.
Passend zur oben beschriebenen Konfiguration entspricht dies etwa der folgenden URL:
Sind weitere Felder für die Katalogabfrage definiert, so werden diese ebenfalls in der Nutzeroberfläche angezeigt:
Sofern unter dieser URL ein gültiger Datensatz gefunden wird, wird dieser nach den innerhalb von recordType
definierten Feldern durchsucht, in dem der Dokumententyp stehen soll. Wenn keine Felder definiert wurden oder sie nicht gefunden wurden, wird stattdessen der Typ aus dem konfigurierten Element defaultPublicationType
genutzt. Mit dem ermittelten Typ wird dann das gewünschte Strukturelement erzeugt.
Im Anschluß daran werden die konfigurierten Ausdrücke der metadata
und person
der Reihe nach ausgewertet. Sofern mit einem Ausdruck Daten gefunden werden, wird das entsprechend angegebene Metadatum erzeugt.
Wurde innerhalb der Konfiguration mit dem Parameter showResultList
festgelegt, dass eine Trefferliste zur Verfügung stehen soll, aus der der Nutzer einen Datensatz auswählen kann, so öffnet sich nach der Katalogabfrage ein Dialog wie der folgende:
Konfiguration
Die Konfiguration des Plugins erfolgt in den folgenden Dateien, die sich im Verzeichnis /opt/digiverso/goobi/config/
befinden.
In der Datei goobi_opac.xml
muss die Schnittstelle zum gewünschten Katalogsystem bekannt gemacht werden. Dies geschieht durch einen Eintrag, der wie folgt aussieht:
Das Attribut title
enthält einen eindeutigen Namen. Das zu verwendende Plugin wird durch opacType
bestimmt, das in diesem Fall intranda_opac_json
sein muss. Die anderen Felder sind nicht erforderlich.
Die Zuordnung des JSON-Datensatzes zu den Goobi-Metadaten wird durch die Datei plugin_intranda_opac_json.xml
bestimmt. Auf die Felder innerhalb des JSON-Datensatzes wird mit JSONPath
, dem XPath-Äquivalent für JSON, verwiesen.
Die zur Verfügung stehenden Kataloge werden in einzelnen <config name="XYZ">
Blöcken definiert. Das Attribut name
enthält den Namen, unter den der Katalog ausgewählt werden kann.
Innerhalb des Katalogs können verschiedene Feldtypen genutzt werden:
Feldtyp | Beschreibung |
---|---|
| Mit dieser Konfiguration können weitere Abfragefelder definiert werden, die innerhalb der Nutzeroberfläche aufgeführt werden sollen. |
| Geben Sie hier die Zugangsdaten für den Zugriff auf die Katalogschnittstelle an. |
| Dieser Typ dient zum Erkennen des Dokumententyps des JSON-Datensatzes. |
| Dieser Typ wird genutzt, wenn zuvor kein Dokumententyp erkannt wurde. |
| Dieser Typ dient zum Mapping von JSON-Feldern zu Metadaten. |
| Dieser Typ dient zum Mapping von JSON-Feldern zu Personen. |
| Mit diesem Parameter kann festgelegt werden, dass nach einer Katalogabfrage eine Auswahlliste angezeigt werden soll, die eine Auswahl des zu importierenden Unterdatensatzes aus einer Liste erlaubt. |
| Die hier angebene URL wird dazu verwendet, dass die ID des ausgewählten Unterdatensatzes für die Abfrage an die hier festgelegte URL angehängt wird. |
Feldtyp: field
Das Element <field>
wird über das Attribut id
identifiziert. Innerhalb der Einträge kann im Element <type>
definiert werden, welche Felder in der Eingabemaske zur Verfügung stehen. Dabei gibt es die verschiedenen Typen text
, select
und select+text
. Der Type text
erzeugt ein einfaches Eingabefeld, select
eine Auswahlliste und select+text
beides. Das Element <label>
enthält den Namen, unter dem das Feld in der Oberfläche angezeigt wird und die Einträge in <select>
defininieren, welche Inhalte in der Auswahlliste enthalten sind. Optional lässt sich eine Vorbelegung angeben. Dies geschieht mit dem Element <defaultText>
.
Das Element ist wiederholbar, so dass die Eingabemaske auch mehrere Eingabefelder enthalten kann.
Eines der Felder muss dabei die URL zum Katalog enthalten. Dieser wird innerhalb des Elements <url>
definiert. Um auf die Nutzereingaben zugreifen zu können, stehen die Variablen {id.select}
und {id.text}
zur Verfügung, wobei id
durch den gewünschten field-Identifier ersetzt werden muss.
Feldtyp: authentication
Mittels <authentication>
kann definiert werden, wie die Authentifizierung gegenüber dem Katalog erfolgen soll. Das Element kann fehlen oder frei bleiben, wenn der Katalog anonyme Zugriffe erlaubt.
Ansonsten stehen zwei Arten zur Verfügung. Sind nur <username>
und <password>
angegeben, findet eine Basic-Authentifizierung statt.
Als zweite Möglichkeit steht ein Login zur Verfügung. Hierbei wird die im Feld <loginUrl>
definierte API aufgerufen, um eine gültige Session-ID zu bekommen. Dabei wird die Session-ID in dem Feld gesucht, das in <sessionid>
konfiguriert wird. Die Session-ID wird dann beim eigentlichen Request als Header-Parameter genutzt. Der Parameter wird in <headerParameter>
festgelegt.
Feldtyp: recordType
Das Element <recordType>
enthält die Attribute field
, docType
und anchorType
. In field
wird ein JSONPath-Ausdruck angegeben, der auf den Datensatz angewendet wird. Falls es sich bei dem Typ um ein mehrbändiges Werk oder eine Zeitung/Zeitschrift handelt, muss der zu nutzende anchor
Typ im Feld anchorType
angegeben werden. Existiert ein Feld mit so einem Ausdruck, wird der in docType
definierte Dokumententyp erstellt. Wenn nicht, wird der nächste konfigurierte recordType
überprüft.
Dabei gibt es eine Reihe von Zeichen, die in dieser Datei maskiert sind. Das betrifft zum einen Zeichen wie < > & "
, die in XML eine besondere Bedeutung haben und daher als < > & "
angegeben werden müssen. Daneben ist noch das Komma
betroffen, das mittels Backslash ebenfalls als \,
maskiert werden muss.
Feldtyp: defaultPublicationType
Wenn keine der Definitionen zutreffen, kann ein Dokument mit dem Typ aus <defaultPublicationType>
erzeugt werden. Wenn dieses Feld fehlt oder leer ist, wird stattdessen kein Datensatz angelegt.
Feldtypen: metadata & person
Die beiden Element <metadata>
und <person>
dienen zum Import einzelner Inhalte aus dem JSON-Datensatz in in die jeweiligen Metadaten. Dazu stehen eine Reihe von Attributen zur Verfügung:
Attribut | Bedeutung |
---|---|
| Enthält den Namen des Metadatums oder der Person |
| Pfad zum Inhalt innerhalb des JSON-Objekts |
| Darf den Wert |
| Regulärer Ausdruck, der prüft ob der gefundene Wert dem definierten Ausdruck entspricht. Ist dies nicht der Fall, wird der Wert ignoriert. |
| Ein regulärer Ausdruck zur Manipulation des Wertes. Dieser wird nach der Prüfung der |
| Ein regulärer Ausdruck, mit dem bei Personen der Vorname aus dem Feldinhalt ermittelt wird. |
| Ein regulärer Ausdruck, mit dem bei Personen der Nachname aus dem Feldinhalt ermittelt wird. |
| Definiert, ob der enthaltene Wert direkt importiert wird, oder einen Link zu einem anderen Datensatz enthält. |
| Enthält den Namen des zu nutzenden |
| Enthält die zu nutzende Basis-URL, falls der Link zum Datensatz ein relativer Pfad ist. |
Nützliche Links
Für die Installation bzw. insbesondere für die Konfiguration des Plugins könnten die folgenden URLs eine weiterführende Hilfe sein:
JSONPath Online Evaluator: https://jsonpath.com/
JSONPath Description: https://support.smartbear.com/alertsite/docs/monitors/api/endpoint/jsonpath.html
Last updated