SPARQL错误尝试使用已使用的变量

时间:2018-08-24 14:43:35

标签: sparql virtuoso

我正在尝试使用以下查询同时提取有关2个基因的信息:

BASE <http://www.southgreen.fr/agrold/>
PREFIX rdf:<http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX rdfs:<http://www.w3.org/2000/01/rdf-schema#>
PREFIX vocab:<vocabulary/>

SELECT DISTINCT ?gene ?gene_lbl ?pathway 
WHERE{
  VALUES ?gene {<http://identifiers.org/ensembl.plant/BGIOSGA000040>
                <http://identifiers.org/ensembl.plant/Sb01g003700.1>}
  {
    GRAPH ?graph1{
          OPTIONAL{?gene rdfs:label ?gene_lbl.}
    }
  }
  UNION
  {
    GRAPH ?graph2{
          OPTIONAL{?gene vocab:is_agent_in ?pathway.}
    }
  }
}

但是它给了我以下错误:

  

Virtuoso 37000错误SP031:SPARQL编译器:内部错误:sparp_gp_attach_filter_cbk():尝试附加具有使用变量的过滤器

当我仅使用一个基因运行它或删除OPTIONAL关键字时,它就可以正常工作,有人可以向我解释这种现象的原因吗?

编辑

部分复杂性是由于它只是更大查询的示例。

@TallTed,谢谢您的回答,当我应用您提出的方法来提取更多信息时,我没有得到想要的结果。例如in this example基因OB12G15100编码一种蛋白质,但据我所知,除非I comment the OPTIONAL of gene_lblgene_lbl是可选的,否则它不会出现在结果中它可以被忽略,因此显示了其余查询的结果,但没有这样做,我也不知道为什么。

请原谅我缺乏知识。

1 个答案:

答案 0 :(得分:3)

我认为应该鼓励您的目标端点(现在为running a 3 year old version)升级到current Virtuoso Open Source Edition, 07.20.3229 a/k/a 7.2.5.1。请注意,your original querymy revision都在LOD云缓存上执行时没有错误(该缓存缺少AgroLD中的某些数据,因此它们无法提供所需的结果)。

也就是说,我认为您的原始查询不必要地复杂。请注意,this revision gets results from AgroLD with no problem-

BASE <http://www.southgreen.fr/agrold/>
PREFIX rdf:<http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX rdfs:<http://www.w3.org/2000/01/rdf-schema#>
PREFIX vocab:<vocabulary/>

SELECT DISTINCT ?gene ?gene_lbl ?pathway 
WHERE
  {
    VALUES ?gene { <http://identifiers.org/ensembl.plant/BGIOSGA000040> 
                   <http://identifiers.org/ensembl.plant/Sb01g003700.1> }
    OPTIONAL{ ?gene  rdfs:label  ?gene_lbl }
    OPTIONAL{ ?gene  vocab:is_agent_in  ?pathway }
}