1

我之前使用过来自三重模式的 Uri 绑定变量作为 GRAPH 参数,但是当我使用下面显示的 BIND/URI/CONCAT 的结果时,它的行为不符合预期:它不匹配任何已知的图。我检查了 ?graph 变量是否解析为预期的 Graph Uri。如果该模式应该起作用,是否存在我忽略的变量范围问题?

       选择 ?s ?p ?o 在哪里
       {
        图 <http://www.interition.net/g1>
          {
            <s1> :a 属性 ?literal 。

            BIND ( URI(CONCAT("http://www.interition.net/graphs/", ?literal )) AS ?graph) 。
          }

          图?图{
                  ?s?p?o。
              }
    }

示例 nQuads

<s1> <http://www.interition.net/ref/aProperty> "g2" <http://www.interition.net/g1> .
<s2> <http://www.interition.net/ref/aState> "happy"   <http://www.interition.net/graphs/g2> .
4

3 回答 3

1

看起来问题源于我们正在使用的三重存储。我制作了两个虚拟 ttl 文件,将它们上传到 Jena 的 Fuseki 中的两个图表中,并且查询的工作方式与 Andy 演示的一样。

但是,我们目前在 Interition 使用旧版本的BigData作为我们的存储,它似乎不支持将这种类型的变量传递给图形......我将在最新版本中尝试它,我们将重新考虑是否升级或切换到Fuseki。如果问题在最新版本中也仍然存在,我会向开发团队提出。

于 2014-09-06T17:49:39.010 回答
0

看起来<s1>数据中的 与查询中的不匹配<s1>

尝试使用“arq.qparse”打印查询(或仅在程序中打印“toString”)。的相对 URI<s1>已解析。

N-Quads 是如何创建的?API 不检查 URI。

尝试:

PREFIX  ref:  <http://www.interition.net/ref/>

SELECT  ?graph ?s ?p ?o
WHERE
  { GRAPH <http://www.interition.net/g1>
      { ?s1 ref:aProperty ?literal
        BIND(uri(concat("http://www.interition.net/graphs/", ?literal)) AS ?graph)
      }
    GRAPH ?graph
      { ?s ?p ?o }
  }

我得到:

-----------------------------------------------------------------------
| graph                                 | s    | p          | o       |
=======================================================================
| <http://www.interition.net/graphs/g2> | <s2> | ref:aState | "happy" |
-----------------------------------------------------------------------
于 2014-09-04T13:03:35.680 回答
0

此问题可能与查询评估在 RDF 存储中的实现方式有关。当第一个GRAPH块被评估时,它会产生一组绑定?graph。通常,此绑定仅在查询评估的最后阶段应用于两个组,其中块将跨此变量连接。不要求在实际匹配第二图形模式时使用它。编写查询的另一种方法是匹配过滤器中的图形:

PREFIX  ref:  <http://www.interition.net/ref/>

SELECT  ?graph ?s ?p ?o
WHERE {
   GRAPH <http://www.interition.net/g1> {
      ?s1 ref:aProperty ?literal
      BIND(uri(concat("http://www.interition.net/graphs/", ?literal)) AS ?graph1)
   }
   GRAPH ?graph2 {
      ?s ?p ?o
   }
   FILTER(?graph1 = ?graph2)
}
于 2017-06-12T08:37:41.033 回答