1

次のようなフィルタを使用した 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を使用してみましたが、知りたい戻り値など、十分な情報が得られません。

4

1 に答える 1

2

ただし、 xsd:float() と STRBEFORE が何を返すかはわかりません。戻り値を変数にバインドして SELECT から出力する方法はありますか?

BINDが必要です:

select ?floatValue ?milesBetween where {
  …
  BIND( xsd:float(STRBEFORE(?value, " miles")) as ?floatValue )
  BIND( app:miles-between(?coord1, ?coord2) as ?milesBetween )
}
于 2014-08-18T20:02:01.417 に答える