2014-11-05 80 views
1

我有一個簡單的查詢,但結果很簡單,但當我嘗試在日期上應用過濾器時,我沒有得到任何結果。Protégé日期過濾器不工作

初始查詢和結果:

SELECT DISTINCT ?projet ?date 
    WHERE { teluq:Gilbert_Paquette foaf:pastProject ?projet. 
    ?gilbert foaf:familyName ?paquette. 
    ?projet db:projectEndDate ?date. 
} 

結果的形式是: 「2012-06-30」 ^^ < http://www.w3.org/2001/XMLSchema#date>

,但是當我加我的過濾器,我什麼也沒得到。

SELECT DISTINCT ?projet ?date 
    WHERE { teluq:Gilbert_Paquette foaf:pastProject ?projet. 
    ?gilbert foaf:familyName ?paquette. 
    ?projet db:projectEndDate ?date. 
    FILTER (?date < "2014-11-04"^^xsd:date) 
} 

我在導入的烏龜文件上使用Protégé。

我錯過了什麼嗎? 感謝

+0

這將有助於如果您可以提供樣本數據,以便我們可以嘗試重現數據。查詢是否使用Protege以外的SPARQL引擎進行工作? – 2014-11-05 13:10:49

+0

我認爲'''SPARQL操作符是爲'xsd:dateTime's定義的,但不是'xsd:date's。 – 2014-11-05 13:11:59

回答

2

這工作:

PREFIX teluq: <http://exemple.teluq.ca/ressources/> 
PREFIX db: <http://dbpedia.org/ontology/> 
PREFIX foaf: <http://xmlns.com/foaf/0.1/> 

SELECT DISTINCT ?collab ?projet ?date 
WHERE { teluq:Gilbert_Paquette foaf:pastProject ?projet. 
?gilbert foaf:familyName ?paquette. 
?projet db:projectEndDate ?date. 
?collab foaf:pastProject ?projet. 
FILTER (?date < "2014-11-08"^^xsd:date) 
} 
ORDER BY ?projet 

但您的幫助感謝

1

的SPARQL 1.1標準規定了<運營商是如何成爲SPARQL(模運算符擴展)定義 ,而它定義了XSD行爲§ 17.3 Operator Mapping:日期時間,它沒有指定有關XSD東西:紅棗,所以它很可能只是過濾器表達式返回false。然而,XSD:日期應該使用他們的詞彙形式相媲美,所以你應該能夠做到

#-- when ?date is an xsd:date, compare its lexical form with "2014-11-04". 
filter (datatype(?date) = xsd:date && str(?date) < "2014-11-04") 
+0

感謝您的輸入,但最終它的工作原理......無法解釋。 – MusicAndCode 2014-11-08 18:17:11

+1

@MusicAndCode您應該將您的工作查詢發佈爲答案,然後將其標記爲已接受。 – 2014-11-08 18:53:27

+0

這實際上是一個非常有效的答案。根據我的經驗,在SPARQL中'xsd:date'在過濾時往往具有不可預知的行爲。 – CptNemo 2018-01-21 01:42:50