/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.jena.sparql.expr.aggregate.lib; import org.apache.jena.sparql.ARQConstants ; import org.apache.jena.sparql.expr.aggregate.AccumulatorFactory ; import org.apache.jena.sparql.expr.aggregate.AggregateRegistry ; /** Register custom aggregates in addition to the SPARQL defined ones. * This includes the statistics aggregate functions as custom aggregates, * as {@code <http://jena.apache.org/ARQ/function#stdev} etc. * This is commonly abbreviated {@code afn:stdev}. */ public class StandardAggregates { public static String BASE = ARQConstants.ARQAggregateLibraryURI ; public static String BASE2 = ARQConstants.ARQFunctionLibraryURI ; public static void register() { // PGSQL names: // stddev(expression) // stddev_pop(expression) // stddev_samp(expression) // variance(expression) // var_pop(expression) // var_samp(expression) // | < STDEV: "stdev" > // | < STDEV_SAMP: "stdev_samp" > // | < STDEV_POP: "stdev_pop" > // | < VARIANCE: "variance" > // | < VAR_SAMP: "var_samp" > // | < VAR_POP: "var_pop" > // The statistics aggregates // = stddev-samp except one element -> 0. ????????????? AccumulatorFactory f_Stdev = (agg, distinct) -> new AccStatStdDevSample(agg.getExpr(), distinct) ; AccumulatorFactory f_StdevSamp = (agg, distinct) -> new AccStatStdDevSample(agg.getExpr(), distinct) ; AccumulatorFactory f_StdevPop = (agg, distinct) -> new AccStatStdDevPopulation(agg.getExpr(), distinct) ; AccumulatorFactory f_VarPop = (agg, distinct) -> new AccStatVarPopulation(agg.getExpr(), distinct) ; AccumulatorFactory f_VarSamp = (agg, distinct) -> new AccStatVarSample(agg.getExpr(), distinct) ; r(AggURI.stdev, f_Stdev) ; r(AggURI.stdev_samp, f_StdevSamp) ; r(AggURI.stdev_pop, f_StdevPop) ; r(AggURI.variance, f_VarSamp) ; r(AggURI.var_samp, f_VarSamp) ; r(AggURI.var_pop, f_VarPop) ; } private static void r(String uri, AccumulatorFactory f) { AggregateRegistry.register(uri, f, null) ; // Again in the afn@ (not encouraged but easy to do) AggregateRegistry.register(uri.replace("/aggregate", ""), f, null) ; } }