2014-06-05 191 views
6

我正在使用Jena的SPARQL引擎並試圖編寫查詢以過濾日期範圍,因爲我需要在固定日期後查找屬性的值。在SPARQL中按日期範圍過濾

我的日期屬性是按以下格式:

Fri May 23 10:20:13 IST 2014 

我怎樣寫一個SPARQL查詢來獲取比這更高的其他屬性的日期?

回答

13

由於您需要解析和解釋日期時間字符串,所以使用該格式的數據無法在ARQ的某個範圍上過濾,因爲ARQ(專供高級用戶使用)不會自定義extension function

您應該做的是將您的數據轉換爲所有SPARQL實施都需要支持的標準日期時間格式xsd:dateTime。有關此格式的詳細信息,請參閱XML Schema Part 2: Datatypes規範。

你的具體例子日期將翻譯如下:

2014-05-23T10:20:13+05:30 

而且你必須確保你聲明它是一個類型文字xsd:dateTime型的,當你在數據和查詢使用。例如,在可讀Turtle RDF語法:

@prefix xsd: <http://www.w3.org/2001/XMLSchema#> . 
@prefix : <http://example.org> . 

:subject :date "2014-05-23T10:20:13+05:30"^^xsd:dateTime . 

然後,您可以編寫一個SPARQL查詢的日期範圍過濾器,像這樣:

PREFIX xsd: <http://www.w3.org/2001/XMLSchema#> 
PREFIX : <http://example.org> 

SELECT * 
WHERE 
{ 
    ?s :date ?date . 
    FILTER (?date > "2014-05-23T10:20:13+05:30"^^xsd:dateTime) 
} 

此查找所有記錄,其中?date是給定的日期之後

+0

並假設我只想將範圍應用於字符串類型爲string的屬性的過濾器中。然後? – cooljohny

+1

評論是澄清具體問題,如果你有一個單獨的問題,那麼你應該這樣問。如果還沒有,請閱讀SPARQL規範中的[Expressions and Testing Values](http://www.w3.org/TR/sparql11-query/#expressions) – RobV

+0

當我編寫上述查詢時,它會給出錯誤:Unresolved前綴名稱:xsd:dateTime,當我不指定它再給出錯誤:數據類型格式異常:「2014-06-08T14:26:39 + 0530」^^ xsd:dateTime。我該怎麼辦? – cooljohny