我不相信维基百科的信息框会考虑到一个人姓名的各个部分,例如将姓氏与给定的(又名名字或基督教)姓名分开等。
但我也相信 DBPedia 除了直接从 Wikipedia 获得的内容外,还使用了其他几种本体。
所以我想知道是否可以进行 SPARQL 查询,该查询将仅根据他们的名字从维基百科中选择人。
例如我可以查询All knights of the British empire whose first name is "Tim"
吗?
我不相信维基百科的信息框会考虑到一个人姓名的各个部分,例如将姓氏与给定的(又名名字或基督教)姓名分开等。
但我也相信 DBPedia 除了直接从 Wikipedia 获得的内容外,还使用了其他几种本体。
所以我想知道是否可以进行 SPARQL 查询,该查询将仅根据他们的名字从维基百科中选择人。
例如我可以查询All knights of the British empire whose first name is "Tim"
吗?
这是一个类似于您想要的查询:
SELECT *
WHERE
{
?person rdf:type yago:BritishKnights .
?person foaf:givenName ?name.
FILTER regex(?name, "Walter", "i")
}
LIMIT 100
它选择了名为“沃尔特”的英国骑士。它适用于DBPedia sparql 端点。我认为这是一个不错的起点。
您会发现以下资源很有用:
按职业划分的骑士- 在这里您可以找到更多资源的链接,而不仅仅是 BritishKnights。例如,上面的查询不会返回 Musicians 和 Actors,而是可以在不同的类别中找到它们。
骑士- 更笼统地说,在这里您可以找到描述来自不同国家的骑士等资源的超链接。
givenName
属性编辑:也可以找到 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 规范中找到
我知道这个问题现在已经三年了,但我刚刚找到它,并认为根据 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 找到的数字是否有很大不同。