使用 SPARQL 获得有限的答案
Getting limited answers using SPARQL
我有一个 RDF 商店,其中包含人员列表以及他们 cities/states 居住的地方:
:P1 :hasLivedIn :NewYork
:P2 :hasLivedIn :NewYork
:P2 :hasLivedIn :California
现在,我想使用 SPARQL 来列出所有居住在特定城市(例如纽约)的人
当我使用这个时:
select * where { ?p :hasLivedIn :NewYork }
给了我 :P1 和 :P2 但我只想要 :P1 因为只有 :P1 住在 only :NewYork.
我无法使用过滤器将城市列入黑名单,因为城市和州太多了。有没有办法在 SPARQL 中执行此操作?
谢谢!
你大概可以数出?p
住过多少个地方,只有住过一个地方才输出?p
,即:NewYork
SELECT ?p WHERE {
?p :hasLivedIn :NewYork .
?p :hasLivedIn ?anywhere
}
GROUP BY ?p
HAVING (COUNT(?anywhere) == 1)
GROUP_HAVING
回答的很好
也可以用NOT EXISTS
来完成
SELECT ?p WHERE {
?p :hasLivedIn :NewYork .
FILTER NOT EXISTS
{ ?p :hasLivedIn ?anywhere. FILTER(?anywhere != :NewYork) }
}
@YMomb 提供的另一种查询使用否定 SPARQL 1.1:
SELECT ?p
WHERE
{ ?p :hasLivedIn :NewYork
FILTER NOT EXISTS { ?p :hasLivedIn ?place
FILTER ( ?place != :NewYork )
}
}
我有一个 RDF 商店,其中包含人员列表以及他们 cities/states 居住的地方:
:P1 :hasLivedIn :NewYork
:P2 :hasLivedIn :NewYork
:P2 :hasLivedIn :California
现在,我想使用 SPARQL 来列出所有居住在特定城市(例如纽约)的人
当我使用这个时:
select * where { ?p :hasLivedIn :NewYork }
给了我 :P1 和 :P2 但我只想要 :P1 因为只有 :P1 住在 only :NewYork.
我无法使用过滤器将城市列入黑名单,因为城市和州太多了。有没有办法在 SPARQL 中执行此操作?
谢谢!
你大概可以数出?p
住过多少个地方,只有住过一个地方才输出?p
,即:NewYork
SELECT ?p WHERE {
?p :hasLivedIn :NewYork .
?p :hasLivedIn ?anywhere
}
GROUP BY ?p
HAVING (COUNT(?anywhere) == 1)
GROUP_HAVING
回答的很好
也可以用NOT EXISTS
SELECT ?p WHERE {
?p :hasLivedIn :NewYork .
FILTER NOT EXISTS
{ ?p :hasLivedIn ?anywhere. FILTER(?anywhere != :NewYork) }
}
@YMomb 提供的另一种查询使用否定 SPARQL 1.1:
SELECT ?p
WHERE
{ ?p :hasLivedIn :NewYork
FILTER NOT EXISTS { ?p :hasLivedIn ?place
FILTER ( ?place != :NewYork )
}
}