我正在运行以下查询以吸引意大利的游客
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,我也会收到此错误。我知道这可能是一个耗时的查询,但不知道如何打破这个查询,以便最终得到所有的访客景点。
答案 0 :(得分:4)
有人遇到了同样类型的问题,并在answers.semanticweb.com上询问了这个问题:Finding all possible categories between one given and Main classification with DBpedia and SPARQL。这里有一个不太令人满意的答案,答案也在这里:做出关于你实际需要走多远的决定,而不是使用*,使用{}表示法来表示skos的最大重复次数:更广泛。例如,
select distinct ?poi where {
?poi a dbpedia-owl:Place ;
dcterms:subject/skos:broader{,10} category:Visitor_attractions_in_Italy
}
用于表示重复次数的{}符号实际上不是标准的一部分,尽管它在早期的草稿中。但是,基于Virtuoso的DBpedia端点仍然支持它。