我正在使用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>
答案 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 }
}