2016-01-17 90 views
1

我試着在SPARQL以下查詢:過濾器不存在產生混淆的結果

Select distinct (count(?jel) AS ?jelCount) 

Where { 

    ?jel a skos:Concept . 
    ?jel skos:prefLabel ?label . 


    Filter not Exists { 
    ?jel skos:narrower ?narrower . 
    ?jel skos:notation ?notation . 
    }    
} 

但是它不給我我想要的答案,它實際上過濾什麼。

但是如果我寫:

Select distinct (count(?jel) AS ?jelCount) 

Where { 

    ?jel a skos:Concept . 
    ?jel skos:prefLabel ?label . 


Filter not Exists { 
    ?jel skos:narrower ?narrower . 
    } 

    Filter not Exists { 
    ?jel skos:notation ?notation . 
    } 

} 

然後我得到我想要的答案。

我無法解釋爲什麼?有人能給我啓發這個嗎?

回答

1

在SPARQL中,每個模式的整體(由{ }表示)必須匹配以產生效果。

所以你的第一個查詢請求,其中skos:narrowerskos:notation三元兩,因爲它們是在同一個FILTER NOT EXISTS模式沒有爲某個項目存在項目。據推測,在你的數據中沒有任何項目都存在這些三元組,因此沒有任何內容被過濾掉。

然而,在你的第二個查詢你問其中skos:narrowerskos:notation要麼不存在(因爲每個是在一個單獨的FILTER NOT EXISTS模式)項目。由於您的數據中的某些項目有一些這樣的三元組,所以有些內容會被過濾掉。

+0

微妙但「邏輯」,完全「邏輯」:)!謝謝 – MaatDeamon