问题描述
我希望能够通过键入一个人的姓名然后检索有关此人或其他实体的所有可用信息,从 DBPedia 的 SPARQL 端点获取信息。
例如我知道我可以使用这样的查询:
SELECT * {
<http://dbpedia.org/resource/Aristotle>
dbo:birthYear ?birth;
dbo:deathYear ?death;
dbo:abstract ?comment.
FILTER (lang(?comment)='en')
}
LIMIT 10
获取有关亚里士多德出生和死亡年份的信息以及摘要中可用的信息。
但是,我想要实现的是为每个可用属性获取一个人的所有可用信息,而无需指定每个属性。
这是可能的还是我应该去 DBPedia 的本体并列出查询中 Person
的所有可用属性?
解决方法
你可以像这样使用变量谓词:
SELECT ?p ?o {
<http://dbpedia.org/resource/Aristotle>
?p ?o . #?p is now a variable
FILTER(LANG(?o) = 'en' || LANG(?o) = '' || !BOUND(LANG(?o)) )
}
请注意,当对象 ?o
的语言被定义(又名“绑定”)时,我们返回英语中的 ?o
,或者当 ?o
是另一个文字(例如数字,和它的语言绑定到 '',我们返回文字。
否则,当没有语言时,我们只返回 ?o
(例如,对于 IRI、空白节点等)。