2016-04-19 162 views
2

這是查詢和結果:爲什麼過濾器在這種情況下不起作用?

enter image description here

正如你看到的,我剔除這些bo:ania的用戶,那麼爲什麼他們仍然出現?

但是,如果我刪除widecard並選擇剛纔的用戶?userbo:ania不會出現

enter image description here

我沒有提供一個最小數據的例子,因爲這是一個有關如何過濾和問題通配符工作,而不是從數據集中提取某些數據的問題。但是,如果您需要最低限度的數據,我非常樂意提供。

+0

題外話:我想你指的通配符? – AKSW

回答

5

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

即使只有一個值可以使用,**值**可以通過讓IRI僅出現一次來減少一個拼寫錯誤來源,並且可以使投影更容易,因爲該值綁定到變量。 –

+0

我沒有在上面的查詢(?)中看到任何內容在一般情況下,我沒有看到'VALUES'與一個綁定和'BIND'之間的區別,而不是用戶首選項。 – scotthenninger

+0

@JoshuaTaylor是值得爲我省去拼寫錯誤的語氣,我總是使用它,你對我說過,非常感謝 –

相關問題