检索重定向资源的属性

时间:2013-10-15 11:31:15

标签: sparql dbpedia

如何检索http://dbpedia.org/resource/Milano的所有属性?我试过这个查询,但我有一些结果,我不明白原因:

select ?prop ?c 
where {<http://dbpedia.org/resource/Milano> ?prop ?c.}

SPARQL results

1 个答案:

答案 0 :(得分:3)

这个问题并不完全清楚,但预计您所问的问题就是为什么你会得到关于dbpedia:Milano的三倍,而不是dbpedia:Milan。正如您在结果中看到的,此查询仅返回十行:

select ?prop ?c
where {
  <http://dbpedia.org/resource/Milano> ?prop ?c.
}

SPARQL results

然而,其中一行是

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
}

SPARQL results

更复杂的答案会返回dbpedia:Milano 的三元组,它会重定向到任何内容的任何三元组(并且,我想,任何重定向到的内容,等等虽然我认为维基百科将重定向限制在一个深层次。您可以使用SPARQL中的属性路径查询执行此操作:

select ?prop ?c
where {
  dbpedia:Milano dbpedia-owl:wikiPageRedirects* ?subject .
  ?subject ?prop ?c.
}

SPARQL results

在该查询中,?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 results

买者

不幸的是,尽管最后一个查询是合法的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端点。