2015年4月6日月曜日

Unsupported case in CONVERT エラー

とあるSPARQL文のSELECTする項目に、

abs(xsd:float(?lat) * 1000) AS ?lat 

という記述をしていたら、
うまく動いていたんですが、
ある日突然、
というかSELECT対象のデータを更新したら、
エラーが出るようになったんです。

どうやら、?latに空のデータが入っていると、

xsd:float(?lat)

がコケるみたいで、以下のエラーが出ます。

Virtuoso 22023 Error SR066: Unsupported case in CONVERT (incomplete RDF box -> REAL)

不完全なRDFボックスからREALへの変換はサポートしてません的な・・・ちょっと意味不明です。

対策としては、対象データを文字列に変換する関数str()を挟むようにして、
以下のようにすると

xsd:float(str(?lat))

エラーは出なくなりました。

FILTERの条件のときもstr()必要ですし、str()って何かと便利なんですね。

以上、よろしくお願いいたします。