Hi Francisco,

KiWi extensions are registered using Java ServiceLoader [1]. I'd recommend
you to check the original email where Sebastian reported the new feature
[2].

Hope that helps.

Cheers,

[1] https://docs.oracle.com/javase/6/docs/api/java/util/ServiceLoader.html
[2] http://markmail.org/message/dnshapfwr37nyfc5



On Mon, Jun 1, 2015 at 8:26 AM, FRANCISCO XAVIER SUMBA TORAL <
[email protected]> wrote:

> I am trying to register a function  ( SfIntersectsFunction) , such as
> fulltextquery function, using nativefunction  interface , but it no
> register.
>
>
> IN SfIntersectsFunction.java
>
> public class SfIntersectsFunction implements NativeFunction {
>
>     // auto-register for SPARQL environment
>     static {
>         if(!FunctionRegistry.getInstance().has(FN_GEOSPARQL
> .SF_INTERSECTS.toString())) {
>             FunctionRegistry.getInstance().add(new SfIntersectsFunction());
>         }
>     }
>
>     @Override
>     public Value evaluate(ValueFactory valueFactory, Value... args) throws
> ValueExprEvaluationException {
>         throw new UnsupportedOperationException("cannot evaluate
> in-memory, needs to be supported by the database");
>     }
>
>     @Override
>     public String getURI() {
>         return FN_GEOSPARQL .SF_INTERSECTS.toString();
>     }
>
>
>     /**
>      * Return true if this function has available native support for the
> given dialect
>      *
>      * @param dialect
>      * @return
>      */
>     @Override
>     public boolean isSupported(KiWiDialect dialect) {
>         return dialect instanceof PostgreSQLDialect;
>     }
>
>     /**
>      * Return a string representing how this function is translated into
> SQL in the given dialect
>      *
>      * @param dialect
>      * @param args
>      * @return
>      */
>     @Override
>     public String getNative(KiWiDialect dialect, String... args) {
>         if(dialect instanceof PostgreSQLDialect) {
>             if(args.length == 2) {
>                 return String.format("(to_tsvector('simple' ::
> regconfig,%1$s) @@ plainto_tsquery('simple' :: regconfig,%2$s))", args[0],
> args[1]);
>             } else if(args.length == 3) {
>                 return String.format("(to_tsvector(kiwi_ft_lang(%3$s) ::
> regconfig, %1$s) @@ plainto_tsquery(kiwi_ft_lang(%3$s) :: regconfig,
> %2$s))", args[0], args[1], args[2]);
>             }
>
>         }
>         throw new UnsupportedOperationException("fulltext search not
> supported by dialect "+dialect);
>     }
>
>     /**
>      * Get the return type of the function. This is needed for SQL type
> casting inside KiWi.
>      *
>      * @return
>      */
>     @Override
>     public ValueType getReturnType() {
>         return ValueType.BOOL;
>     }
>
>     /**
>      * Get the argument type of the function for the arg'th argument
> (starting to count at 0).
>      * This is needed for SQL type casting inside KiWi.
>      *
>      * @param arg
>      * @return
>      */
>     @Override
>     public ValueType getArgumentType(int arg) {
>         return ValueType.STRING;
>     }
>
>     /**
>      * Return the minimum number of arguments this function requires.
>      *
>      * @return
>      */
>     @Override
>     public int getMinArgs() {
>         return 2;
>     }
>
>     /**
>      * Return the maximum number of arguments this function can take
>      *
>      * @return
>      */
>     @Override
>     public int getMaxArgs() {
>         return 3;
>     }
> }
>
>
>
>
>
>
> IN FN_GEOSPARQL.java
>
>
> public class FN_GEOSPARQL {
>
>     public static final String NAMESPACE = "
> http://www.opengis.net/def/function/geosparql/ <
> http://www.opengis.net/def/function/geosparql/>";
>
>
>     public static final String PREFIX = "geof";
>
>
>     public static final Namespace NS = new NamespaceImpl(PREFIX,
> NAMESPACE);
>
>     //BOOLEAN FUNCTIONS
>     public static final URI SF_INTERSECTS;
>
>
>     static {
>         ValueFactory f = new ValueFactoryImpl();
>
>         SF_INTERSECTS = f.createURI(NAMESPACE,"sfIntersects");
>
>     }
>
>
>
> do I need some aditional step for registering the function?
>
> My first intention is to register the function to avoid the error
>
> org.openrdf.query.QueryEvaluationException: Unknown function '
> http://www.opengis <http://www.opengis/>
> .net/def/function/geosparql/sfIntersects'
>
>
> with this query
>
> PREFIX geof: <http://www.opengis.net/def/function/geosparql/ <
> http://www.opengis.net/def/function/geosparql/>>
> SELECT ?subject ?property WHERE {
>   ?subject a ?object.
>   ?subject ?property ?object.
>    FILTER( geof:sfIntersects("valor1", "valor2") )
>   }
>
> is right what I am trying to do?
>
>
>
> Thanks




-- 
Sergio Fernández
Partner Technology Manager
Redlink GmbH
m: +43 6602747925
e: [email protected]
w: http://redlink.co

Reply via email to