代码之家  ›  专栏  ›  技术社区  ›  stsquad

如何优雅地处理不同本体中的dbpedia生日查询

  •  1
  • stsquad  · 技术社区  · 7 年前

    我试图从dbpedia中提取一些人的出生日期。组织。但是,一些查询失败,因为数据位于不同的属性中。例如:

    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

    编辑以添加:

    原来的问题被生活水平之间的差距弄糊涂了。数据库百科全书。org和dbpedia。org,这意味着尽管非直播版本中都有dbo:birthDate,但在直播中却不一样。数据库百科全书。组织。如果你比较 Alan Turing 具有 Grace Hopper 你看,他们的出生日期有两种不同的本体论。因此,现在的问题是如何优雅地处理这些问题。

    1 回复  |  直到 7 年前
        1
  •  1
  •   stsquad    7 年前

    答案是使用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

    现场直播。数据库百科全书。org已经有很多 namespace prefixes defined 正如@AKSW所建议的,我们可以进一步简化调用。distinct关键字表示不同分类法的相同结果合并在一起:

    select distinct ?birthDate {
      dbr:Grace_Hopper dbo:birthDate|dbp:birthDate ?birthDate
    }
    

    给予 this result

    推荐文章