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"))) ;
         }
     }
 }