在多个图之间的 virtuoso sparql 中使用 sameAs

Using sameAs in virtuoso sparql between multiple graphs

我正在使用 virtuoso 7.2.1,我正在尝试 运行 3 个图之间的 sparql 查询。

G1 包含:

@prefix : <http://test#> .
:bob :hasAddress :add1 .

G2 包含:

@prefix : <http://test#> .
:bob :hasAddress :add2 .

并且 G3 包含:

@prefix : <http://test#> .
@prefix owl: <http://www.w3.org/2002/07/owl#> .
:add1 owl:sameAs :add2 .

我正在尝试 运行 的 sparql 是:

DEFINE input:same-as "yes"
Select *
from <http://G1>
from <http://G3>
Where{
<http://test#bob> <http://test#hasAddress> ?z .
}

结果:

<http://test#add1>

预期结果:

<http://test#add1>
<http://test#add2>

注意:如果我使用 单图 (G1、G2、G3 合并到 G 图),我会得到预期的结果。为什么这不适用于多个图表。 谢谢。

--------------------------------编辑-------- -----

分别是这个查询:

DEFINE input:same-as "yes"
Select *
from <http://G2>
from <http://G3>
Where{
<http://test#bob> <http://test#hasAddress> ?z .
}

或此查询:

DEFINE input:same-as "yes"
Select ?z
from named <http://G2>
from named <http://G3>
Where{
graph ?g {<http://test#bob> <http://test#hasAddress> ?z .}
}

只有这个结果:

<http://test#add2>

您从原始查询中排除了 G2,并从第二个和第三个查询中排除了 G1。 sameAs 不会在您的查询中添加 FROM 子句;它只是说 "these two URIs reference the same entity."

试试这些 --

DEFINE  input:same-as  "yes"
SELECT  *
  FROM  <http://G1>
  FROM  <http://G2>
  FROM  <http://G3>
 WHERE 
   {
     <http://test#bob>  <http://test#hasAddress>  ?z 
   }

-- 和--

DEFINE  input:same-as  "yes"
SELECT  *
  FROM  <http://G1>
  FROM  <http://G2>
  FROM  <http://G3>
 WHERE
   {
     <http://test#bob>  <http://test#hasAddress>  ?z 
   }

-- 和--

DEFINE  input:same-as  "yes"
SELECT  ?z
  FROM  NAMED <http://G1>
  FROM  NAMED <http://G2>
  FROM  NAMED <http://G3>
 WHERE
   {
     GRAPH  ?g 
       {  <http://test#bob>  <http://test#hasAddress>  ?z  }
   }