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 的返回值,因为它是自定义的 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 回答