次のようなフィルタを使用した SPARQL クエリがあります。
SELECT * FROM
{
...
data:person_1 app:maxDistance ?value
data:person_1 app:coordinates ?coord1
data:person_2 app:coordinates ?coord2
FILTER (
xsd:float(STRBEFORE(?value, " miles"))
>=
app:miles-between(?coord1, ?coord2)
)
}
?value
これは、「x マイル」という形式のリテラルです (x は数値です)。
そのため、person_1 の maxDistance よりも遠くにいる人を除外したいのですが、フィルターは常に false を返し、誰も除外されないようです。
問題は、これをデバッグする方法がわからないことです。app:miles-between の戻り値は知っています。これは、ブレークポイントを指定して double 値を正しく返すことを確認できるカスタム C# 関数であるためです。
ただし、 xsd:float() と STRBEFORE が何を返すかはわかりません。戻り値を変数にバインドして SELECT から出力する方法はありますか?
ExplainQueryProcessorを使用してみましたが、知りたい戻り値など、十分な情報が得られません。