【问题标题】:sparql how to sub query into another querysparql如何将查询子查询到另一个查询中
【发布时间】:2016-02-11 03:10:11
【问题描述】:

我有这个数据

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

我知道我必须在另一个查询中包含一个查询,我自己尝试了很多但没有成功,你能帮忙吗?

【问题讨论】:

  • 您能展示一下您尝试过的方法以及为什么它没有按预期工作吗?

标签: sparql rdf semantic-web owl


【解决方案1】:

现在我想获取这些用户喜欢的项目(但当然没有他们与特定用户共享的项目 (: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    |
----------------------------------

这是你要求的对吗?

【讨论】:

  • 这不是我想要的。 anotherUser 是否在您的内部和外部查询中引用相同的变量?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-30
  • 2022-08-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多