///|
// Research aggregation and derived data
fn main raise {
let data = @q.Dataset::from_turtle(
"@prefix e: .\n" +
"e:o1 e:site \"north\" .\ne:o1 e:value 10 .\n" +
"e:o2 e:site \"north\" .\ne:o2 e:value 20 .\n" +
"e:o3 e:site \"south\" .\ne:o3 e:value 9 .\n",
)
let result = @q.prepare(
"PREFIX e: SELECT ?site (COUNT(*) AS ?count) " +
"(AVG(?value) AS ?mean) {?obs e:site ?site; e:value ?value} " +
"GROUP BY ?site HAVING(COUNT(*)>=2)",
).execute(data)
assert_eq(result.rows().length(), 1)
assert_eq(result.rows()[0].get("mean").unwrap().lexical(), "15.0")
let view = @q.prepare(
"PREFIX e: CONSTRUCT {?obs e:review \"high\"} " +
"WHERE {?obs e:value ?v FILTER(?v>=15)}",
).execute(data)
assert_eq(view.graph().length(), 1)
println(result.to_tsv())
println(view.to_ntriples())
}