1

我不相信维基百科的信息框会考虑到一个人姓名的各个部分,例如将姓氏与给定的(又名名字或基督教)姓名分开等。

但我也相信 DBPedia 除了直接从 Wikipedia 获得的内容外,还使用了其他几种本体。

所以我想知道是否可以进行 SPARQL 查询,该查询将仅根据他们的名字从维基百科中选择人。

例如我可以查询All knights of the British empire whose first name is "Tim"吗?

4

2 回答 2

3

这是一个类似于您想要的查询:

SELECT * 
    WHERE 
      {
         ?person rdf:type yago:BritishKnights  . 
         ?person foaf:givenName ?name.
         FILTER regex(?name, "Walter", "i")
      }  
LIMIT 100

它选择了名为“沃尔特”的英国骑士。它适用于DBPedia sparql 端点。我认为这是一个不错的起点。

您会发现以下资源很有用:

  • British Knights - 我的示例查询中使用的概念
  • 按职业划分的骑士- 在这里您可以找到更多资源的链接,而不仅仅是 BritishKnights。例如,上面的查询不会返回 Musicians 和 Actors,而是可以在不同的类别中找到它们。

  • 骑士- 更笼统地说,在这里您可以找到描述来自不同国家的骑士等资源的超链接。

  • 先生——“先生”的概念
  • Friend Of A Friend - 用于描述人和他们的关系的本体。我在示例中使用了它的givenName属性
  • vCard RDF 本体- 另一个具有名称属性的本体
  • SPARQL 过滤器教程

编辑:也可以找到 Tim Berners-Lee。英国的荣誉制度似乎一点也不简单。祝您搜索顺利。此查询考虑了 T. Berners-Lee 所获得的骑士勋章。

SELECT * 
WHERE 
  {
     ?person dcterms:subject category:Knights_Commander_of_the_Order_of_the_British_Empire . 
     ?person foaf:givenName ?name.
     FILTER regex(?name, "Tim", "i")
  }  
LIMIT 100

这完全是了解正确的数据集的问题。

编辑:

如果您使用适当的 RDF 文字,也可以避免使用 a FILTER,例如:

SELECT ?person
WHERE 
  {
     ?person rdf:type yago:BritishKnights  . 
     ?person foaf:givenName "Walter"@en .
  }  

更多信息可以在w3c 规范中找到

于 2012-07-29T11:22:28.177 回答
1

我知道这个问题现在已经三年了,但我刚刚找到它,并认为根据 wikidata 现在存在的内容提供解决方案可能会很有趣。这个链接到 Wikipedia 的新语义数据库有一个 Given name 属性,它允许这种类型的查询。

prefix wdt: <http://www.wikidata.org/prop/direct/>
prefix entity: <http://www.wikidata.org/entity/>
SELECT ?item WHERE {
    ?tree0 (wdt:P527)* ?item .
    ?tree0 (wdt:P166|wdt:P361)* entity:Q14420 .
    ?item wdt:P735 entity:Q1369663 .
}

您可以在wikidata 查询端点上运行它,目前有 28 个,很想知道您使用 DBpedia 找到的数字是否有很大不同。

于 2015-12-06T01:46:11.953 回答