SPARQL获取交叉集

时间:2017-02-28 11:17:01

标签: 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)
}

但是,我没有收到任何结果。

如果我这样做:

select ?s 
{
   ?s :hasCity ?city.
   FILTER (?city =:City1)
}

我回来了A,K,Q,M,如果我这样做的话:

select ?s 
{
   ?s :hasCity ?city.
   FILTER (?city =:City2)
}

我回来了A,K,L

所以当我使用&&操作员,我应该回到A& K,对吧?我错过了什么吗?

1 个答案:

答案 0 :(得分:3)

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

SELECT ?s {?s :hasCity :City1, :City2}

使用:hasSubject,如果您想保留单行查询,只需要询问属性的反转:

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

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