4

我正在开发一个 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");
    }
};

有人知道我做错了什么吗?

4

1 回答 1

0

由于图形是虚拟的,因此技巧是define在 SPARQL 语句的指令中添加四元存储的名称。例如,如果使用 Virtuoso 四元映射存储,则该define指令将变为以下内容。

sparql define input:storage "http://www.openlinksw.com/schemas/virtrdf#DefaultQuadStorage"
于 2018-04-18T07:23:13.533 回答