6 Stimmen

Semantische Endpunkte in SPARQL-Abfrage verbinden

Ich versuche, eine Anfrage zu stellen, die sowohl bibleontology als auch dbpedia semantische Datenbanken verwendet:

PREFIX bibleontology: <http://bibleontology.com/resource/>
PREFIX dbo: <http://dbpedia.org/ontology/>

SELECT ?art ?abstract WHERE { 
bibleontology:Ezra owl:sameAs ?art .
?art dbo:abstract ?abstract .
}

Diese Art von Anfrage funktioniert weder mit dem bibleontology SPARQL-Endpunkt noch mit dem dbpedia SPARQL-Endpunkt. Einzelne Teile der Anfragen funktionieren auf den jeweiligen SPARQL-Endpunkten problemlos.

Ist es möglich, Datenbanken auf diese Weise zu verbinden?

12voto

wonseok oh Punkte 121

Ich bin Ingenieur für bibleontology.com

bibleontology.com übernimmt SPARQL1.1

PREFIX bibleontology: <http://bibleontology.com/resource/>
PREFIX dbo: <http://dbpedia.org/ontology/>
PREFIX owl: <http://www.w3.org/2002/07/owl#>
SELECT ?art ?abstract
WHERE {
SERVICE <http://bibleontology.com/sparql/> { bibleontology:Ezra owl:sameAs ?art . }
SERVICE <http://dbpedia.org/sparql> { ?art dbo:abstract ?abstract . } }

7voto

Manuel Salvadores Punkte 16044

Diese Abfrage funktioniert weder bei dbpedia noch bei bibleontology, weil die Informationen in zwei verschiedenen Datenbanken gespeichert sind und man bei einer SPARQL-Abfrage entweder die eine oder die andere trifft. Das bedeutet, dass Sie die Daten aus beiden Datenbanken herunterladen müssen, um sie in einem lokalen Triple Store zu speichern, um eine SPARQL-Abfrage wie die von Ihnen gezeigte ausführen zu können. Eine andere Möglichkeit ist, eine Bibliothek zu verwenden, die das für Sie erledigt.

Die Semantic Web Client-Bibliothek folgt allen URIs, die Sie in Ihrer SPARQL-Abfrage angegeben haben, und lädt die RDF-Daten von jeder Ressource herunter, so dass es alle Tripelmuster, die in Ihrer Abfrage auftauchen, verbinden und die Antworten geben kann.

Sie können Ihre Abfrage mit einigen geringfügigen Änderungen durchführen:

PREFIX bibleontology: <http://bibleontology.com/resource/>
PREFIX dbo: <http://dbpedia.org/ontology/>
PREFIX owl: <http://www.w3.org/2002/07/owl#>
PREFIX dbpedia: <http://dbpedia.org/ontology/> 

SELECT * WHERE { 
bibleontology:Ezra owl:sameAs ?art .
?art dbpedia:abstract ?abstract .
FILTER langMatches( lang(?abstract), "EN" )
} 

Erläuterung der Änderungen:

  1. Eingeschlossen owl y dbpedia Namensräume
  2. ?art dbpedia:abstract ?abstract . müssen Sie mit dem dbpedia:abstract Prädikat, um die Zusammenfassung zu erhalten, anstatt bibleontology:abstract um die Zusammenfassung von dbpedia
  3. Ich habe auch eine filter um nur englischsprachige Zusammenfassungen abzurufen, ist dies natürlich optional.

Sobald Sie "The Semantic Web Library" heruntergeladen und Ihre Abfrage in eine Datei (z.B.: query.sparql) geschrieben haben, können Sie den folgenden Befehl ausführen, um Ihre Abfrage zu testen:

./semwebquery -sparqlfile query.sparql -retrieveduris -maxsteps 5

Alle Befehlsparameter werden in der Dokumentation der Semantic Web Client Library erläutert.

Sie würden die folgende Ausgabe erhalten:

| ?art                               | ?abstract
| <http://dbpedia.org/resource/Ezra> | "Ezra is a major .... "@en |

Successfully dereferenced URIs: 

http://www.w3.org/2002/07/owl
http://bibleontology.com/data/Ezra
http://dbpedia.org/data/Ezra.xml
http://dbpedia.org/data3/abstract.n3

Der Einfachheit halber habe ich die lange Zusammenfassung aus dbpedia weggelassen. Die Liste der "Successfully dereferenced URIs" (erfolgreich dereferenzierte URIs) sind Dokumente, die von der Bibliothek abgerufen wurden, um Ihre Anfrage zu beantworten. In der Dokumentation der Bibliothek erfahren Sie, wie Sie Abfragen programmatisch in Java ausführen können.

6voto

RobV Punkte 26847

Alle anderen Antworten sind richtig, wenn sie sagen, dass Sie die Abfrage so nicht machen können, weil die Daten nicht in einem einzigen SPARQL-Endpunkt kombiniert sind. Wenn einer der Endpunkte SPARQL 1.1 Federated Querying unterstützt, dann können Sie vielleicht die SERVICE Schlüsselwort wie folgt:

PREFIX bibleontology: <http://bibleontology.com/resource/>
PREFIX dbo: <http://dbpedia.org/ontology/>
PREFIX owl: <http://www.w3.org/2002/07/owl#>

SELECT ?art ?abstract
WHERE 
{ 
  bibleontology:Ezra owl:sameAs ?art .
  SERVICE <http://dbpedia.org/sparql?default-graph-uri=http://dbpedia.org> { ?art dbo:abstract ?abstract . }
}

Sie übermitteln die obige Anfrage an den SPARQL-Endpunkt von bibleontology und vorausgesetzt, dieser unterstützt die SERVICE Schlüsselwort sendet es einen Teil Ihrer Anfrage an den DBPedia SPARQL Endpunkt.

Selbst wenn Ihr SPARQL-Endpunkt die SERVICE Schlüsselwort, dann sind Sie immer noch darauf angewiesen, dass die relevanten Daten in den beiden Datensätzen vorhanden sind, d. h. die Bibel-Ontologie muss über eine owl:sameAs die auf eine DBPedia-Ressource verweist, damit die SERVICE Klausel tatsächlich etwas finden.

Alternativ dazu

Wenn keiner Ihrer Endpunkte die Option SERVICE können Sie einen lokalen Endpunkt einrichten oder ein Befehlszeilentool verwenden, das die SERVICE (ich werde ein paar Links heraussuchen, wenn Sie daran interessiert sind) und dann das Folgende veröffentlichen:

PREFIX bibleontology: <http://bibleontology.com/resource/>
PREFIX dbo: <http://dbpedia.org/ontology/>
PREFIX owl: <http://www.w3.org/2002/07/owl#>

SELECT ?art ?abstract
WHERE 
{ 
  SERVICE <http://bibleontology.com/sparql> { bibleontology:Ezra owl:sameAs ?art . }
  SERVICE <http://dbpedia.org/sparql?default-graph-uri=http://dbpedia.org> { ?art dbo:abstract ?abstract . }
}

Wenn Ihr lokales Werkzeug/Endpunkt Folgendes unterstützt SERVICE dann ist es in der Lage, die relevanten Teile der Abfrage an die entsprechenden Endpunkte zu senden und die Verknüpfung lokal vorzunehmen und hoffentlich die gewünschten Ergebnisse zu liefern

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X