2017-04-26 5 views
0

Ich bin ein Anfänger in SPARQL. Und ich habe Probleme, den Breiten- und Längengrad aller Universitäten nach Stadt auf DBpedia zu bekommen.SPARQL erhalten dbpedia Ressourcen nach Kategorie

Ich versuchte mehrere Dinge ohne Erfolg. This Seite zeigt die Universitäten von Paris auf der dbo:campus Eigentum, so dass ich gerne die Liste der Universitäten mit dieser Eigenschaft zu bekommen und danach erhalten die geografischen Koordinaten.

PREFIX geo: <http://www.w3.org/2003/01/geo/wgs84_pos#> 
PREFIX dbo: <http://dbpedia.org/ontology/> 
SELECT ?name, ?univ, ?lat, ?long WHERE { 
    ?p rdf:type dbo:Place. 
    ?p rdfs:label ?name. 
    ?p dbo:campus ?u. 
    ?u geo:lat ?lat. 
    ?u geo:long ?long. 
    ?u rdfs:label ?univ 
    FILTER(LANG(?name) = "en"). 
    FILTER(?name = "Paris") 
} 

prüfe ich diesen Beitrag DBpedia SPARQL Query US Universities aber mit einem anderen Land nicht funktioniert.

+0

Wir sind hier nicht Ihre Hausaufgaben zu machen! – TallTed

+0

Vielen Dank @TallTed für Ihren Kommentar, das hilft wirklich! – winter

Antwort

1
  1. Wenn Sie lesen auf einer gerenderten DBpedia Seite „SOME_PROPERTY von ist“, dies bedeutet, die umgekehrte Richtung, das heißt, es zeigt die dreifache in seiner invertierten Form. Daher müssen Sie das Dreifachmuster in der SPARQL-Abfrage invertieren. Für Ihr Beispiel bedeutet es, dass die Universitäten das Thema und Paris sind Gegenstand:

    ?u dbo:campus ?p

  2. Die Etiketten sind Sprache in DBpedia markiert; Daher ist FILTER(?name = "Paris") nicht genug. Das Hinzufügen der englischen Sprache Tag hilft:

    FILTER(?name = "Paris"@en)

Eine Arbeits Abfrage

wäre
PREFIX geo: <http://www.w3.org/2003/01/geo/wgs84_pos#> 
PREFIX dbo: <http://dbpedia.org/ontology/> 
SELECT ?name, ?univ WHERE { 
    ?p rdf:type dbo:Place. 
    ?p rdfs:label ?name. 
    ?u dbo:campus ?p. 
    ?u geo:lat ?lat. 
    ?u geo:long ?long. 
    ?u rdfs:label ?univ 
    FILTER(LANG(?name) = "en"). 
    FILTER(?name = "Paris"@en) 
} 

Einige Kommentare:

  • das Label Mit einer Ressource entsprechen können zu unerwünschten Ergebnissen führen. Ressourcen werden anhand von URIs identifiziert. Verwenden Sie daher möglichst den URI. Die Klausel VALUES ist eine nützliche Funktion von SPARQL 1.1 zur Unterstützung von Inline-Daten. Wenn Sie den URI verwenden, können Sie das rdf:type Dreifachmuster weglassen, da Sie nicht nach Ressourcen eines bestimmten Typs filtern müssen, der dieses Label enthält.
  • Der offizielle SPARQL-Standard lässt keine Kommas zwischen den Projektionsvariablen zu; Dies ist eine Virtuoso-spezifische Syntax.
  • SPARQL unterstützt die kompaktere Turtle-Syntax.
  • Eine FILTER benötigt am Ende keine ..
  • Verwenden Sie LANGMATCHES für die Übereinstimmung von Sprachen in Literalen.

A "besser" Abfrage könnte sein:

PREFIX geo: <http://www.w3.org/2003/01/geo/wgs84_pos#> 
PREFIX dbo: <http://dbpedia.org/ontology/> 
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> 
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> 
PREFIX dbr: <http://dbpedia.org/resource/> 

SELECT ?name ?univ ?lat ?long 
WHERE 
    { VALUES ?p { dbo:Paris } 
    ?p rdfs:label ?name . 
    ?u dbo:campus ?p ; 
     geo:lat  ?lat ; 
     geo:long ?long ; 
     rdfs:label ?univ 
    FILTER langMatches(lang(?name), "en") 
    } 
Verwandte Themen