Rdf Sparql查询超时,并显示可传递的临时内存错误消息

Rdf Sparql查询超时,并显示可传递的临时内存错误消息,rdf,sparql,semantic-web,dbpedia,Rdf,Sparql,Semantic Web,Dbpedia,我运行以下查询以获取意大利的游客吸引力 select distinct ?poi where {?company a dbpedia-owl:Place ; rdfs:label ?poiName; dcterms:subject/skos:broader* category:Visitor_attractions_in_Italy } 但是我得到了以下错误 Virtuoso 42000 Error TN...: Exceeded 1000000000 bytes in transitive

我运行以下查询以获取意大利的游客吸引力

select distinct ?poi where {?company a dbpedia-owl:Place ; rdfs:label ?poiName; dcterms:subject/skos:broader* category:Visitor_attractions_in_Italy } 
但是我得到了以下错误

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 distinct ?poi where {?company a dbpedia-owl:Place ; rdfs:label ?poiName; dcterms:subject/skos:broader* category:Visitor_attractions_in_Italy }

即使在查询结束时使用限制10,也会出现此错误。我知道这可能是一个耗时的查询,但不确定如何将此查询分解,以便最终获得所有的游客景点。

有人遇到了相同类型的问题,并在answers.semanticweb.com上询问了此问题:。如果这里也有答案的话,这个有点不令人满意的答案是:决定你实际需要走多深,而不是使用*,使用{}符号来表示skos:Brother的最大重复次数。例如:

select distinct ?poi where {
  ?poi a dbpedia-owl:Place ;
       dcterms:subject/skos:broader{,10} category:Visitor_attractions_in_Italy
} 


表示重复次数的{}符号实际上不是该标准的一部分,尽管它是在该标准的早期草案中。不过,基于Virtuoso的DBpedia端点仍然支持它。

answers.semanticweb.com对此问题有一个答案:。因此,总体而言,这是一个反复试验的过程,看看我们能走多远,我不确定这是由可传递循环造成的,还是因为服务器需要遍历太多的子类别。这不应该是可传递循环的问题,因为SPARQL语义应该处理这个问题。否则,数据如
xpy。y p x.
应该会导致查询出现问题,如
?a p*?b
。不过,维基百科上有很多类别,所以浏览图表可能需要相当大的内存。@JoshuaTaylor不仅仅是类别的数量,还有它们的结构。你会猜到那个类别吗:美国(间接地)在类别:神权政体之下吗?@svick 0)skos:broader不是一个类型层次;它是用来安排话题的。1) 因此,仅仅因为
Cat:US skos:overmale*Cat:theocraties
并不意味着
Cat:US skos:overmale Cat:theocraties
。那么,可能存在某种遥远的联系也就不足为奇了。