2016-04-19 2 views
2

Это запрос и результат:Почему фильтр не работает в этом контексте?

enter image description here

Как вы видите, я отфильтровывать пользователей, которые bo:ania, так почему же они до сих пор появляются?

Однако, если я удалить widecard и выбрать только пользователям ?user, bo:ania не появляется

enter image description here

Я не обеспечивал минимальный пример данных, так как это вопрос о том, как фильтр и подстановочная работа, а не проблема с извлечением некоторых данных из набора данных. Однако, если вам нужны минимальные данные, я более чем счастлив предоставить их.

+0

вне темы: Я думаю, что вы имеете в виду подстановочные знаки? – AKSW

ответ

5

?specificUser обязательство bo:ania от вашего VALUES заявление. ?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) 
} 
+0

Даже если есть только одно значение, ** значения ** Может уменьшить один источник опечаток, предоставив IRI только один раз, и сделать проекцию проще, поскольку значение привязано к переменной. –

+0

Я не вижу ничего из этого запроса (?). В общем случае я не вижу разницы между «VALUES» с одной привязкой и «BIND», кроме предпочтений пользователя. – scotthenninger

+0

@JoshuaTaylor yes values ​​save me tones of typos, я использую его всегда, вы мне это посоветовали, спасибо большое –

Смежные вопросы