簡體   English   中英

sparql如何子查詢到另一個查詢

[英]sparql how to sub query into another query

我有這個數據

@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 )共享的項目)

我知道我必須在另一個內部包含一個查詢,我自己做了很多嘗試,但沒有成功,請您能幫忙嗎?

現在,我想獲取這些用戶喜歡的項目(但當然沒有他們與該特定用戶共享的項目(:ania))

我知道我必須在另一個內部包含一個查詢,我自己做了很多嘗試,但沒有成功,請您能幫忙嗎?

我認為要記住的主要事情是,首先查詢子查詢,即從最里面的到最外面的查詢進行查詢。

所以下面的查詢:

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

您要求的是對的嗎?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM