1

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

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

SPARQL 结果

4

1 回答 1

3

这个问题并不完全清楚,但希望你问的问题是为什么你得到三倍的dbpedia:Milano,但不是dbpedia:Milan。如您在结果中所见,此查询仅返回十行:

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

SPARQL 结果

然而,其中一行是

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 结果

一个更复杂的答案将返回它重定向到的任何东西的三元组dbpedia:Milano 任何三元组(以及,我想,任何这些重定向到的任何东西,等等,尽管我认为维基百科将重定向限制为一层深度)。您可以使用 SPARQL 中的属性路径查询来执行此操作:

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

SPARQL 结果

在该查询中,?subject将与长度为零或更多的路径相关的任何内容(因此,鉴于我们已经看到的数据,?subject将至少绑定到dbpedia:Milanodbpedia:Milan。如果您想保留有关您的各种三元组的主题的信息' 正在使用,您可能希望添加?subject到该select行,以便拥有select ?subject ?prop ?c.

如果您不关心 的特定值?subject,那么您实际上根本不需要绑定?subject,并且可以在查询中使用空白节点:

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

SPARQL 结果

警告

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

于 2013-10-15T11:37:05.720 回答