2017-04-30 2 views
0

Ich versuche, die name aller Fluggesellschaften in Indien zu bekommen. Meine Abfrage ist die folgende, aber es gibt keine Ergebnisse zurück, wenn es sollte. Was mache ich falsch?SPARQL-Abfrage, um AIRLINE-Namen von INDIA zu erhalten?

PREFIX dct: <http://purl.org/dc/terms/> 
PREFIX prop: <http://dbpedia.org/property/> 

SELECT ?airline ?country WHERE { 

<http://dbpedia.org/resource/Airline> foaf:name ?airline . 
<http://dbpedia.org/resource/India> foaf:name ?country 

} 

Antwort

1

Was meinst du mit "sollte"? Wie kommst du zu dieser Annahme? Haben Sie sich die DBpedia page von Airline angeschaut, die alle vorhandenen Fakten wiedergibt? Dies ist nur eine bestimmte Ressource und keine Klasse.

Sie Abfrage tut, was: * er erste Triple-Muster „alle Namen der Ressource Airline“ kehrt * das zweite dreifache Muster gibt „alle Namen der Ressource India“ * da beide triple Muster nicht verbunden über eine Variable, wäre es das Kreuzprodukt der beiden Ergebnismengen

Wenn Sie möchten, haben alle Ressourcen r_i eines bestimmten Typs :C, was bedeutet, dass eine dreifache aussehen würde wie :r rdf:type :C zurückkehren, haben Sie die entsprechenden dreifache Muster verwenden :

?s rdf:type :C

In Ihrem Fall ist es eine Klasse in DBpedia für Airlines, aber seine URI ist http://dbpedia.org/ontology/Airline, so würde das dreifache Muster

?s rdf:type <http://dbpedia.org/ontology/Airline> . sein und die Abfrage „alle Fluggesellschaften“ zu bekommen wäre

PREFIX dbo: <http://dbpedia.org/ontology/> 

SELECT ?airline WHERE { 
?s a dbo:Airline . 
} 

Der nächste Schritt wäre, eine Eigenschaft in DBpedia zu finden, die eine Airline zu einem Land zusammen. Und das ist nicht so einfach, aber man kann mit der Liste der möglichen Eigenschaften beginnen, indem

PREFIX dbo: <http://dbpedia.org/ontology/> 

SELECT distinct ?p WHERE { 
?s a dbo:Airline . 
?s ?p ?o . 
} 
ORDER BY ?p 

Ausführung Sie auch für alle Eigenschaften überprüfen könnten, die irgendwie Fluggesellschaften in Bezug auf Indien:

PREFIX dbo: <http://dbpedia.org/ontology/> 

SELECT ?p (count(distinct ?s) as ?cnt) WHERE { 
?s a dbo:Airline . 
?s ?p dbr:India . 
} 
order by desc(?cnt) 

die zurück

+-------------------------------------------+-----+ 
|      p      | cnt | 
+-------------------------------------------+-----+ 
| http://dbpedia.org/ontology/headquarter | 27 | 
| http://dbpedia.org/property/headquarters | 16 | 
| http://dbpedia.org/ontology/destination | 1 | 
| http://dbpedia.org/property/destinations | 1 | 
| http://dbpedia.org/ontology/targetAirport | 1 | 
| http://dbpedia.org/property/bases   | 1 | 
+-------------------------------------------+-----+ 

Also insgesamt die Eigenschaft dbo:headquarter scheint ein „guter“ Kandidat zu sein:

PREFIX dbo: <http://dbpedia.org/ontology/> 

SELECT ?s WHERE { 
?s a dbo:Airline . 
?s dbo:headquarter dbr:India . 
} 

Aber leider nicht alle Ressourcen in DBpedia haben alle Informationen, da sie nur aus Wikipedia extrahiert ist:

PREFIX dbo: <http://dbpedia.org/ontology/> 

SELECT ?p (count(DISTINCT ?s) as ?cnt) WHERE { 
?s a dbo:Airline . 
?s ?p ?o . 
} 
group by ?p 
order by ?p 

, die das Ergebnis unserer Abfrage bedeutet unvollständig sein könnten, und wenn Sie andere Fluggesellschaften wissen, die in sein sollte die Ergebnismenge, dann müssen Sie die Daten der Ressource analysieren, um weitere Beziehungen zu entdecken, vielleicht über einige Zwischenhopfen ...

Eine Alternative ist die Verwendung der Wikipedia-Kategorien, obwohl diese Daten möglicherweise unerwünschte Elemente enthalten:

PREFIX dbc: <http://dbpedia.org/resource/Category:> 

SELECT ?s WHERE {  
?s dct:subject dbc:Airlines_of_India  
} 
+0

wunderbare Erklärung! – wolfgang