Sparql:变量之间的算术运算符?

时间:2011-02-18 14:42:10

标签: sparql

您好我有这样的查询:

SELECT ?a ?b
WHERE
{
?c property:name "myThing"@en
?c property:firstValue ?b
?c property:secondValue ?a
}

如何划分第一个nuber和第二个?想要这样的事情:

SELECT ?a/?b
WHERE
{
?c property:name "myThing"@en
?c property:firstValue ?b
?c property:secondValue ?a
}

谢谢

2 个答案:

答案 0 :(得分:12)

在SPARQL 1.1中,您可以使用类似的项目表达式来执行此操作:

PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
SELECT (xsd:float(?a)/xsd:float(?b) AS ?result)
WHERE
{
?c property:name "myThing"@en
?c property:firstValue ?b
?c property:secondValue ?a
}

您可以使用xsd:double(?var)强制转换为double,xsd:integer(?var)转换为整数,xsd:decimal(?var)转换为小数。

请注意,SPARQL指定了类型提升规则,例如:

  • 整数/整数=十进制
  • float / double = double

如果您确实需要保证数据类型的结果,则可以转换整个除法表达式,例如

PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
SELECT (xsd:double(xsd:float(?a)/xsd:float(?b)) AS ?result)
WHERE
{
?c property:name "myThing"@en
?c property:firstValue ?b
?c property:secondValue ?a
}

答案 1 :(得分:5)

有两种方法可以实现这一目标:

SELECT ((?a/?b) AS ?result) WHERE {
    ?c property:name "myThing"@en .
    ?c property:firstValue ?b .
    ?c property:secondValue ?a .
}

SELECT ?result WHERE {
    BIND((?a/?b) AS ?result) .
    ?c property:name "myThing"@en .
    ?c property:firstValue ?b .
    ?c property:secondValue ?a .
}