Stored procedures 如何迭代引用虚拟图的SPARQL查询?

Stored procedures 如何迭代引用虚拟图的SPARQL查询?,stored-procedures,iteration,sparql,virtuoso,r2rml,Stored Procedures,Iteration,Sparql,Virtuoso,R2rml,我正在开发一个Virtuoso存储过程。 我想对SPARQL查询的结果执行一个循环到一个图。 当查询包含对虚拟图的引用时,问题就出现了(一个物理上不在triplestore中的图,是R2RML映射操作的结果)。在我所有的尝试中,我没有得到任何错误,但也得到了一个空的结果集。 我尝试了以下方法 create procedure R2RML.DBA.try() returns integer { for (sparql define input:storage "" select

我正在开发一个Virtuoso存储过程。 我想对SPARQL查询的结果执行一个循环到一个图。 当查询包含对虚拟图的引用时,问题就出现了(一个物理上不在triplestore中的图,是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");
    }
};
create过程R2RML.DBA.try()返回整数
{
对于(sparql定义输入:存储“”
选择?s?p
从…起
在哪里{
?s?o。
}限制(5)做什么
{
使用_值(“s”);
}
};
还有以下几点

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");
    }
};
create过程R2RML.DBA.try()返回整数
{
声明srcgraph varchar;
srcgraph:='http://ec.example.com/resource';
对于(sparql定义输入:存储“”
选择?s?p
在哪里{
图'iri(?:srcgraph)`
{
?s?o。
}
}限制(5)做什么
{
使用_值(“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");
    }
};
create过程R2RML.DBA.try()返回整数
{
对于(sparql定义输入:存储“”
选择?s?p
在哪里{
?s?o。
}限制(5)做什么
{
使用_值(“s”);
}
};

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

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

sparql define input:storage "http://www.openlinksw.com/schemas/virtrdf#DefaultQuadStorage"

这看起来更像是一个适合大师邮件列表的问题,因为这是一个非常具体的问题。但也许@TallTed会在这里回答你的问题。