SPARQL 查询从印度获取航空公司名称?

SPARQL query to get AIRLINE names from INDIA?

我正在尝试获取印度所有航空公司的 name。我的查询如下,但它应该返回任何结果。我做错了什么?

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

}

"should" 是什么意思?你是怎么得出这个假设的?您是否看过 Airline 的 DBpedia page ,它呈现了所有现有的事实?这只是一个特定的资源,而不是 class。

您的查询是做什么的: * 他第一个三重模式 returns "all names of the resource Airline" * 第二个三重模式 returns "all names of the resource India" * 由于两个三元组模式都未通过变量连接,它会return两个结果集的叉积

如果您想拥有特定类型 :C 的所有资源 r_i ,这意味着三元组看起来像 :r rdf:type :C,您必须使用相应的三元组模式:

?s rdf:type :C

在你的例子中,航空公司的 Dbpedia 中有一个 class,但它的 URI 是 http://dbpedia.org/ontology/Airline ,因此,三元组模式将是

?s rdf:type <http://dbpedia.org/ontology/Airline> . 而获取 "all airlines" 的查询将是

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

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

下一步是在 DBpedia 中找到一些 属性 与航空公司和国家相​​关的内容。这并不是那么简单,但是您可以通过执行

从可能的属性列表开始
PREFIX dbo: <http://dbpedia.org/ontology/>

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

您还可以检查以某种方式将航空公司与印度相关的所有属性:

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)

其中return

+-------------------------------------------+-----+
|                     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 |
+-------------------------------------------+-----+

总的来说,属性 dbo:headquarter 似乎是 "good" 候选人:

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

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

但不幸的是,并非 DBpedia 中的所有资源都包含所有信息,因为它仅从维基百科中提取:

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

这意味着,我们的查询结果可能不完整,如果您知道应该在结果集中的其他航空公司,那么您必须分析资源的数据以发现进一步的关系,可能通过一些中间跃点。 ..

一种替代方法通常是使用维基百科类别,尽管此数据可能包含不需要的实体:

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

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