如何检索http://dbpedia.org/resource/Milano的所有属性?我试过这个查询,但我有一些结果,我不明白原因:
select ?prop ?c
where {<http://dbpedia.org/resource/Milano> ?prop ?c.}
答案 0 :(得分:3)
这个问题并不完全清楚,但预计您所问的问题就是为什么你会得到关于dbpedia:Milano
的三倍,而不是dbpedia:Milan
。正如您在结果中看到的,此查询仅返回十行:
select ?prop ?c
where {
<http://dbpedia.org/resource/Milano> ?prop ?c.
}
然而,其中一行是
prop c
http://dbpedia.org/ontology/wikiPageRedirects http://dbpedia.org/resource/Milan
所以,简单的答案就是“查询米兰”这样的查询:
select ?prop ?c
where {
<http://dbpedia.org/resource/Milan> ?prop ?c. # you can use dbpedia:Milan, too
}
更复杂的答案会返回dbpedia:Milano
和的三元组,它会重定向到任何内容的任何三元组(并且,我想,任何重定向到的内容,等等虽然我认为维基百科将重定向限制在一个深层次。您可以使用SPARQL中的属性路径查询执行此操作:
select ?prop ?c
where {
dbpedia:Milano dbpedia-owl:wikiPageRedirects* ?subject .
?subject ?prop ?c.
}
在该查询中,?subject
将是长度为零或更长的路径相关的任何内容(因此,鉴于我们看到的数据,?subject
将至少绑定dbpedia:Milano
}和dbpedia:Milan
。如果您想保留有关您正在使用的各种三元组主题的信息,您可能需要将?subject
添加到select
行,以便select ?subject ?prop ?c
。
如果您不关心?subject
的特定值,那么您实际上根本不需要绑定?subject
,并且可以在查询中使用空白节点:
select ?prop ?c
where {
dbpedia:Milano dbpedia-owl:wikiPageRedirects* [ ?prop ?c ] .
}
不幸的是,尽管最后一个查询是合法的SPARQL,但Virtuoso说这是一个错误。幸运的是,这最后的改进完全是可选的;这对解决方案来说并不重要。如果您要查询其他端点,则可以使用它。 Virtuoso给出的错误是:
Virtuoso 37000 Error SP031: SPARQL compiler: Object of transitive triple pattern should be variable or QName or literal, not blank node
SPARQL query:
define sql:big-data-const 0
#output-format:text/html
define sql:signal-void-variables 1 define input:default-graph-uri <http://dbpedia.org> select ?prop ?c
where {
dbpedia:Milano dbpedia-owl:wikiPageRedirects* [ ?prop ?c ] .
}
我联系了Virtuoso邮件列表,他们确认这是一个Virtuoso错误,他们会修复它。不过,我不知道修复程序需要多长时间才能到达DBpedia端点。