我正在尝试使用以下查询同时提取有关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_lbl是gene_lbl
是可选的,否则它不会出现在结果中它可以被忽略,因此显示了其余查询的结果,但没有这样做,我也不知道为什么。
请原谅我缺乏知识。
答案 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 query和my 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 }
}