1
SPARQLの累積合計を減らさない方法がありますか?SPARQLの累積合計
例えば、
SELECT ?p WHERE {
VALUES ?p { 1 1 2 }
}
ORDER BY ?p
は、1〜2 4をもたらす - なくSPARQLは、RDFクエリ言語である4
SPARQLの累積合計を減らさない方法がありますか?SPARQLの累積合計
例えば、
SELECT ?p WHERE {
VALUES ?p { 1 1 2 }
}
ORDER BY ?p
は、1〜2 4をもたらす - なくSPARQLは、RDFクエリ言語である4
。これらの値がRDFデータで提示される場合、それらの累積合計を計算することは可能です。
次の例を考えます。
入力データ
INSERT DATA {
ex:st ex:order "1"^^xsd:integer ;
ex:value "1"^^xsd:integer .
ex:nd ex:order "2"^^xsd:integer ;
ex:value "1"^^xsd:integer .
ex:rd ex:order "3"^^xsd:integer ;
ex:value "2"^^xsd:integer .
}
クエリ
SELECT
(SAMPLE(?v1) AS ?v)
(SUM(?v2) AS ?acc)
WHERE {
?e1 ex:order ?o1 ; ex:value ?v1 .
?e2 ex:order ?o2 ; ex:value ?v2 .
FILTER (?o1 >= ?o2)
} GROUP BY ?e1 ORDER BY ASC(SAMPLE(?o1))
出力
v acc
------------------- ------------------
"1"^^xsd:integer "1"^^xsd:integer
"1"^^xsd:integer "2"^^xsd:integer
"2"^^xsd:integer "4"^^xsd:integer
例えばABOの値(ABC分析のように)暗黙的に値が順序付けられている場合には、クエリを書くことはあまり難しくありません。
Turtle list syntaxを使用する別の例を考えてみましょう。
入力データ
INSERT DATA {
ex:data ex:values (1 1 2)
}
クエリ
SELECT
(SAMPLE(?v2) AS ?v)
(SUM(?v1) AS ?acc)
WHERE {
ex:data ex:values/rdf:rest* ?e1 .
?e1 rdf:first ?v1 .
?e1 rdf:rest* ?e2 .
?e2 rdf:first ?v2 .
} GROUP BY (?e2) ORDER BY(COUNT(?e1))
出力
v acc
------------------- ------------------
"1"^^xsd:integer "1"^^xsd:integer
"1"^^xsd:integer "2"^^xsd:integer
"2"^^xsd:integer "4"^^xsd:integer
あなたはRDFデータの不在に蓄積された合計を計算する(いわば、FROM DUAL
)したい場合は、私は怖い、それは不可能です:
VALUES
でnot allowed、VALUES
はunorderedです。
私が間違っているとは限りませんが、それはSPARQLクエリでは不可能です。私の視点から見ると、クライアント側のコードはSPARQLがRのようなRDFデータのクエリ言語に過ぎないため、唯一の方法です。 – AKSW