2010-12-14 123 views
4

我有以下SPARQL查詢:SPARQL類型轉換?

PREFIX ssn: <http://purl.oclc.org/NET/ssnx/ssn#> 
PREFIX dtp: <http://dtp-126.sncs.abdn.ac.uk#> 
PREFIX dbp: <http://dbpedia.org/resource/> 
SELECT ?value ?time WHERE {   
    dtp:CD7514 ssn:madeObservation ?observation .  
    ?observation ssn:observedProperty ?property . 
    ?property ssn:hasValue <http://dbpedia.org/resource/Temperature> .   
    ?observation ssn:observationResult ?observationValue .  
    ?observationValue ssn:hasValue ?value .   
    ?observationValue ssn:observationSamplingTime ?time 
    FILTER(?time > 1291908000) 
} 

其中,概括地說,從一個傳感器,DTP選擇所有溫度傳感器觀測:CD7514,並過濾出的值小於給定的時間戳。

然而,增加過濾器限制返回0結果(當有符合此時間區域是觀察!)

是否有可能?時間是一個varchar /文本/字符串數據類型,因此比較可以」不行嗎?如果是這樣,是否可以在SPARQL中進行轉換?

+0

什麼是你的數據圖 - 什麼是''時間'文字的數據類型? SSN本體沒有規定時間表示的特定格式。 – laalto 2010-12-14 13:51:36

回答

1

對此的解決方案僅僅是在時間戳周圍添加引號。

+2

是的,這使得它們成爲字符串而不是'xsd:integer's。字符串文字具有明確的字典排序順序。 – laalto 2010-12-14 15:03:33

14

如果您匹配的時間值具有相同的數字位數,那麼這隻會起作用,因爲它會進行強有力的比較。一個更好的解決將是:

PREFIX xsd: <http://www.w3.org/2001/XMLSchema#> 
... 
FILTER(xsd:integer(?time) > 1291908000) 

這將在時間值轉換爲整數,然後執行它的數值進行比較?