SPARQL中的累积和
我们是否有办法在SPARQL中进行不减少的累积和 比如说,SPARQL中的累积和,sparql,Sparql,我们是否有办法在SPARQL中进行不减少的累积和 比如说, SELECT ?p WHERE { VALUES ?p { 1 1 2 } } ORDER BY ?p 将导致1 2 4,-而不是4。如果您想在缺少RDF数据的情况下计算累计总和(“来自DUAL”),则不可能: 在值中 值本身就是 但是,如果RDF数据中存在值,则可以计算它们的累积和 考虑下面的例子 输入数据 插入数据{ ex:st ex:order“1”^^xsd:integer; 例如:值“1”^^xsd:integer
SELECT ?p WHERE {
VALUES ?p { 1 1 2 }
}
ORDER BY ?p
将导致1 2 4,-而不是4。如果您想在缺少RDF数据的情况下计算累计总和(“
来自DUAL
”),则不可能:
- 在
值中
值本身就是
但是,如果RDF数据中存在值,则可以计算它们的累积和 考虑下面的例子 输入数据
插入数据{
ex:st ex:order“1”^^xsd:integer;
例如:值“1”^^xsd:integer。
ex:nd ex:order“2”^^xsd:integer;
例如:值“1”^^xsd:integer。
ex:rd-ex:order“3”^^xsd:integer;
例如:值“2”^^xsd:integer。
}
质疑
选择
(样品(?v1)为?v)
(总和(?v2)等于?acc)
在哪里{
?e1 ex:订单?o1;ex:值?v1。
?e2 ex:订单?o2;ex:价值?v2。
过滤器(?o1>=?o2)
}按ASC的e1顺序分组(样本(?o1))
输出
上面示例中的值是显式排序的,但是当值是隐式排序的(如ABC分析中)时,编写查询并不困难
让我们考虑另一个例子,它使用.< /P> 输入数据
插入数据{
ex:数据ex:值(1 2)
}
质疑
选择
(样本(?v2)为?v)
(总和(?v1)等于?acc)
何处{
ex:数据ex:值/rdf:rest*?e1。
?e1 rdf:第一个?v1。
e1 rdf:其余*?e2。
?e2 rdf:第一个?v2。
}分组依据(?e2)顺序依据(计数(?e1))
输出
如果我没有完全错的话,那在SPARQL查询中是不可能的。在某种程度上,我认为客户端代码是唯一的方法,因为SPARQL只是RDF数据的查询语言,而不是类似R的语言。
v acc
------------------- ------------------
"1"^^xsd:integer "1"^^xsd:integer
"1"^^xsd:integer "2"^^xsd:integer
"2"^^xsd:integer "4"^^xsd:integer
v acc
------------------- ------------------
"1"^^xsd:integer "1"^^xsd:integer
"1"^^xsd:integer "2"^^xsd:integer
"2"^^xsd:integer "4"^^xsd:integer