我正在尝试从dbpedia.org中提取一些人的出生日期。但是,某些查询失败,因为数据属于不同的属性。例如:
PREFIX dbr: <http://dbpedia.org/resource/>
PREFIX dbo: <http://dbpedia.org/ontology/>
select ?birthDate where {
dbr:Alan_Turing dbo:birthDate ?birthDate
}
应该返回1912-06-23,但是:
PREFIX dbr: <http://dbpedia.org/resource/>
PREFIX dbo: <http://dbpedia.org/ontology/>
select ?birthDate where {
dbr:Grace_Hopper dbo:birthDate ?birthDate
}
返回空result。
编辑添加:
最初的问题被live.dbpedia.org和dbpedia.org之间的差异搞糊涂了,这意味着尽管非实时版本有dbo:birthDate,但这两者在live.dbpedia.org上并不相同。如果您将Alan Turing与Grace Hopper进行比较,您会发现他们的生育日期分为两个不同的本体。所以现在的问题是如何优雅地处理这些问题。
答案 0 :(得分:1)
答案是使用UNION运算符从任何本体论中找到答案:
PREFIX dbr: <http://dbpedia.org/resource/>
PREFIX dbo: <http://dbpedia.org/ontology/>
PREFIX dbp: <http://dbpedia.org/property/>
select ?birthDate where {
{ dbr:Alan_Turing dbo:birthDate ?birthDate }
UNION
{ dbr:Alan_Turing dbp:birthDate ?birthDate }
}
给我们two results,两者都是一样的。而对于Grace Hopper:
PREFIX dbr: <http://dbpedia.org/resource/>
PREFIX dbo: <http://dbpedia.org/ontology/>
PREFIX dbp: <http://dbpedia.org/property/>
select ?birthDate where {
{ dbr:Grace_Hopper dbo:birthDate ?birthDate }
UNION
{ dbr:Grace_Hopper dbp:birthDate ?birthDate }
}
我们只获得one result
由于live.dbpedia.org已经有一堆namespace prefixes defined,并且正如@AKSW所建议的,我们可以进一步简化通话。 distinct关键字意味着将来自不同分类法的相同结果合并在一起:
select distinct ?birthDate {
dbr:Grace_Hopper dbo:birthDate|dbp:birthDate ?birthDate
}
给予this result。