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

时间:2015-10-09 13:06:39

标签: rdf sparql semantic-web owl virtuoso

我正在使用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 .

我试图在virtuoso中运行的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图),我会得到预期的结果。为什么这不适用于多个图表。 感谢。

----------------------------------- EDIT ----------- ---

分别是这个查询:

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>

1 个答案:

答案 0 :(得分:0)

您从原始查询中排除G2,从第二次和第三次查询中排除G1。 sameAs没有为您的查询添加FROM子句;它只是说&#34;这两个URI引用同一个实体。&#34;

试试这些 -

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  }
   }