对于给定的SPARQL查询,我想知道如何显式地将对象匹配到模式,即它应该有一组给定的属性值,并且只有这些值。考虑下面的查询:'
SELECT DISTINCT ?person ?personLabel
WHERE {
#P735 given name , wd:Q4844560 Sebastian ,wd:Q11122389 Johann
?person wdt:P735 wd:Q4844560,wd:Q11122389 .
SERVICE wikibase:label {bd:serviceParam wikibase:language "en"}
}
'该查询匹配任何给定名字为Johann和给定名字为Sebastian的主题,这也匹配具有更多给定名字的主题,例如Johann Sebastian Gottfried。我想知道如何过滤查询,以返回那些显式具有给定名称Johann和Sebastian而没有其他名称的查询。
我已经尝试使用各种子查询和过滤器,但不占上风。
您可以使用FILTER NOT EXISTS
来排除除指定的两个名字之外具有任何其他给定名称的人员:
?person wdt:P735 wd:Q4844560 , wd:Q11122389 .
FILTER NOT EXISTS {
?person wdt:P735 ?givenName .
FILTER( ?givenName != wd:Q4844560 && ?givenName != wd:Q11122389 ) .
}