这是查询和结果:
如您所见,我正在过滤掉bo:ania
的用户,那么为什么它们仍然出现?
但是,如果删除宽卡并仅选择用户?user
,则不会出现bo:ania
我没有提供最低限度的数据示例,因为这是关于过滤器和通配符如何工作的问题,而不是关于从数据集中提取某些数据的问题。但是,如果您需要最低限度的数据,我很乐意提供。
最佳答案
?specificUser
语句通过bo:ania
绑定(bind)了VALUES
。 ?user
是由其他三元模式定义的完全不同的绑定(bind)。您的FILTER
表示要在?user = bo:ania
处过滤出结果,并且看起来正确地执行了此操作,因为?user
在任何结果中均未绑定(bind)到bo:ania
。
顺便说一句,除非您要检查多个值,否则在这种情况下无需使用VALUES
。如果只是一个值,那么下面的方法将起作用,而您不知道为什么对bo:ania
的绑定(bind)包含在结果集中:
SELECT *
WHERE {
?user a rs:user .
?user rs:hasRated ?rating .
?rating rs:hasRatingDate ?ratngDate .
FILTER (?ratingDates >= (now() -"P10000F"^^xsd:duration) )
FILTER (?user != bo:ania)
}