У меня есть запрос 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, и никто не отфильтровывается.
Проблема в том, что я не уверен, как отлаживать это. Я знаю возвращаемое значение приложения: miles-between, так как это пользовательская функция С#, с которой я могу установить точку останова и видеть, что это правильно возвращает двойное значение.
Однако я не знаю, что xsd: float() и STRBEFORE возвращаются. Есть ли способ привязать возвращаемое значение к переменной и выводить из SELECT?
Я попытался использовать ExplainQueryProcessor, но он не дает мне достаточной информации, такой как возвращаемые значения, которые я хочу знать.
Однако я не знаю, что 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 )
}