在DBpedia上使用SPARQL属性路径

时间:2017-04-07 04:59:39

标签: sparql dbpedia

我想知道DBpedia上两个实体之间是否存在属性路径。这是我在snorql上尝试的示例查询:

SELECT * WHERE {
:Braveheart (:|!:)* :Mel_Gibson
}
LIMIT 100

查询遇到内存错误:

Virtuoso 42000 Error TN...: Exceeded 1000000000 bytes in transitive temp memory. use t_distinct, t_max or more T_MAX_memory options to limit the search or increase the pool SPARQL query: define sql:big-data-const 0 #output-format:application/sparql-results+json define input:default-graph-uri PREFIX owl: PREFIX xsd: PREFIX rdfs: PREFIX rdf: PREFIX foaf: PREFIX dc: PREFIX : PREFIX dbpedia2: PREFIX dbpedia: PREFIX skos: SELECT * WHERE { :Braveheart (:|!:)* :Mel_Gibson } LIMIT 100

我怀疑有人会建议设置本地dbpedia镜像。如果是这样的话,我会喜欢一些关于如何做的详细步骤。

2 个答案:

答案 0 :(得分:0)

我认为您的查询对于您尝试回答的内容有点不对...也因为其中没有变量select *无法预测任何内容(i' d认为这甚至是编译它的错误),所以让我rephrase your query

ASK { dbr:Braveheart (<>|!<>)+ dbr:Mel_Gibson }

可悲的是,查询错误时遇到了与您描述的问题相同的问题。

虽然我同意,复杂应该针对本地端点执行,但上述查询根本不复杂,特别是考虑到有几个direct edges between the two nodes

SELECT * { dbr:Braveheart ?p dbr:Mel_Gibson }

我认为这是Virtuoso的查询规划器中的一个错误并报告了它:https://github.com/openlink/virtuoso-opensource/issues/641

说了这么多,我想指出,在实际情况下,你可能对那些不仅仅指向前进的道路感兴趣。边缘的方向很大程度上取决于建模。因此,请考虑使用类似这样的查询:

ASK { dbr:Braveheart ((<>|!<>)|^(<>|!<>))+ dbr:Mel_Gibson }

表达式表示至少在一个步骤中沿着它们的方向或任何边缘(^)。 (是的,我也想知道为什么属性路径不是任意边的短语法;))

答案 1 :(得分:0)

转发@JörnHees的回答,有几点:

  1. <>是无效的谓词标识符。对于Virtuoso,<>标识了一个文档(在HTTP 200 OK上返回GET的内容位置),这就是<#><#this>工作的原因。这不是解析问题,因为它更多地与标识符的语义有关。

  2. 公共DBpedia端点未配置为接受此类查询,因此出现错误。

  3. 使用<#this>而不是<>,我们有 -

    prefix dbpedia: <http://dbpedia.org/resource/> 
    ASK { dbpedia:Braveheart (<#this>|!<#this>)+ dbpedia:Mel_Gibson }
    

    两个替代实例,由OpenLink Software(我的雇主和Virtuoso的制作人)托管,为该查询提供解决方案:

相关问题