Rdf Sparql查询:查找具有相同属性对象的对象

Rdf Sparql查询:查找具有相同属性对象的对象,rdf,sparql,Rdf,Sparql,假设我们有一个如下所示的数据集: :个人:wantsCD:cd1;:wantsCD:cd2。 :storeA:sellsCD:cd1;sellsCD:cd2;sellsCD:cd3。 :storeB:sellsCD:cd1;sellsCD:cd10;sellsCD:cd100。 我有兴趣找到出售所有CD:person想要的商店,即(:storeA)。是否可以通过SPARQL查询获得此结果?当:person想要的CD数量在运行时未知时,查询也应该起作用。我试过: 选择不同的存储cd 何处{ :人

假设我们有一个如下所示的数据集:

:个人:wantsCD:cd1;:wantsCD:cd2。
:storeA:sellsCD:cd1;sellsCD:cd2;sellsCD:cd3。
:storeB:sellsCD:cd1;sellsCD:cd10;sellsCD:cd100。
我有兴趣找到出售所有CD
:person
想要的商店,即(
:storeA
)。是否可以通过SPARQL查询获得此结果?当
:person
想要的CD数量在运行时未知时,查询也应该起作用。我试过:

选择不同的存储cd
何处{
:人:wantsCD?cd。
商店:sellsCD?cd。
}
但这会同时返回
:storeA
:storeB
,因为
:storeB
也销售
:cd1

解决方案 我有兴趣找到出售所有CD的商店:person 需要,即(:storeA)。是否可以使用SPARQL获得此结果 询问

是的,诀窍是做一些匹配所有商店的事情,然后过滤掉那些有个人想要的CD但商店没有的CD:

select?存储在哪里{
#--匹配所有销售任何CD的商店。
?门店:sellsCD[]
#--确保没有此人想要的CD
#--这家商店不卖。
筛选器不存在{
:person:wantsCD?cd#——person不想要任何cd
筛选器不存在{
商店:卖cd?cd?那家商店不卖。
}
}
}
笔记 非常感谢您提供的示例数据。除了<代码>之外,这可能会让你的生活更轻松一点您在中使用的符号,例如:

:person :wantsCD :cd1; :wantsCD :cd2
对于同一属性的多个对象,还有一个
符号。您可以将该行写成:

:person :wantsCD :cd1, :cd2