8

次の 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 の結果が返されます (この時間領域に一致する観測がある場合)。

?time が varchar/text/String データ型であるため、比較を実行できない可能性はありますか? もしそうなら、SPARQL内で変換を行うことは可能ですか?

4

2 に答える 2

24

これは、一致する時間値の桁数が同じである場合にのみ機能します。これは、強力な比較を行うためです。より良い修正は次のようになります。

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

これにより、?timeの値が整数にキャストされ、数値比較が実行されます。

于 2011-02-07T15:54:41.193 に答える
2

これに対する解決策は、単にタイムスタンプを引用符で囲むことでした。

于 2010-12-14T14:14:00.200 に答える