我正试图获得印度所有航空公司的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
}
答案 0 :(得分:1)
“你应该”是什么意思?你是如何得出这个假设的?您是否看过航空公司DBpedia page提供的所有现有事实?这只是一个特定的资源,而不是一个类。
你查询做了什么: *他的第一个三重模式返回“资源航空公司的所有名称” *第二个三重模式返回“资源的所有名称印度” *由于两个三重模式都通过变量未连接,它将返回两个结果集的叉积
如果您想拥有特定类型r_i
的所有资源:C
,这意味着三元组看起来像:r rdf:type :C
,则必须使用相应的三元模式:
?s rdf:type :C
在您的情况下,Dbpedia for Airlines中有一个类,但其URI为http://dbpedia.org/ontology/Airline,因此,三重模式将是
?s rdf:type <http://dbpedia.org/ontology/Airline> .
以及获取“所有航空公司”的查询将是
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)
返回
+-------------------------------------------+-----+
| 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
似乎是一个“好”的候选人:
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
}