为什么过滤器在这种情况下不起作用?
Why filter doesn't work in this context?
这是查询和结果:
如您所见,我过滤掉了 bo:ania
的用户,为什么他们仍然出现?
但是,如果我删除 widecard 并且 select 只有用户 ?user
,bo:ania
不会出现
我没有提供最小数据示例,因为这是关于过滤器和通配符如何工作的问题,而不是关于从数据集中提取某些数据的问题。但是,如果您需要最少的数据,我很乐意提供。
?specificUser
通过您的 VALUES
语句绑定到 bo:ania
。 ?user
是由其他三重模式定义的完全不同的绑定。你的 FILTER
说要过滤掉 ?user = bo:ania
的结果,它似乎是正确的,看到 ?user
在任何结果中都没有绑定到 bo:ania
。
顺便说一句,除非您想检查多个值,否则在这种情况下不需要使用 VALUES
。如果它只是一个值,那么以下将起作用,并且您不会想知道为什么结果集中包含对 bo:ania
的绑定:
SELECT *
WHERE {
?user a rs:user .
?user rs:hasRated ?rating .
?rating rs:hasRatingDate ?ratngDate .
FILTER (?ratingDates >= (now() -"P10000F"^^xsd:duration) )
FILTER (?user != bo:ania)
}
这是查询和结果:
如您所见,我过滤掉了 bo:ania
的用户,为什么他们仍然出现?
但是,如果我删除 widecard 并且 select 只有用户 ?user
,bo:ania
不会出现
我没有提供最小数据示例,因为这是关于过滤器和通配符如何工作的问题,而不是关于从数据集中提取某些数据的问题。但是,如果您需要最少的数据,我很乐意提供。
?specificUser
通过您的 VALUES
语句绑定到 bo:ania
。 ?user
是由其他三重模式定义的完全不同的绑定。你的 FILTER
说要过滤掉 ?user = bo:ania
的结果,它似乎是正确的,看到 ?user
在任何结果中都没有绑定到 bo:ania
。
顺便说一句,除非您想检查多个值,否则在这种情况下不需要使用 VALUES
。如果它只是一个值,那么以下将起作用,并且您不会想知道为什么结果集中包含对 bo:ania
的绑定:
SELECT *
WHERE {
?user a rs:user .
?user rs:hasRated ?rating .
?rating rs:hasRatingDate ?ratngDate .
FILTER (?ratingDates >= (now() -"P10000F"^^xsd:duration) )
FILTER (?user != bo:ania)
}