Inhalt
Seitenhistorie
Christof Mainberger, 3. Dezember 2024
Die wichtigste Funktion der ExpoDB ist es, einen Online-Abruf für Daten zu ermöglichen, die in imdas-pro erfasst werden. Ein solcher Abruf wird einfach durch eine URL bewerkstelligt, die alle Angaben zu den gewünschten Datensätzen enthält. D.h. alle Parameter zur Auswahl der Daten, ihrer Sortierung, ihrer Formatierung sowie zu Facetten werden in der URL codiert. Es braucht und gibt kein anderes Mittel, der Schnittstelle
...
Bedarf mitzuteilen, was man suchen möchte. Diese Schnittstelle hat sich bewährt und musste über die Jahre kaum erweitert werden. Da die Parametrisierung der Schnittstelle (nahezu) vollständig beschreibt, was die ExpoDB leisten kann, ist es unbedingt notwendig diese Parameter zu verstehen, wenn man mit der ExpoDB arbeiten möchte und neue Features z.B. für einen Digitalen Katalog plant.
Die ExpoDB-Schnittstelle ist eine "ganz normale" Webschnittstelle. D.h. im Kern geht es immer darum, dass ein "Client" übers über das Internet eine Anfrage an die ExpoDB-Schnittstelle schickt, und . Und dass die ExpoDB-Schnittstelle eine Antwort übers über das Internet zurücksendet. Der "Client" kann dabei einfach der normale Internet-Browser sein, den man auf dem Arbeitsplatzrechner hat. Oder auch das Frontend eines Digitalen KatalogKatalogs, das eine Webagentur für das Museum programmiert hat und das . Es fragt die ExpoDB im Hintergrund abfragtüber das Internet ab. Oder der Client kann auch ein DAM-System des Museum sein, das über die ExpoDB den eigenen Datenbestand zu den Sammlungsdaten aktualisiert.
Die ExpoDB folgt dabei dem Paradigma sog. RESTful-Webservices: Alle Anfragen werden unabhängig voneinander behandelt. D.h. die ExpoDB "merkt sich" zwischen zwei Anfragen nicht, wer da angefragt hatte und was der oder die vorher wollte bzw. bekommen hat. Alle Die ExpoDB "erinnert" sich nicht, alle Informationen, die erforderlich sind, um eine Anfrage auszuführen, müssen also in der URL codiert sein. Sprich es ist nicht möglich z.B. zunächst den Treffer 1 bis 10 mit "Künstler ist Dürer" anzufordern und danach die Treffer 11 bis 20 "vom Gleichen". Denn die ExpoDB hat sich "nicht gemerkt", dass kurz vorher von der gleichen Stelle nach Dürer gefragt wurde. Man muss also für die zweite Anfrage wieder angeben "Künstler ist Dürer" und nun Treffer 11 bis 20. In jeder URL müssen alle Informationen erneut enthalten sein. Dies hat den Vorteil, dass die URLs "bookmarkable" sind. D.h. man kann sie sich im Browser "bookmarken" oder auch per E-Mail verschicken: Bei einem späteren Aufruf erhält die ExpoDB alle erforderlichen Informationen erneut. (Ausnahme: Login-Daten, die ggf. auch in der Anfrage codiert sind, gelten im allgemeinen später oder woanderst nicht mehr!)
Zur Bildung dieser Urls werden nun jedem Museum eine Reihe von "Endpunkten" zu "seiner" ExpoDB mitgeteilt: Z.B. https://expo.bsz-bw.de/mus/digitaler-katalog, https://expo.bsz-bw.de/mus/cumulus, https://expo.bsz-bw.de/mus/lido etc. (Alle Endpunkte gibt es auch in der Testversion unter https://expotest.bsz-bw.de...) Wie bereits an anderer Stelle beschrieben, können die einzelnen Endpunkte jeweils mit der Einschränkung auf einen Teilbestand des Museums, einem bestimmten Vorgabe-Format sowie einer Zugriffsbeschränkung verbunden sein. Also https://expo.bsz-bw.de/mus/digitaler-katalog könnte z.B. auf den für die Onlinesammlung vorgesehenen publizierten Teilbestand eingeschränkt sein, das . Das Format vorsehen, das mit der Webagentur dafür abgestimmt ist, und wird als Defaultformat vorgesehen. Es wird keine Zugriffsbeschränkung konfiguriert. Dagegen gibt es bei unterliegt https://expo.bsz-bw.de/mus/cumulus keine Zugriffsbeschränkung der Gesamtbestand der Museums (es kann ja zu allem Bilder geben, die Cumulus verwaltet), das Format ist für das DAM konfiguriert und der Zugriff ist auf die IP des Servers des DAM-Systems beschränkt. An die Endpunkte werden die weiteren Anfrageparameter nach einem Fragezeichen ("?") angehängt und mit Kaufmannsund ("&") getrennt.
Die einfachste Abfrage spezifiziert einfach die imdas-id des gewünschten Datensatzes https://expo.bsz-bw.de/mus/digitaler-katalog?id=4659987A4A23489A88CA13322559FD72. Solche Abfragen werden offensichtlich nicht direkt per Hand eingegeben sondern z.B. in Trefferlisten dafür genutzt, um zur Detailansicht des Einzeltreffers zu gelangen. Da die imdas-Id für die Daten in der ExpoDB (und hoffentlich auch bei allen Nachnutzungen der Daten ) als der persistente Idenfifier Identifier für die Datensätze fungiert, sind die URLs dieser Form auch besonders geeignet, um die Detailansicht eines Datensatzes im Browser zu bookmarken oder per E-Mail zu verschicken (sofern der Datensatz ohne Zugriffsbeschränkung erreichbar ist).
Suche in der ExpoDB
Nach was kann man in der ExpoDb überhaupt suchen? Typischerweise sind dies sog. „Museumsobjekte“. Je nach Bedarf können in der ExpoDB jedoch auch andere Entitäten indexiert sein, so dass auch nach Personen, Thesaurus-Einträgen, Ausstellungen etc. mit spezifischen Indexen gesucht werden kann. Mit dem Parameter „typ“ typ gibt man an, auf welchen Entitätstyp eine Abfrage eingeschränkt werden soll. Wird der Parameter weggelassen wird der Defaultwert „museumsobjekt“ angenommen.
Komplizierter als die Abfrage nach einem durch seine imdas-id identifizierten Datensatz ist die Abfrage einer Selektion von Datensätzen. Im einfachsten Fall muss dazu ein einzelner Suchstring mit einem Index verglichen werden. In einem anderen Beitrag wurde dargestellt, dass man die Indexe dazu spezifisch anlegen kann und es auch z.B. einen Textindex über alle Textinhalte gibt. Es gibt sechs Varianten des Vergleichs eines Suchstrings mit einem Index: "all", "any" sowie "adj" für Texte und "eq", "le", "ge" für Zahlen und Datumsangaben. "all" bedeute dabei, dass alle einzelnen Wörter des Suchstrings für einen Datensatz im Index enthalten sein müssen, um diesen als Treffer zu qualifizieren. "any" bedeutet hingegen, dass irgendeines der Worte im Suchstring zum Datensatz im Index vorhanden sein muss. "adj" ist schließlich die Phrasensuche, das heißt alle Wörter müssen in der angegebenen Abfolge im Index vorhanden sein. Der Suchsting bzw. die in ihm enthaltenen Wörter lassen sich mit "*" links und rechts trunkieren. Die Operatoren "eq", "le" und "ge" bedeuten "gleich", kleiner als" und "größer als" in der üblichen Semantik für Zahlen und Datumsangaben. Beispiele für solche elementaren Abfragen sind also z.B. inventarisierungsnummer adj "III 4ap", material all "gold silber bronze", modified ge "2024-11-25".
Die elementaren Abfragen reichen nicht aus, z.B. um eine erweiterte Suche zu unterstützen. Dazu müssen mehrere solche elementare Abfragen mit "und", "oder" oder "not" verknüpfbar sein, wobei "not" die Semantik "und nicht" besitzt. Die Anfragesprache der ExpoDB lässt es dabei zu, dass beliebig viele elementarer Abrage verknüpft werden können und dabei die Reihenfolge der Auswertung durch Klammern gesteuert wird. Es lassen sich also komplexe Abfragen der Form "(material all "Gold Bronze" and technik any "getrieben geschmiedet") not person adj "Hans Müller" bilden. Elementare oder komplexe Abfragen werden mit dem Parameter "qry" an den Endpunkt angehängt. Sofern weder der Parameter "id" noch der Parameter "qry" in einer Anfrage verwendet ist (die beiden können nicht gleichzeitig verwendet werden), wird keine Selektion auf dem für den Endpunkt definierten Teilbestand vorgenommen - das heißt die erste Trefferseite von allen Datensätzen wird ausgegeben.. Eine Url könnte nun also z.B. wie folgt aussehen: https://expo.bsz-bw.de/mus/digitaler-katalog?qry=((material all ("Gold Bronze" and technik any "getrieben geschmiedet") not person adj "Hans Müller".
Mit Hilfe der Parameter srt und ord lassen sich Sortierung bzw. Sortierrichtung der Treffer festlegen. Für die Sortierung lässt sich der Name eines der bei der Indexierung festgelegten Sortierindexe angeben. Sofern dieser Parameter nicht angegeben wird, wird eine Default-Sortierung verwendet. Für den Parameter ord sind die Werte „asc“ sowie „desc“ für aufsteigend bzw. absteigend möglich. Defaultwert ist hier „desc“, also absteigend.
Eine Trefferseite aus der Gesamtheit der Treffer eine Abfrage lässt sich mit den Parameter fst und len ausschneiden. Der erste anzugebende Treffer wird mit dem Parameter fst angegeben, wobei der erste Treffer und der Defaultwert mit 0 angegeben wird. Die Länge der Trefferseite wird mit len festgelegt. Hier ist der ein konfigurierter Defaultwert für die Installation festgelegt oder 10 (falls diese Konfiguration fehlt). Sofern weniger Treffern nach dem durch fst festgelegten ersten Treffer der Trefferseite vorhanden sind, werden einfach weniger Datensätze ausgegeben.
Format und Mimetype
Nachdem mit der Suchanfrage spezifiziert wurde, Nach der Spezifikation welche und wieviel Treffer in welcher Reihenfolge zurückgegeben werden sollen, ist relevantvon Interesse, in welchem Format die Treffer aufbereitet werden sollen. Ein Format legt fest, welche Inhalte zu einem Datensatz ausgegeben werden sollen und wie diese im Resultat strukturiert werden. Die Formate sind als XSLT-Stylesheets implementiert und können umfangreiche Datenverarbeitungen auf den in der ExpoDB vorgehaltenen Daten vornehmen. Von der simplen Übernahme der Daten, wie sie aus imdas pro importiert wurden bis zu ambitionierten LIDO-Formaten ist dabei alles möglich. Welche verschiedenen Formate für ein Museum erstellt werden, hängt dabei von der Unterschiedlichkeit der beabsichtigten Anwendungen ab, die das Museum mit den Daten betreiben möchte. Hier ist es meist einfacher mehrere Varianten einzurichten, z.B: . auch verschiedene "Flavours" von LIDO für unterschiedliche Abnehmer, als irgendwie einen Kompromis zwischen unterschiedlichen Nutzungen auszuhandeln. Das gewünschte Format wird der Abfrage mit dem Parameter fmt mitgegeben. Wird dieser nicht angegeben wird das für den Endpunkt konfigurierte Defaultformat angewandt.
Mit dem Format eng verbunden ist der Mimetype. Das Http-Protokoll, über das die Daten der ExpoDB zwischen Server und Client, transportiert werden, enthält mit einem Mimetyp-Attibute eine Angabe, welches Datenformate der Client in welcher Priorität erwartet. Genauso teilt der Server in seiner Antwort mit, in welchem Datenformat diese Antwort ausgeliefert wridewurde. Für die Daten der ExpoDB sind vorallmen vorallem die Mimetypes application/json, application/xml bzw. text/xml sowie text/html relevant. Sobald ein Excel-Export implementiert ist, bekommt dieser den Mimetype application/vnd.ms-excel, CSV erhält text/csv, PDF erhält appliication/pdf u.s.w. Der Sinn ist, dass die beide Partner dieser Kommunikation leicht feststellen können, was sie der andere von ihnen erwartet bzw. ihnen liefert. Der Mimetype wird in der Regel (und auch in der ExpoDB) im sog. Http-Header transportiert. Benutzt man die ExpoDB direkt in einem Browser, so ist es nicht ganz einfach einen gewünschten Mimetype im Header einzustellen, so dass "automatisch" die Defaultpriorität des Browsers zum Tragen kommt: text/html, dann application/xml u.s.w.. Daher sieht die ExpoDB zusätzlich den Parameter Parameter mim vor, der die Einstellung des Mimetypes bei der Abfrage vereinfacht und die Einstellung des Http-Headers überschreibt . Er kann mit mim=xml, mim=json sowie mim=html belegt werden.
Nicht jedes Format kann in jedem Mimetype ausgeliefert werden. Z.B. ist LIDO ein Xml-Format, für das es keine kanonische Umsetzung in JSON oder HTML gibt. Daher ist in jedem Format für die ExpoDB vermerkt, in welchen Mimetypes dieses Format überhaupt ausgeliefert werden kann. Ind LIDO steht dann also: nur application/xml. Diese Angabe steuert dann die Ausgabe und priorisiert der dabei ggf. eine explizite Mimetype-Anforderung in der Anfrage, falls diese nicht möglich ist. Sofern ein Format auch als JSON ausgeliefert werden kann, kann es auch als XML ausgeliefert werden und in der Regel auch als HTML. Sofern das Format die Ausgabe von JSON ermöglicht und Wenn die Anfrage keine Angabe zum gewünschten Mimetype macht, wird text/html als Vorgabewert angenommenwerden dann mittlerweile die Ergebnisse als HTML ausgeliefert bzw. konkret im sog. Viewer. Denn prinzipiell kann jedes JSON im Expo-Viewer angezeigt werden und dieser soll in erster Linie aufgerufen werden, sofen es wird angenommen, das eine Nutzer*in am Browser sitzt und nicht explizit einen anderen Mimetype anfordertmit dem Viewer besser zurecht kommt, als mit einem XML oder JSON-Format. Für Frontends, z.B: für Digitale Kataloge, ist hingegen kein Aufwand den benötigten Mimetype json oder xml den Anfragen jeweils explizit mitzugeben. Das ist noch nciht alles. Der Artikel wird fortgesetzt: Facetten, Filter, Download ... und Praktisches.....
Facetten und Filter
Das sog. "Drill-Down" ermöglicht es Suchergebnisse weiter zu verfeinern. Dazu wird in den Resultaten das Vorkommen von Begriffen zu bestimmten Kriterien (Material, Technik, Personen, etc. ) ermittelt und als Liste ausgegeben. In dieser Liste (oder "Facette") kann man dann einzelne der vorkommenden Worte auswählen, die Trefferliste nach diesen Begriffen filtern und das Sucherergebnis damit präzisieren. Natürlich werden die Filterbegriffe der Facette nicht erst bei der Suche ausgezählt, sondern es werden vorab entsprechende Indexe vorbereitet, die bei der Suche nur noch auf die Resultate eingeschränkt werden. Insofern werden die möglichen Facetten einer ExpoDB-Schnittstelle bereits bei der Indexierung festgelegt. welche dann bei einer Suche mit ausgegeben werden, legt der Parameter fct fest. Die Facetten können nach Häufigkeit des Vorkommens der Begriffe oder nach deren alphabetischen Ordnung sortiert sein. Dies legt der Parameter fcs fest, der die Werte "cnt" (für Häufigkeit) bzw. "dx" (für alphabetische Ordnung) annehmen kann. Da bei großen Treffermengen auch die Facetten lang werden können, oft aber nur die häufigsten Begriffe interessieren, kann man mit dem Parameter lmt die Anzahl der ausgegebenen Begriff z.B. auf 10 Begriffe beschränken. Der Wert "-1" steht dann für alle Begriffe der Facette. Allerdings hat sich gezeigt, dass es auch nötig ist, diese Anzahlen pro Facette zu steuern. Daher erlaubt es die Schnittstelle auch, die Anzahl der Begriffe pro Facette zu steuern, indem die gewünschte Anzahl im Parameter fct mit Doppelpunkt abgetrennt dem Facettennamen angehängt wird. Die Parametrieisierung für fünf Begriffe zum Material und allen vorhandenen zur Technik sähe demnach z.B. so aus: fct=material:5;technik:-1.
Das Filtern nach Facettenbegiffen wird über den flt Parameter festgelegt. Dazu wird eine mit Semikolon getrennte List der Filter angegeben, wobei jeder Filter aus dem Facetten-Namen und, getrennt mit Doppelpunkt, dem Filterbegriff besteht. Dabei können auch mehrere Filter zum gleichen Facettennamen angegeben werden. Das Filtern nach Datensätze mit Materialangabe Gold und Materialangabe Silber sähe dann wie folgt aus flt=material:Gold;material:Silber. (Ein Filtern nach Gold oder Silber ist nicht vorgesehen). Die Semantik ist dann so, dass das gefilterte Ergebniss in der genannten Facette den Filterbegriff enthalten muss. Im Unterschied zur Suche in der ExpoDB, bei der die Suchbegriffe linguistisch "normalisiert" werden und "Relevanz" für das Ergebnis ausgewertet werden kann, ist das Filtern in Facetten eine binäre Angelegenheit: Entweder der Filterbegriff ist exakt so im Facetten-Index enthalten, dann gehört der Datensatz zur Treffermenge. Oder der Begriff ist nicht enthalten, dann wird der Datensatz ausgefiltert. Suche und Filtern sind insofern leicht unterschiedliche Konzepte, die jeweils in unterschiedlichen Situationen passen.
Downloads und Schluss
Für manche Formate ist der Download aus dem Browser sinnvoller als die Anzeige am Bildschirm. Zum Beispiel sind 5.000 Datensätze LIDO sicher auch am Bildschirm möglich. Für die Weiterverarbeitung oder Lieferung an ein Kulturportal wird man allerdings eher den Download als Datei vorziehen. Mittels des Parameter dld kann mann auslösen, dass der Browser statt der Anzeige den Datei-Speichern-Dialog anzeigt und dabei den Dateinamen als Vorgabe anbietet, den man mit dem Parameter dld übergen hat. dld=lido_241203.xml führt also zum Download der Treffer in die Datei lido_241203.xml.
Soweit die ExpoDB-Schnittstelle und ihre Möglichkeit Daten abzufragen. Dieser Teil der Software ist seit langem im wessentlichen stabil. Die jüngste Änderung betrifft das Format von Zahlen: Für spezielle Indexe zu Goekoordinaten war es nötig, als Suchbegriffe auch Dezimalzahlen zuzulassen. Bislang, wo Suchkriterien den Vergleich mit Jahreszahlen vorsachen, hatten Ganzzahlen genügt. Neue Anforderungen betreffen in der Regel vor allem die Indexierung, wo neue Felder und Funktionalitäten zu realisieren sind. Z.B. die soeben genannten Indexe zu Geookordinaten. Aber die Indexierung ist ein anderes Thema. Ebenfalls ein anderes Thema sind weitere Schnittstellen zu Bildern, Vorschlagslisten ("suggest") sowie schreibende Schnittstellen auf die ExpoDB. Alle diese Aspekte müssen in anderen Beiträgen behandelt werden.
Es ist klar, dass die Schnittstelle nicht wirklich ganz einfach ist - wobei viele Parameter mit sinnvollen Defaultwerten belegt sind, so dass man sie meist auch weglassen kann. Es gibt auch sinnvolle Ergebnisse, wenn man alle Parameter weglässt. Sofern man allerding spezifische Resultate in passenden Formaten benötigt, muss man sich wohl oder übel mit der Parametrisierung befassen. Bislang haben wir keinen einfacheren Weg entdeckt, die vorhandenen komplexen Inforationsbedürfnisse an die Schnittstelle zu kommunizieren. Damit sich Agenturen leichter mit der URL-Syntax und ihren Möglichkeiten vertraut machen können, gibt es den Viewer zur ExpoDB. Dort kann man einfache und erweiterte Suchanfragen sowie Filter etc. über Formulareingaben formulieren, die Ergebnisse kontrollieren und die entsprechende JSON-URL ablesen. Wir hoffen, dass dies für die Implementierung der Anfrage in den Frontends der Digitalen Kataloge nützlich ist.