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

SPARQL查询从印度获取航空公司名称?,sparql,dbpedia,Sparql,Dbpedia,我正在努力获取印度所有航空公司的名称。我的查询如下所示,但它在应该返回结果时没有返回任何结果。我做错了什么 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 .

我正在努力获取印度所有航空公司的
名称。我的查询如下所示,但它在应该返回结果时没有返回任何结果。我做错了什么

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

}
前缀dct:
前缀道具:
选择?航空公司?所在国家/地区{
名字?航空公司。
姓名?国家
}
你说的“应该”是什么意思?你是如何得出这个假设的?你有没有看过航空公司的报告,它提供了所有现有的事实?这只是一个特定的资源,而不是一个类

您查询的内容是: *第一个三重模式返回“资源航空公司的所有名称” *第二个三重模式返回“印度资源的所有名称” *由于这两个三重模式未通过变量连接,因此它将返回两个结果集的叉积

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

?s rdf:type:C

在您的例子中,Dbpedia中有一个针对航空公司的类,但是它的URI是,因此,三重模式是

?s rdf:type.
,获取“所有航空公司”的查询将是

前缀dbo:
选择?航空公司在哪里{
这是一家航空公司。
}
下一步是在DBpedia中找到一些与航空公司和国家相关的属性。这并不是那么简单,但是您可以通过执行

前缀dbo:
选择distinct?p,其中{
这是一家航空公司。
?s?p?o。
}
点菜人
您还可以检查与印度航空公司有关的所有财产:

前缀dbo:
选择p(将(不同的)计数为cnt),其中{
这是一家航空公司。
标准普尔dbr:印度。
}
按描述排序(?cnt)
返回

+-------------------------------------------+-----+
|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:headerquarters
似乎是一个“好”候选酒店:

前缀dbo:
选择?在哪里{
这是一家航空公司。
?s dbo:总部dbr:印度。
}
但不幸的是,DBpedia中并非所有资源都包含所有信息,因为它仅从Wikipedia中提取:

前缀dbo:
选择p(将(不同的)计数为cnt),其中{
这是一家航空公司。
?s?p?o。
}
B组?p
点菜人
这意味着,我们的查询结果可能不完整,如果您知道其他航空公司应该在结果集中,那么您必须分析资源的数据以发现进一步的关系,可能通过一些中间跳

另一种选择是经常使用Wikipedia类别,尽管这些数据可能包含不需要的实体:

前缀dbc:
选择?s,其中{
?s dct:主题dbc:印度航空公司
}