如何迭代引用虚拟图的 SPARQL 查询?
Posted
技术标签:
【中文标题】如何迭代引用虚拟图的 SPARQL 查询?【英文标题】:How do I iterate over a SPARQL query referring to a virtual graph? 【发布时间】:2017-07-15 01:38:49 【问题描述】:我正在开发一个 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");
;
有人知道我做错了什么吗?
【问题讨论】:
这看起来更像是一个适合 Virtuoso 邮件列表的问题,因为这是一个非常具体的问题。但可能@TallTed 会在这里回答你的问题。 【参考方案1】:由于图形是虚拟的,因此诀窍是在 SPARQL 语句的 define
指令中添加四元存储的名称。例如,如果使用 Virtuoso 四元映射存储,define
指令将变为以下内容。
sparql define input:storage "http://www.openlinksw.com/schemas/virtrdf#DefaultQuadStorage"
【讨论】:
以上是关于如何迭代引用虚拟图的 SPARQL 查询?的主要内容,如果未能解决你的问题,请参考以下文章