Navigation auf uzh.ch

Swiss Art Research Infrastructure (SARI)

Verwendung von Geodatenunterstützung in Blazegraph-Instanzen

Fig.1: Screenshot of Bilder der Schweiz Online Research Platform where we can search for  images that are geographically close to where the drawing of Hotel Bellevue was taken.

Abb. 1: Screenshot der Online-Rechercheplattform Bilder der Schweiz, auf der wir nach Bildern suchen können, die geografisch in der Nähe des Aufnahmeorts der Zeichnung des Hotels Bellevue liegen.

Blazegraph ist eine leistungsstarke Graphdatenbank, die mit RDF und SPARQL kompatibel ist. Bei SARI verwenden wir Blazegraph, um Daten für alle unsere Projekte zu speichern. Eine wichtige Funktion, die wir in unsere Instanzen von Blazegraph integriert haben, ist die Unterstützung von Geodaten. Die Aktivierung dieser Funktion fügt zwei Präfixe hinzu, die verwendet werden können:

PREFIX geoliteral: <http://www.bigdata.com/rdf/geospatial/literals/v1#>
PREFIX geo: <http://www.bigdata.com/rdf/geospatial#>

In Blazegraph können Geodaten durch einen von zwei Datentypen dargestellt werden:

  • geoliteral:lat-long: Ein Datentyp, der den Längengrad und den Breitengrad im Format [lat]#[long] speichert, wobei [lat] der Breitengrad (Typ double) und [long] der Längengrad (Typ double) ist.
  • geoliteral:lat-lon-time: Ein Datentyp, der Koordinaten im Format [lat]#[long]#[time] enthält, wobei [lat] der Breitengrad (Typ double), [long] der Längengrad (Typ double) und [time] die Zeit im Unix Format (Typ long) ist. Dieser Datentyp wird in der Regel verwendet, um Ereignisse zu modellieren.

Die Unterstützung von Geodaten ermöglicht raumbezogene SPARQL-Abfragen. Solche Abfragen eignen sich insbesondere für die Ermittlung von Orten, die sich innerhalb eines bestimmten Umkreises befinden. Dies lässt sich wie folgt umsetzen:

SELECT * WHERE {
  #Start der Abfrage
  SERVICE geo:search {
    ?nearbyplace geo:search [shape] .
    ?nearbyplace geo:predicate [pred] .
    ?nearbyplace geo:searchDatatype [type] .
    ?nearbyplace geo:spatialCircleCenter [center] . # erforderlich wenn [shape] "inCircle" ist
    ?nearbyplace geo:spatialCircleRadius [radius] . # erforderlich wenn [shape] "inCircle" ist, Standardeinheit: Kilometer
    ?nearbyplace geo:spatialRectangleSouthWest [sw] . # erforderlich wenn [shape] "inRectangle" ist
    ?nearbyplace geo:spatialRectangleNorthEast [ne] . # erforderlich wenn [shape] "inRectangle" ist
    ?nearbyplace geo:timeStart [time_start] . # erforderlich wenn [type] geoliteral:lat-lon-time ist
    ?nearbyplace geo:timeEnd [time_end] . # erforderlich wenn [type] geoliteral:lat-lon-time ist
  }
  #Rest der Abfrage
}

so dass:

  • [shape] entweder "inCircle" oder "inRectangle" ist – abhängig davon, ob der Bereich der Karte eine rechteckige oder kreisförmige Form umfassen soll.
  • [pred] ist das Prädikat, das den Einheiten, die die geografischen Koordinaten enthalten, vorangestellt wird.
  • [type] ist die Entität, die die geografischen Koordinaten darstellt (wenn einer der beiden Standardtypen verwendet wird, sollte er entweder auf geoliteral:lat-lon oder geoliteral:lat-lon-time gesetzt werden)
  • [center] sind die Koordinaten des Mittelpunkts des Kreises oder Rechtecks, welche für die Suche verwendet werden. Das Format muss [lat]#[long] sein, wobei [lat] der Breitengrad (Typ double) und [long] der Längengrad (Typ double) ist. Diese Zeile ist nur erforderlich, wenn [shape] auf "inCircle" eingestellt ist.
  • [radius] ist der Radius der Suche in Kilometern. Diese Zeile ist nur erforderlich, wenn [shape] auf "inCircle" eingestellt ist.
  • [sw] sind die Koordinaten des südwestlichen Teils des rechteckigen Suchgebiets. Diese Zeile ist nur erforderlich, wenn [shape] auf "inRectangle" eingestellt ist.
  • [ne] sind die Koordinaten des nordöstlichen Teils des rechteckigen Suchgebiets. Diese Zeile ist nur erforderlich, wenn [shape] auf "inRectangle" eingestellt ist.
  • [time_start] ist der Beginn der Suche der Zeitspanne (Typ long). Diese Zeile ist nur dann erforderlich, wenn [type] auf "geoliteral:lat-lon-time" eingestellt ist.
  • [time_end] ist das Ende der Suche der Zeitspanne (Typ long). Diese Zeile ist nur erforderlich, wenn [type] auf geoliteral:lat-lon-time eingestellt ist.

Im Rahmen des BSO-Projekts kann solch eine Abfrage genutzt werden, um beispielsweise weitere Bilder zu finden, die in der Nähe eines bestimmten Bildes aufgenommen wurden:

SELECT ?nearbyimg WHERE {
  #Start der Abfrage
<https://resource.swissartresearch.net/artwork/zbz-990113960470205508> crm:P128_carries ?work .
  ?work crm:P138_represents ?place .
  ?place crm:P168_place_is_defined_by ?coords .
  FILTER ( datatype(?coords) = geoliteral:lat-lon) .
  SERVICE geo:search {
    ?nearbyplace geo:search "inCircle" . # Umkreissuche
    ?nearbyplace geo:predicate crm:P168_place_is_defined_by . # die Koordinateneinheiten haben das Prädikat P168_place_is_defined_by
    ?nearbyplace geo:searchDatatype geoliteral:lat-lon . # der verwendete Typ ist geoliteral:lat-lon
    ?nearbyplace geo:spatialCircleCenter  ?coords . # wir setzen den Mittelpunkt des Suchbereichs auf die Koordinaten des Bildes zbz-990113960470205508
    ?nearbyplace geo:spatialCircleRadius "50" . # Radius in km
  }
  ?nearbyimg crm:P128_carries ?nearbywork .
  ?nearbywork crm:P138_represents ?nearbyplace .
} LIMIT 100

Mit dieser Funktion können wir geografische Daten nutzen, um neue Möglichkeiten für die Suche nach Bildern und Objekten im BSO-Forschungsportal einzuführen und somit das Sucherlebnis insgesamt zu verbessern. So werden auf der Seite mit dem gesuchten Bild weitere Bilder angezeigt, die sich in geografischer Nähe zum Suchergebnis befinden. Darüber hinaus könnten zukünftig weitere Funktionen hinzukommen, z. B. die Anzeige von Künstlern/Künstlerinnen, die in einem bestimmten Zeitraum in geografischer Nähe zu anderen Künstlern/Künstlerinnen gearbeitet haben.


Autor: Andre Ghattas