2016-02-10 1 views
0

У меня есть этот данныеSPARQL как суб-запрос в другой запрос

@prefix : <http://test.example/> . 

:alice :likes :beethoven. 
:alice :likes :verdi. 
:sofia :likes :beethoven. 
:sofia :likes :verdi. 
:sofia :likes :rossini. 
:ania :likes :verdi. 
:ania :likes :beethoven. 
:ania :likes :david. 
:david :likes :ania. 
:david :likes :beethoven. 
:david :likes :verdi. 
:antonino :likes :verdi. 
:antonino :likes :mozart. 
:weirdo :likes :katyperry. 
:beethoven a :recommendable. 
:verdi a :recommendable. 
:rossini a :recommendable. 
:katyperry a :recommendable. 
:mozart a :recommendable. 

и я сделать запрос, чтобы получить пользователь, которые нравятся одни и те же элементы, как конкретный пользователь

select ?anotherUser (COUNT(?anotherItem) as ?countOfItems) WHERE { 
    values ?user {:ania} 
    ?anotherUser :likes ?anotherItem. 
    filter (?anotherUser != ?user) 
    filter exists {?user :likes ?anotherItem} 
}group by ?anotherUser 
order by desc(?countOfItems) 

теперь я хочу чтобы получить элементы, которые нравятся этим пользователям (но, конечно, без элементов, которые они разделяют с этим конкретным пользователем (:ania))

Я знаю, что мне нужно включить запрос внутри другого, я попробовал al от себя, но без успеха, не могли бы вы помочь?

+1

Можете ли вы показать, что вы пробовали, и почему это не сработало так, как ожидалось? –

ответ

5

теперь я хочу, чтобы получить элементы, которые эти пользователи, как (но, конечно, без предметов, которые они разделяют с этим конкретным пользователем (: АНЯ))

Я знаю, что я должен включить запрос внутри другой, я много пробовал, но не успел, не могли бы вы помочь?

Я считаю, что главное иметь в виду, что подзапросы оцениваются прежде всего, то есть запрос оценивается от самого внутреннего до самого внешнего.

Так следующий запрос:

prefix : <http://test.example> 
select distinct ?user ?anotherUser ?item WHERE { 
    ?anotherUser :likes ?item. 
    filter not exists {?user :likes ?item} 
    {select ?user ?anotherUser where { 
    values ?user {:ania} 
    ?anotherUser :likes ?anotherItem. 
    filter (?anotherUser != ?user) 
    filter exists {?user :likes ?anotherItem} 
    }} 
} 

даст результат:

---------------------------------- 
| user | anotherUser | item  | 
================================== 
| :ania | :sofia  | :rossini | 
| :ania | :antonino | :mozart | 
| :ania | :david  | :ania | 
---------------------------------- 

который является то, что вы просили правильно?

+0

Это не то, что я искал. Является ли 'anotherUser' ссылкой на одну и ту же переменную в обоих внутренних и внешних запросах? –

+0

да, делает. такая же переменная – chris

 Смежные вопросы

  • Нет связанных вопросов^_^