You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jena.apache.org by an...@apache.org on 2016/03/13 18:28:00 UTC
[14/16] jena git commit: Aggregates base URI
"http://jena.apache.org/ARQ/function/aggregate#"
Aggregates base URI "http://jena.apache.org/ARQ/function/aggregate#"
Project: http://git-wip-us.apache.org/repos/asf/jena/repo
Commit: http://git-wip-us.apache.org/repos/asf/jena/commit/9c2fa681
Tree: http://git-wip-us.apache.org/repos/asf/jena/tree/9c2fa681
Diff: http://git-wip-us.apache.org/repos/asf/jena/diff/9c2fa681
Branch: refs/heads/master
Commit: 9c2fa6817b76bb7345b73d69f68d300433ab47a0
Parents: 41f4054
Author: Andy Seaborne <an...@apache.org>
Authored: Sat Mar 12 13:14:08 2016 +0000
Committer: Andy Seaborne <an...@apache.org>
Committed: Sun Mar 13 17:22:25 2016 +0000
----------------------------------------------------------------------
.../main/java/org/apache/jena/query/ARQ.java | 4 +-
.../org/apache/jena/sparql/ARQConstants.java | 3 +
.../expr/aggregate/AggregateRegistry.java | 5 ++
.../aggregate/lib/StandardCustomAggregates.java | 35 ++++-----
.../jena/sparql/function/StandardFunctions.java | 3 -
.../sparql/expr/TestStatisticsAggregates.java | 78 +++++++++++---------
6 files changed, 74 insertions(+), 54 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/jena/blob/9c2fa681/jena-arq/src/main/java/org/apache/jena/query/ARQ.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/query/ARQ.java b/jena-arq/src/main/java/org/apache/jena/query/ARQ.java
index 9391b6b..1842310 100644
--- a/jena-arq/src/main/java/org/apache/jena/query/ARQ.java
+++ b/jena-arq/src/main/java/org/apache/jena/query/ARQ.java
@@ -23,6 +23,7 @@ import org.apache.jena.sparql.SystemARQ ;
import org.apache.jena.sparql.algebra.optimize.TransformOrderByDistinctApplication ;
import org.apache.jena.sparql.core.assembler.AssemblerUtils ;
import org.apache.jena.sparql.engine.http.Service ;
+import org.apache.jena.sparql.expr.aggregate.AggregateRegistry ;
import org.apache.jena.sparql.function.FunctionRegistry ;
import org.apache.jena.sparql.lib.Metadata ;
import org.apache.jena.sparql.mgt.ARQMgt ;
@@ -578,8 +579,9 @@ public class ARQ
// initialization loops with RIOT.init() called directly.
RIOT.register() ;
- // Initialise
+ // Initialise the standard library.
FunctionRegistry.init() ;
+ AggregateRegistry.init() ;
PropertyFunctionRegistry.init() ;
JenaSystem.logLifecycle("ARQ.init - finish") ;
http://git-wip-us.apache.org/repos/asf/jena/blob/9c2fa681/jena-arq/src/main/java/org/apache/jena/sparql/ARQConstants.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/ARQConstants.java b/jena-arq/src/main/java/org/apache/jena/sparql/ARQConstants.java
index d5cf1cc..2fdebe1 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/ARQConstants.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/ARQConstants.java
@@ -69,6 +69,9 @@ public class ARQConstants
/** The ARQ function library URI space */
public static final String ARQFunctionLibraryURI = "http://jena.apache.org/ARQ/function#" ;
+ /** The ARQ aggregate function library URI space */
+ public static final String ARQAggregateLibraryURI = "http://jena.apache.org/ARQ/function/aggregate#" ;
+
/** The ARQ function library URI space - old Jena2 name
* @deprecated Use #ARQFunctionLibraryURI
*/
http://git-wip-us.apache.org/repos/asf/jena/blob/9c2fa681/jena-arq/src/main/java/org/apache/jena/sparql/expr/aggregate/AggregateRegistry.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/expr/aggregate/AggregateRegistry.java b/jena-arq/src/main/java/org/apache/jena/sparql/expr/aggregate/AggregateRegistry.java
index 322a489..0955398 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/expr/aggregate/AggregateRegistry.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/expr/aggregate/AggregateRegistry.java
@@ -22,6 +22,7 @@ import java.util.HashMap ;
import java.util.Map ;
import org.apache.jena.graph.Node ;
+import org.apache.jena.sparql.expr.aggregate.lib.StandardCustomAggregates ;
/** Registry of custom aggregates
* There is only a single global registry of aggregates - it affects parsing
@@ -32,6 +33,10 @@ public class AggregateRegistry {
private static Map<String, AccumulatorFactory> registry = new HashMap<>() ;
private static Map<String, Node> noGroupValues = new HashMap<>() ;
+ public static void init() {
+ StandardCustomAggregates.register();
+ }
+
/**
* Register a custom aggregate, with its associated factory for accumulators.
*/
http://git-wip-us.apache.org/repos/asf/jena/blob/9c2fa681/jena-arq/src/main/java/org/apache/jena/sparql/expr/aggregate/lib/StandardCustomAggregates.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/expr/aggregate/lib/StandardCustomAggregates.java b/jena-arq/src/main/java/org/apache/jena/sparql/expr/aggregate/lib/StandardCustomAggregates.java
index 0a396d4..a581348 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/expr/aggregate/lib/StandardCustomAggregates.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/expr/aggregate/lib/StandardCustomAggregates.java
@@ -29,36 +29,37 @@ import org.apache.jena.sparql.expr.aggregate.AggregateRegistry ;
*/
public class StandardCustomAggregates {
- public static String BASE = ARQConstants.ARQFunctionLibraryURI ;
+ public static String BASE = ARQConstants.ARQAggregateLibraryURI ;
+ public static String BASE2 = ARQConstants.ARQFunctionLibraryURI ;
public static void register() {
- // Non-DISTINCT
+ // The statistics aggregates
AccumulatorFactory f_VarP = (agg, distinct) -> new AccStatVarPopulation(agg.getExpr(), distinct) ;
AccumulatorFactory f_Var = (agg, distinct) -> new AccStatVarSample(agg.getExpr(), distinct) ;
AccumulatorFactory f_StdevP = (agg, distinct) -> new AccStatStdDevPopulation(agg.getExpr(), distinct) ;
AccumulatorFactory f_Stdev = (agg, distinct) -> new AccStatStdDevSample(agg.getExpr(), distinct) ;
-// AggregateRegistry.register(BASE+"stddevp", f_StdevP, null) ; // Common? typo
-// AggregateRegistry.register(BASE+"stddev", f_Stdev, null) ; // Common? typo
- AggregateRegistry.register(BASE+"stdevp", f_StdevP, null) ; // SQL spelling
- AggregateRegistry.register(BASE+"stdev", f_Stdev, null) ; // SQL spelling
+ AggregateRegistry.register(BASE+"stdevp", f_StdevP, null) ;
+ AggregateRegistry.register(BASE+"stdev", f_Stdev, null) ;
+ AggregateRegistry.register(BASE+"varp", f_VarP, null) ;
+ AggregateRegistry.register(BASE+"var", f_Var, null) ;
-// AggregateRegistry.register(BASE+"variancep", f_VarP, null) ; // Longer
-// AggregateRegistry.register(BASE+"variance", f_Var, null) ; // Longer
- AggregateRegistry.register(BASE+"varp", f_VarP, null) ; // SQL spelling
- AggregateRegistry.register(BASE+"var", f_Var, null) ; // SQL spelling
-
- // DISTINCT versions for
- //
+ // Again in the afn@ (not encouraged but easy to do)
+ AggregateRegistry.register(BASE2+"stdevp", f_StdevP, null) ;
+ AggregateRegistry.register(BASE2+"stdev", f_Stdev, null) ;
+ AggregateRegistry.register(BASE2+"varp", f_VarP, null) ;
+ AggregateRegistry.register(BASE2+"var", f_Var, null) ;
+
+ // DISTINCT versions as URIs.
AccumulatorFactory f_VarP_d = (agg, distinct) -> new AccStatVarPopulation(agg.getExpr(), true) ;
AccumulatorFactory f_Var_d = (agg, distinct) -> new AccStatVarSample(agg.getExpr(), true) ;
AccumulatorFactory f_StdevP_d = (agg, distinct) -> new AccStatStdDevPopulation(agg.getExpr(), true) ;
AccumulatorFactory f_Stdev_d = (agg, distinct) -> new AccStatStdDevSample(agg.getExpr(), true) ;
- AggregateRegistry.register(BASE+"varpd", f_VarP_d, null) ;
- AggregateRegistry.register(BASE+"vard", f_Var_d, null) ;
- AggregateRegistry.register(BASE+"stdevpd", f_StdevP_d, null) ;
- AggregateRegistry.register(BASE+"stdevd", f_Stdev_d, null) ;
+ AggregateRegistry.register(BASE+"varpd", f_VarP_d, null) ;
+ AggregateRegistry.register(BASE+"vard", f_Var_d, null) ;
+ AggregateRegistry.register(BASE+"stdevpd", f_StdevP_d, null) ;
+ AggregateRegistry.register(BASE+"stdevd", f_Stdev_d, null) ;
}
}
http://git-wip-us.apache.org/repos/asf/jena/blob/9c2fa681/jena-arq/src/main/java/org/apache/jena/sparql/function/StandardFunctions.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/function/StandardFunctions.java b/jena-arq/src/main/java/org/apache/jena/sparql/function/StandardFunctions.java
index 1d5d9f4..c860f47 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/function/StandardFunctions.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/function/StandardFunctions.java
@@ -20,7 +20,6 @@ package org.apache.jena.sparql.function;
import org.apache.jena.datatypes.xsd.XSDDatatype ;
import org.apache.jena.sparql.ARQConstants ;
-import org.apache.jena.sparql.expr.aggregate.lib.StandardCustomAggregates ;
import org.apache.jena.sparql.function.library.* ;
import org.apache.jena.sparql.function.library.sqrt ;
import org.apache.jena.sparql.function.library.leviathan.* ;
@@ -35,8 +34,6 @@ public class StandardFunctions
String math = ARQConstants.mathPrefix ;
String sparqlfn = ARQConstants.fnSparql ;
- StandardCustomAggregates.register();
-
// See http://www.w3.org/TR/xpath-datamodel/#types-hierarchy
// No durations here
http://git-wip-us.apache.org/repos/asf/jena/blob/9c2fa681/jena-arq/src/test/java/org/apache/jena/sparql/expr/TestStatisticsAggregates.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/test/java/org/apache/jena/sparql/expr/TestStatisticsAggregates.java b/jena-arq/src/test/java/org/apache/jena/sparql/expr/TestStatisticsAggregates.java
index 99d3bc8..f094a82 100644
--- a/jena-arq/src/test/java/org/apache/jena/sparql/expr/TestStatisticsAggregates.java
+++ b/jena-arq/src/test/java/org/apache/jena/sparql/expr/TestStatisticsAggregates.java
@@ -25,9 +25,10 @@ import org.apache.jena.rdf.model.Literal ;
import org.apache.jena.sparql.core.DatasetGraph ;
import org.apache.jena.sparql.core.Var ;
import org.apache.jena.sparql.engine.binding.Binding ;
+import org.apache.jena.sparql.expr.aggregate.AggregateRegistry ;
import org.apache.jena.sparql.expr.aggregate.lib.StandardCustomAggregates ;
import org.apache.jena.sparql.sse.SSE ;
-import org.junit.Assert ;
+import static org.junit.Assert.* ;
import org.junit.BeforeClass ;
import org.junit.Test ;
@@ -35,7 +36,7 @@ public class TestStatisticsAggregates {
static String NL = "\n" ;
static String PRE = StrUtils.strjoinNL
- ("PREFIX afn: <http://jena.apache.org/ARQ/function#>") ;
+ ("PREFIX agg: <http://jena.apache.org/ARQ/function/aggregate#>") ;
static DatasetGraph ds = SSE.parseDatasetGraph("(dataset (graph (:x :p1 -1) (:x :p2 2) (:x :p3 3) (:x :p4 3) ))") ;
static DatasetGraph dsEmpty = SSE.parseDatasetGraph("(dataset)") ;
@@ -67,111 +68,125 @@ public class TestStatisticsAggregates {
// ---- stdev
@Test public void agg_stat_stdev_uri() {
- test("afn:stdev(?x)", VALUEstdev, syntaxSPARQL_11) ;
+ test("agg:stdev(?x)", VALUEstdev, syntaxSPARQL_11) ;
}
@Test public void agg_stat_stdev_uri_d() {
- test("afn:stdevd(?x)", VALUEstdevd, syntaxSPARQL_11) ;
+ test("agg:stdevd(?x)", VALUEstdevd, syntaxSPARQL_11) ;
}
@Test public void agg_stat_stdev_uri_distinct() {
- test("afn:stdev(DISTINCT ?x)", VALUEstdevd, syntaxSPARQL_11) ;
+ test("agg:stdev(DISTINCT ?x)", VALUEstdevd, syntaxSPARQL_11) ;
}
@Test public void agg_stat_stdev_agg() {
- test("AGG afn:stdev(?x)", VALUEstdev, syntaxARQ) ;
+ test("AGG agg:stdev(?x)", VALUEstdev, syntaxARQ) ;
}
@Test public void agg_stat_stdev_agg_distinct() {
- test("AGG afn:stdev(DISTINCT ?x)", VALUEstdevd, syntaxARQ) ;
+ test("AGG agg:stdev(DISTINCT ?x)", VALUEstdevd, syntaxARQ) ;
}
// ---- stdevp
@Test public void agg_stat_stdevp_uri() {
- test("afn:stdevp(?x)", VALUEstdevp, syntaxSPARQL_11) ;
+ test("agg:stdevp(?x)", VALUEstdevp, syntaxSPARQL_11) ;
}
@Test public void agg_stat_stdevp_uri_d() {
- test("afn:stdevpd(?x)", VALUEstdevpd, syntaxSPARQL_11) ;
+ test("agg:stdevpd(?x)", VALUEstdevpd, syntaxSPARQL_11) ;
}
@Test public void agg_stat_stdevp_uri_distinct() {
- test("afn:stdevp(DISTINCT ?x)", VALUEstdevpd, syntaxSPARQL_11) ;
+ test("agg:stdevp(DISTINCT ?x)", VALUEstdevpd, syntaxSPARQL_11) ;
}
@Test public void agg_stat_stdevp_agg() {
- test("AGG afn:stdevp(?x)", VALUEstdevp, syntaxARQ) ;
+ test("AGG agg:stdevp(?x)", VALUEstdevp, syntaxARQ) ;
}
@Test public void agg_stat_stdevp_agg_distinct() {
- test("AGG afn:stdevp(DISTINCT ?x)", VALUEstdevpd, syntaxARQ) ;
+ test("AGG agg:stdevp(DISTINCT ?x)", VALUEstdevpd, syntaxARQ) ;
}
// ---- var
@Test public void agg_stat_var_uri() {
- test("afn:var(?x)", VALUEvar, syntaxSPARQL_11) ;
+ test("agg:var(?x)", VALUEvar, syntaxSPARQL_11) ;
}
@Test public void agg_stat_var_uri_d() {
- test("afn:vard(?x)", VALUEvard, syntaxSPARQL_11) ;
+ test("agg:vard(?x)", VALUEvard, syntaxSPARQL_11) ;
}
@Test public void agg_stat_var_uri_distinct() {
- test("afn:var(DISTINCT ?x)", VALUEvard, syntaxSPARQL_11) ;
+ test("agg:var(DISTINCT ?x)", VALUEvard, syntaxSPARQL_11) ;
}
@Test public void agg_stat_var_agg() {
- test("AGG afn:var(?x)", VALUEvar, syntaxARQ) ;
+ test("AGG agg:var(?x)", VALUEvar, syntaxARQ) ;
}
@Test public void agg_stat_var_agg_distinct() {
- test("AGG afn:var(DISTINCT ?x)", VALUEvard, syntaxARQ) ;
+ test("AGG agg:var(DISTINCT ?x)", VALUEvard, syntaxARQ) ;
}
// ---- varp
@Test public void agg_stat_varp_uri() {
- test("afn:varp(?x)", VALUEvarp, syntaxSPARQL_11) ;
+ test("agg:varp(?x)", VALUEvarp, syntaxSPARQL_11) ;
}
@Test public void agg_stat_varp_uri_d() {
- test("afn:varpd(?x)", VALUEvarpd, syntaxSPARQL_11) ;
+ test("agg:varpd(?x)", VALUEvarpd, syntaxSPARQL_11) ;
}
@Test public void agg_stat_varp_uri_distinct() {
- test("afn:varp(DISTINCT ?x)", VALUEvarpd, syntaxSPARQL_11) ;
+ test("agg:varp(DISTINCT ?x)", VALUEvarpd, syntaxSPARQL_11) ;
}
@Test public void agg_stat_varp_agg() {
- test("AGG afn:varp(?x)", VALUEvarp, syntaxARQ) ;
+ test("AGG agg:varp(?x)", VALUEvarp, syntaxARQ) ;
}
@Test public void agg_stat_varp_agg_distinct() {
- test("AGG afn:varp(DISTINCT ?x)", VALUEvarpd, syntaxARQ) ;
+ test("AGG agg:varp(DISTINCT ?x)", VALUEvarpd, syntaxARQ) ;
+ }
+
+ //<http://jena.hpl.hp.com/ARQ/function/aggregate#>
+
+ @Test public void agg_stat_stdev_full_uri() {
+ test("<http://jena.apache.org/ARQ/function/aggregate#stdev>(?x)", VALUEstdev, syntaxSPARQL_11) ;
+ }
+
+ @Test public void agg_stat_registry() {
+ assertTrue(AggregateRegistry.isRegistered("http://jena.apache.org/ARQ/function/aggregate#stdev")) ;
+ assertTrue(AggregateRegistry.isRegistered("http://jena.apache.org/ARQ/function/aggregate#stdevp")) ;
+ assertTrue(AggregateRegistry.isRegistered("http://jena.apache.org/ARQ/function/aggregate#var")) ;
+ assertTrue(AggregateRegistry.isRegistered("http://jena.apache.org/ARQ/function/aggregate#varp")) ;
+ assertFalse(AggregateRegistry.isRegistered("http://jena.apache.org/ARQ/function#e")) ; // Not an aggregate
}
// ---- Corner cases. 0 and 1 matches.
@Test public void agg_stat_stdev_empty_1() {
// Empty -> error
- testErr("afn:stdev(?x)", dsEmpty, syntaxSPARQL_11) ;
+ testErr("agg:stdev(?x)", dsEmpty, syntaxSPARQL_11) ;
}
@Test public void agg_stat_stdev_empty_2() {
// Empty -> error
- testErr("afn:stdevp(?x)", dsEmpty, syntaxSPARQL_11) ;
+ testErr("agg:stdevp(?x)", dsEmpty, syntaxSPARQL_11) ;
}
// Sample of one -> error
@Test public void agg_stat_size_one_1() {
- testErr("afn:stdev(?x)", ds1, syntaxSPARQL_11) ;
+ testErr("agg:stdev(?x)", ds1, syntaxSPARQL_11) ;
}
// Population of one -> 0e0
@Test public void agg_stat_size_one_2() {
- Query query = build("afn:stdevp(?x)", syntaxSPARQL_11) ;
+ Query query = build("agg:stdevp(?x)", syntaxSPARQL_11) ;
test(query, 0e0, ds1) ;
}
@@ -188,15 +203,12 @@ public class TestStatisticsAggregates {
try ( QueryExecution qExec = QueryExecutionFactory.create(query, DatasetFactory.wrap(dsg)) ) {
Literal literal = qExec.execSelect().next().getLiteral("X") ;
double result = literal.getDouble() ;
- Assert.assertEquals(expected, result, 0.001);
+ assertEquals(expected, result, 0.001);
}
}
private static Query build(String qsAgg, Syntax syntax) {
String NL = "\n" ;
- String PRE = StrUtils.strjoinNL
- ("PREFIX math: <http://www.w3.org/2005/xpath-functions/math#>",
- "PREFIX afn: <http://jena.apache.org/ARQ/function#>") ;
String qs = PRE+NL+"SELECT ("+qsAgg+NL+"AS ?X) WHERE {?s ?p ?x} GROUP BY ?s" ;
Query query = QueryFactory.create(qs, syntax) ;
return query ;
@@ -206,10 +218,10 @@ public class TestStatisticsAggregates {
Query query = build(qsAgg, syntax) ;
try ( QueryExecution qExec = QueryExecutionFactory.create(query, DatasetFactory.wrap(ds)) ) {
ResultSet rs = qExec.execSelect() ;
- Assert.assertTrue(rs.hasNext()) ;
- Assert.assertTrue(rs.getResultVars().contains("X")) ;
+ assertTrue(rs.hasNext()) ;
+ assertTrue(rs.getResultVars().contains("X")) ;
Binding b = rs.nextBinding() ;
- Assert.assertFalse(b.contains(Var.alloc("X"))) ;
+ assertFalse(b.contains(Var.alloc("X"))) ;
}
}
}