SPARQL 错误尝试使用已用变量附加过滤器
SPARQL error attempt to attach a filter with used variable
我正在尝试使用此查询同时提取有关 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 Error SP031: SPARQL compiler: Internal error: sparp_gp_attach_filter_cbk(): attempt to attach a filter with used variable
当我 运行 它仅使用一个基因或当我删除 OPTIONAL
关键字时,它可以正常工作,有人可以向我解释这种行为背后的原因吗?
- Endpoint Virtuoso 版本:07.10.3211
编辑 :
部分复杂性是因为这只是一个更大查询的示例。
@TallTed, thank you for you answer, when I apply your proposed method to extract more information I don't get the desired results. for instance in this example gene OB12G15100
encodes a protein, but it doesn't show up in the results unless if I comment the OPTIONAL of gene_lbl,据我所知,由于 gene_lbl
是可选的,它可以被忽略,因此,显示查询的其余部分的结果,但它没有这样做,我不知道为什么。
见识不足请见谅
我相信你的目标端点,现在 running a 3 year old version, should be encouraged to upgrade to the current Virtuoso Open Source Edition, 07.20.3229
a/k/a 7.2.5.1
. Note that both your original query and my revision 在 LOD Cloud Cache 上执行时没有错误(它缺少 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 }
}
我正在尝试使用此查询同时提取有关 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 Error SP031: SPARQL compiler: Internal error: sparp_gp_attach_filter_cbk(): attempt to attach a filter with used variable
当我 运行 它仅使用一个基因或当我删除 OPTIONAL
关键字时,它可以正常工作,有人可以向我解释这种行为背后的原因吗?
- Endpoint Virtuoso 版本:07.10.3211
编辑 :
部分复杂性是因为这只是一个更大查询的示例。
@TallTed, thank you for you answer, when I apply your proposed method to extract more information I don't get the desired results. for instance in this example gene OB12G15100
encodes a protein, but it doesn't show up in the results unless if I comment the OPTIONAL of gene_lbl,据我所知,由于 gene_lbl
是可选的,它可以被忽略,因此,显示查询的其余部分的结果,但它没有这样做,我不知道为什么。
见识不足请见谅
我相信你的目标端点,现在 running a 3 year old version, should be encouraged to upgrade to the current Virtuoso Open Source Edition, 07.20.3229
a/k/a 7.2.5.1
. Note that both your original query and my revision 在 LOD Cloud Cache 上执行时没有错误(它缺少 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 }
}