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

Lin*_*e81 9 sparql

嗨我有这样的查询:

SELECT ?a ?b
WHERE
{
?c property:name "myThing"@en
?c property:firstValue ?b
?c property:secondValue ?a
}
Run Code Online (Sandbox Code Playgroud)

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

SELECT ?a/?b
WHERE
{
?c property:name "myThing"@en
?c property:firstValue ?b
?c property:secondValue ?a
}
Run Code Online (Sandbox Code Playgroud)

谢谢

Rob*_*obV 12

在SPARQL 1.1中,您可以使用Project表达式执行此操作:

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
}
Run Code Online (Sandbox Code Playgroud)

你可以选择使用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
}
Run Code Online (Sandbox Code Playgroud)


Guy*_*ham 5

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

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

要么

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