使用SPARQL通过字符串名称检索DBpedia资源

8
我正在尝试使用以下查询按国家名称获取描述罗马尼亚的资源:
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
PREFIX : <http://dbpedia.org/resource/>

SELECT DISTINCT ?x WHERE {
     ?x foaf:name 'Romania'
}

SPARQL 查询结果

然而,它并没有检索到任何内容。我应该如何通过字符串'Romania'获取资源http://dbpedia.org/resource/Romania (:Romania)。 如果我想通过国家资源检索国家的名称,我使用以下查询,这可以正常工作:

PREFIX foaf: <http://xmlns.com/foaf/0.1/>
PREFIX : <http://dbpedia.org/resource/>

SELECT DISTINCT ?x WHERE {
     :Romania foaf:name ?x
}

SPARQL results

1个回答

10

这应该就可以了:

SELECT ?c
WHERE {
  ?c a dbo:Country ;
     foaf:name "Romania"@en .
  FILTER NOT EXISTS { ?c dbo:dissolutionYear ?y }
}

SPARQL结果

这里的关键问题是没有语言标签的"Romania""Romania"@en是不同的。此外,还有一些历史上也被称为罗马尼亚的国家,因此我们过滤掉了任何有解散年份的国家。DBpedia对于解散年份的数据完整性并不完全,但至少所有罗马尼亚的解散年份都已经被标记。


有趣的是,几年后,有人在罗马尼亚页面上使用了国家信息框模板,因此结果还包括罗马尼亚的纪念币! - Joshua Taylor
更有趣的是,dissolutionDate 属性在回答这个问题中也很重要。 - Joshua Taylor

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接