如何在不同的本体中优雅地处理 dbpedia 对 birthDate 的查询
How to gracefully handle dbpedia queries of birthDate in different ontologies
我正在尝试从 dbpedia.org 中提取一些人的出生日期。但是,某些查询会失败,因为数据位于不同的属性中。例如:
PREFIX dbr: <http://dbpedia.org/resource/>
PREFIX dbo: <http://dbpedia.org/ontology/>
select ?birthDate where {
dbr:Alan_Turing dbo:birthDate ?birthDate
}
returns 1912-06-23 应该的但是:
PREFIX dbr: <http://dbpedia.org/resource/>
PREFIX dbo: <http://dbpedia.org/ontology/>
select ?birthDate where {
dbr:Grace_Hopper dbo:birthDate ?birthDate
}
returns 空 result.
编辑添加:
最初的问题被实时之间的差异所混淆。dbpedia.org 和 dbpedia.org,这意味着尽管非实时版本在两者中都有 dbo:birthDate 这并不相同直播中。dbpedia.org。如果你比较 Alan Turing with Grace Hopper 你会发现他们在两个不同的本体中有他们的出生日期。所以现在的问题是如何优雅地处理这些问题。
答案是使用 UNION 运算符从 ontology 中找到答案:
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.
我正在尝试从 dbpedia.org 中提取一些人的出生日期。但是,某些查询会失败,因为数据位于不同的属性中。例如:
PREFIX dbr: <http://dbpedia.org/resource/>
PREFIX dbo: <http://dbpedia.org/ontology/>
select ?birthDate where {
dbr:Alan_Turing dbo:birthDate ?birthDate
}
returns 1912-06-23 应该的但是:
PREFIX dbr: <http://dbpedia.org/resource/>
PREFIX dbo: <http://dbpedia.org/ontology/>
select ?birthDate where {
dbr:Grace_Hopper dbo:birthDate ?birthDate
}
returns 空 result.
编辑添加:
最初的问题被实时之间的差异所混淆。dbpedia.org 和 dbpedia.org,这意味着尽管非实时版本在两者中都有 dbo:birthDate 这并不相同直播中。dbpedia.org。如果你比较 Alan Turing with Grace Hopper 你会发现他们在两个不同的本体中有他们的出生日期。所以现在的问题是如何优雅地处理这些问题。
答案是使用 UNION 运算符从 ontology 中找到答案:
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.