我正在开发一个Virtuoso存储过程。我想对图的SPARQL查询结果执行一次循环。当查询包含对虚拟图(物理上不在三元组中的图,这是R2RML映射操作的结果)的引用时,问题就出现了。在我的所有尝试中,我没有得到任何错误,但也得到了一个空的结果集。我尝试了以下几种方法
create procedure R2RML.DBA.try() returns integer
{
for (sparql define input:storage ""
select ?s ?p
from <http://example.com/resource>
where {
?s <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> ?o .
} LIMIT 5 ) do
{
use_the_value("s");
}
};此外,还有以下内容
create procedure R2RML.DBA.try() returns integer
{
declare srcgraph varchar;
srcgraph := 'http://ec.example.com/resource';
for (sparql define input:storage ""
select ?s ?p
where {
GRAPH `iri(?:srcgraph)`
{
?s <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> ?o .
}
} LIMIT 5 ) do
{
use_the_value("s");
}
};在这两种情况下都不会执行迭代,尽管查询相同,但在SPARQL端点中执行时会返回一个结果。
如果我删除对该图的引用,则会执行迭代:
create procedure R2RML.DBA.try() returns integer
{
for (sparql define input:storage ""
select ?s ?p
where {
?s <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> ?o .
} LIMIT 5 ) do
{
use_the_value("s");
}
};有人知道我哪里搞错了吗?
发布于 2018-04-18 15:23:14
因为图是虚拟的,所以诀窍是在SPARQL语句的define指令中添加四元存储的名称。例如,如果使用Virtuoso四元地图存储,则define指令将变为以下内容。
sparql define input:storage "http://www.openlinksw.com/schemas/virtrdf#DefaultQuadStorage"https://stackoverflow.com/questions/42434965
复制相似问题