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

我们是否有办法在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。
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