2015-10-09 5 views
1

Я использую virtuoso 7.2.1, и я пытаюсь запустить sparql-запрос между 3-мя графами.Использование sameAs в virtuoso 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 графа) я получить ожидаемый результат. Почему это не работает с несколькими графиками. Спасибо.

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

Похоже, Графы в ЕКОМ DonT сливаются правильно? Или я чего-то не хватает. – Nosakos

ответ

0

Вы исключаете G2 из своего исходного запроса, а G1 - из второго и третьего запросов. sameAs не добавляет предложение FROM к вашему запросу; он просто говорит: «эти два URI ссылаются на одну и ту же сущность».

Попробуйте эти -

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

Да, с моими запросами у меня пропала тройка, которую я хотел. Поскольку, как вы сказали, одинаково, только добавляет ссылку не к самой тройке. Я хотел бы проверить sameAs между несколькими графами, но это была неудачная попытка, потому что мы также можем удалить график G3 и получить желаемые результаты, которые я хотел. Спасибо за ответ. – Nosakos