如何在不同的本体中优雅地处理 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.