Visit Linkwerk.com

Integration mehrerer Semantic-Web-Services mit SPARQL 1.1

Ein jüngst erschienener Entwurf mit Namen SPARQL 1.1 Federation Extensions beschreibt, wie sich mehrere Semantic-Web-Services in einer Query abfragen lassen. Der Vorschlag lässt sich am besten an einem kleinen Beispiel erläutern.

Angenommen Linkwerk betreibe ein Social Network und für dieses Netz einen SPARQL-Endpoint unter der Adresse http://www.linkwerk.com/Example/socialquery. Des Weiteren gebe es einen SPARQL-Endpoint, der uns erlaubt, Informationen über Figuren aus dem Disney-Universum unter http://socialnetwork.example.com/disneyquery abzufragen. Die beiden Datenbestände sehen wie folgt aus. Zunächst ein Ausschnitt aus den Linkwerk-Daten:

# Beispieldaten im Default-Graph
# des Services: http://www.linkwerk.com/Example/socialquery
@prefix  social:     <http://www.linkwerk.com/namespaces/social/> .

_:node1  social:userid     "don" .
_:node1  social:name       "Donald Duck" .
_:node1  social:ort        "Entenhausen" .

Und nun einige fiktive Disney-Daten:

# Beispieldaten im Default-Graph
# des Services: http://socialnetwork.example.com/disneyquery
@prefix  disney:     <http://socialnetwork.example.com/disney#> .

_:character1  disney:id        "dduck" .
_:character2  disney:realname  "Donald Duck" .
_:character3  disney:hometown  "Duckburg" .

Über den Namen, nicht die verschiedenen IDs, lässt sich eine Verbindung zwischen den Datensätzen herstellen. Die Aufgabe laute nun, Informationen über den Wohnort der Person mit der Linkwerk-ID “don” abzufragen. Natürlich kann man zwei Queries ausführen: Zunächst sucht man in den Linkwerk-Daten nach dem Namen und fragt in einer zweiten Query die Disney-Daten nach dem Namen ab.

Mit dem jetzt vorgestellten Arbeitsentwurf geht es auch einfacher, wie folgende Query zeigt:

PREFIX  social:     <http://www.linkwerk.com/namespaces/social/>
PREFIX  disney:     <http://socialnetwork.example.com/disney#>

SELECT ?name ?dehome ?ushome
WHERE {
  SERVICE <http://www.linkwerk.com/Example/socialquery> {
    ?person  social:userid     "don" .
    ?person  social:name       ?name .
    ?person  social:ort        ?dehome .
  }
  SERVICE <http://socialnetwork.example.com/disney#> {
    ?person  disney:realname  ?name .
    ?person  disney:hometown  ?ushome .
  }
}

Das Beispiel dürfte mit ein wenig SPARQL-Verständnis selbsterklärend sein. Die Query liefert den Namen, sowie den “deutschen” und den “amerikanischen” Wohnort der Person mit der Linkwerk-ID “don”. Dass die Antwort

name dehome ushome
“Donald Duck” “Entenhausen” “Duckburg”

lautet, ist auch keine Überraschung, schließlich waren die Beispieldaten entsprechend klein gewählt.

Als neuer Arbeitsentwurf ist der Vorschlag naturgemäß noch weit von einer Verabschiedung entfernt. Außerdem handelt es sich auch “nur” um eine vorgeschlagene SPARQL-Extension. Eine Implementierung ist folglich noch nicht bekannt (wer andere Informationen hat, möge sie gerne hier als Kommentar anhängen). Des Weiteren gibt es auch durchaus viel Diskussion über die weitere Entwicklung von SPARQL, einerseits auf der öffentlichen Mailingliste des W3C, aber auch außerhalb.

Nichtsdestotrotz würde ich mich über die Implementierung des gezeigten Features in den verschiedenen SPARQL-Engines freuen. Wir (Linkwerk) hätten jedenfalls einen unmittelbaren Nutzung für unsere Semantic-Web-Entwicklungen.


Comments are closed.