我是语义网,dbpedia和SPARQL的新手。我想找到美国及其首都的所有州。这就是我现在所拥有的。
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX dbo: <http://dbpedia.org/ontology/>
SELECT DISTINCT ?state_label ?capital_label
WHERE {
?state_label dct:subject dbc:States_of_the_United_States.
?state_label dbo:capital ?capital_label.
}
我只得到36个结果而不是50个。有人可以帮忙吗?
答案 0 :(得分:3)
在查看resource for New Hampshire时,我发现其中一种类型是 yago:StatesOfTheUnitedStates 。当我要求所有这些时,我得到51个结果,当我请求所有这些和他们的首都时,我得到50.这些数字听起来是对的,但是看数据,它有点复杂;有一个非州的结果(美国州),新泽西有两个(资源特伦顿和字符串“特伦顿”),特拉华州没有资本列出(我不知道为什么,但三重刚刚在DBpedia中不存在。无论如何,如果你愿意接受有资本的49,你过滤使用这个:
select ?state ?capital where {
?state a yago:StatesOfTheUnitedStates ;
dbp:capital ?capital .
filter isIRI(?capital)
}
答案 1 :(得分:1)
有时,在这种情况下,问题出在数据中,而不是查询中。
另请注意,即使主要的DBpedia数据集通常落后于维基百科,修正DBpedia数据的主要方法仍然是编辑维基百科。如果DBpedia似乎没有从维基百科中提取正确的数据,那么它对tell DBpedia有帮助......
在DBpedia中显然只有5 yago:StateCapitalsInTheUnitedStates
,但我们知道这个世界并不正确,也不知道维基百科中的数据 - 所以肯定有些事情需要改变。
Here's a query可以为您提供yago:StatesOfTheUnitedStates
所有资源,其http://dbpedia.org/property/capital
(特拉华州失踪,新泽西州翻倍)和http://dbpedia.org/ontology/capital
(多个州失踪) - -
PREFIX dbo: <http://dbpedia.org/ontology/>
PREFIX dbp: <http://dbpedia.org/property/>
SELECT ?state
?dbocapital
?dbpcapital
WHERE
{
?state a yago:StatesOfTheUnitedStates
OPTIONAL { ?state dbo:capital ?dbocapital }
OPTIONAL { ?state dbp:capital ?dbpcapital }
}
ORDER BY ?state