SPARQL获取相交集

SPARQL获取相交集,sparql,rdf,semantic-web,owl,ontology,Sparql,Rdf,Semantic Web,Owl,Ontology,一、下列数据: :A :hasCity City1 :A :hasCity City2 :A :hasCity City3 :A :hasCity City4 :K :hasCity City1 :K :hasCity City2 我试图找到所有包含城市1和城市2的主题,因此我编写了查询: select ?s { ?s :hasCity ?city. FILTER (?city =:City1 && ?city=:City2) } 但是,我没有得到任何结果

一、下列数据:

:A :hasCity City1
:A :hasCity City2
:A :hasCity City3
:A :hasCity City4

:K :hasCity City1
:K :hasCity City2

我试图找到所有包含城市1和城市2的主题,因此我编写了查询:

select ?s 
{
   ?s :hasCity ?city.
   FILTER (?city =:City1 && ?city=:City2)
}
但是,我没有得到任何结果

如果我这样做:

select ?s 
{
   ?s :hasCity ?city.
   FILTER (?city =:City1)
}
select ?s 
{
   ?s :hasCity ?city.
   FILTER (?city =:City2)
}
我得到A,K,Q,M,如果我这样做:

select ?s 
{
   ?s :hasCity ?city.
   FILTER (?city =:City1)
}
select ?s 
{
   ?s :hasCity ?city.
   FILTER (?city =:City2)
}
我回来了,K,L


所以当我使用&&运算符时,我应该返回A&K,对吗?我遗漏了什么吗?

您需要做的是要求所有主体共享同一组对象,在同一属性上使用三重模式。您将得到一个非常简单的查询:

SELECT ?s {?s :hasCity :City1, :City2}
使用
:hasSubject
,如果要保留单行查询,只需请求属性的倒数:

SELECT ?s { ?s ^:hasSubject :City1, :City2}

使用
=
时,您需要确保将苹果与苹果进行比较。例如
?a=?b
,或
str(?a)=str()

您需要做的是在同一属性上使用三重模式,请求共享同一组对象的所有主题。您将得到一个非常简单的查询:

SELECT ?s {?s :hasCity :City1, :City2}
使用
:hasSubject
,如果要保留单行查询,只需请求属性的倒数:

SELECT ?s { ?s ^:hasSubject :City1, :City2}

使用
=
时,您需要确保将苹果与苹果进行比较。例如
?a=?b
,或
str(?a)=str()

谢谢!实际上我刚刚意识到谓词的方向是相反的。实际上是:
:City1:hasSubject:A
。那我该怎么办?还有,为什么你会说“&&”不起作用呢?确实有用。如果你也能解释一下为什么&&不能以同样的方式工作,那就太好了。谢谢!实际上我刚刚意识到谓词的方向是相反的。实际上是:
:City1:hasSubject:A
。那我该怎么办?还有,为什么你会说“&&”不起作用呢?确实有用。如果你能解释一下为什么&&不能以同样的方式工作,那就太好了。“所以当我使用&&运算符时,我应该返回A&K,对吗?”-不,上面说“获取一个城市值,其中的值是1和2”。因此没有结果。。。我不确定我是否理解它。按照你所说的,A&K的城市值为1&2,所以它们应该被返回,对吗?不,城市不是城市1就是城市2。因此,过滤器总是出现故障。考虑一下过滤器的操作可能会有所帮助:模式
?s:hasCity?city
会产生一系列绑定。过滤器在第二个值为1和2的位置保留绑定-这永远不会发生。那有用吗?嗯。。。。有些原因我似乎仍然无法理解。如果你给我一个例子,说明&&在哪里起作用,我也许能看到对比。因为到目前为止您所说的一切以及sparql w3页面上的示例似乎都指向它对我的示例起作用。?s=:A&&?city=:City1会发现一些东西“所以当我使用&&运算符时,我应该返回A&K,对吗?”-不,这表示“获取一个城市值,其中的值为1和2”。因此没有结果。。。我不确定我是否理解它。按照你所说的,A&K的城市值为1&2,所以它们应该被返回,对吗?不,城市不是城市1就是城市2。因此,过滤器总是出现故障。考虑一下过滤器的操作可能会有所帮助:模式
?s:hasCity?city
会产生一系列绑定。过滤器在第二个值为1和2的位置保留绑定-这永远不会发生。那有用吗?嗯。。。。有些原因我似乎仍然无法理解。如果你给我一个例子,说明&&在哪里起作用,我也许能看到对比。因为到目前为止您所说的一切以及sparql w3页面上的示例似乎都表明它对我的示例有效。?s=:A&&?city=:City1会找到一些东西