这是查询和结果:

sparql - 为什么过滤器在这种情况下不起作用?-LMLPHP

如您所见,我正在过滤掉bo:ania的用户,那么为什么它们仍然出现?

但是,如果删除宽卡并仅选择用户?user,则不会出现bo:ania
sparql - 为什么过滤器在这种情况下不起作用?-LMLPHP

我没有提供最低限度的数据示例,因为这是关于过滤器和通配符如何工作的问题,而不是关于从数据集中提取某些数据的问题。但是,如果您需要最低限度的数据,我很乐意提供。

最佳答案

?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)
}

08-25 09:23