Good. Please do take the opportunity to close the Stack Exchange post where you asked the same question with a link to this thread.
https://stackoverflow.com/questions/47979588/custom-arq-function-not-working-with-fuseki-endpoint Adam Soroka > On Dec 26, 2017, at 4:15 PM, Marc Agate <[email protected]> wrote: > > Hi Adam, > > I know about strlen : the part I shared with you guys was just for > testing purpose as our application is going to require quite a bit of > very specific filters. > I was just testing the setup (the mechanism) for further "real" custom > functions development. > > Thanks > > Marc > > > Le mardi 26 décembre 2017 à 15:53 -0500, ajs6f a écrit : >> I'm glad you got your function working. Now that I look at it, it >> seems possible that you could use a built-in SPARQL function: >> >> https://www.w3.org/TR/sparql11-query/#func-strlen >> >> Adam Soroka >> >>> On Dec 26, 2017, at 3:50 PM, Marc Agate <[email protected]> >>> wrote: >>> >>> Hi, >>> >>> I finally got the whole test working properly >>> >>> To summarize: >>> >>> 1) Deploy the custom functions classes on fuseki server >>> 2) Modify the fuseki config : >>> >>> add [] ja:loadClass "io.bdrc.ldsearch.query.functions.MyFilter" >>> >>> where MyFilter implementation is : >>> >>> import org.apache.jena.sparql.expr.NodeValue; >>> import org.apache.jena.sparql.function.FunctionBase1; >>> >>> >>> public class MyFilter extends FunctionBase1 { >>> >>> public MyFilter() { super() ; } >>> >>> public NodeValue exec(NodeValue value1){ >>> >>> int d = value1.asString().length(); >>> return NodeValue.makeInteger(new Integer(d)); >>> } >>> } >>> >>> 3) add the following prefix to the context: >>> >>> PREFIX f: <java:io.bdrc.ldsearch.query.functions.> >>> >>> Note that "io.bdrc.ldsearch.query.functions is the package of >>> MyFilter >>> class, not the class itself --> this means that you never call a >>> class >>> method in sparql queries but only a class that implements >>> org.apache.jena.sparql.function.FunctionBaseX where X is the number >>> of >>> argument of your filter function >>> >>> 4) Write (for instance) the query like this: >>> >>> SELECT DISTINCT ?l >>> WHERE { ?x skos:prefLabel ?l . >>> FILTER (f:MyFilter(?l) < 20) >>> } >>> >>> Thanks to Adam and Andy >>> >>> Marc >>> >>> Le mardi 26 décembre 2017 à 19:44 +0000, Andy Seaborne a écrit : >>>>> Exception in thread "main" HttpException: 404 at >>>>> org.apache.jena.sparql.engine.http.HttpQuery.execGet(HttpQuery. >>>>> java >>>>> :328 >>>>> ) >>>> >>>> 404 - HTTP not found - when trying to call Fuseki - i.e. the >>>> query >>>> service URL is wrong. A server is running at the address >>>> (host:port) >>>> but >>>> the path does not name an HTTP resource. >>>> >>>> Andy >>>> >>>> >>>> On 26/12/17 19:00, ajs6f wrote: >>>>> I don't understand how that config is getting parsed at all. >>>>> It's >>>>> not valid Turtle. >>>>> >>>>>> ja:loadClass >>>>>> "io.bdrc.ldsearch.query.functions.CustomARQFunctions" . >>>>> >>>>> is not a triple at all. It should probably be: >>>>> >>>>> [] ja:loadClass >>>>> "io.bdrc.ldsearch.query.functions.CustomARQFunctions" . >>>>> >>>>> Riot gives "Expected IRI for predicate: got: >>>>> [STRING:io.bdrc.ldsearch.query.functions.CustomARQFunctions]" >>>>> >>>>> It's not clear to me how you could be successfully loading your >>>>> extension function with invalid config. >>>>> >>>>> Adam Soroka >>>>> >>>>> >>>>>> On Dec 26, 2017, at 1:42 PM, Marc Agate <[email protected] >>>>>>> >>>>>> wrote: >>>>>> >>>>>> Well... >>>>>> >>>>>> Here is the query >>>>>> >>>>>> PREFIX : <http://purl.bdrc.io/ontology/core/> >>>>>> PREFIX adm: <http://purl.bdrc.io/ontology/admin/> >>>>>> PREFIX bdr: <http://purl.bdrc.io/resource/> >>>>>> PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> >>>>>> PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> >>>>>> PREFIX skos: <http://www.w3.org/2004/02/skos/core#> >>>>>> PREFIX tbr: <http://purl.bdrc.io/ontology/toberemoved/> >>>>>> PREFIX xsd: <http://www.w3.org/2001/XMLSchema#> >>>>>> PREFIX f: >>>>>> <java:io.bdrc.ldsearch.query.functions.CustomARQFunctions.> >>>>>> >>>>>> SELECT DISTINCT ?l >>>>>> WHERE { >>>>>> ?x skos:prefLabel ?l . >>>>>> FILTER (f:myFilter(?l) < 100) >>>>>> } >>>>>> >>>>>> Note that whene I change FILTER (f:myFilter(?l) < 100) to >>>>>> FILTER >>>>>> (STRLEN(?l) < 100), I don't get the 404 exception... >>>>>> Therefore it's not a connection issue. I thing it's more like >>>>>> a >>>>>> unresolved URI or so. >>>>>> >>>>>> Now, since you'are asking for it, here is the full fuseki >>>>>> config: >>>>>> >>>>>> ############################################################# >>>>>> ### >>>>>> # Fuseki configuration for BDRC, configures two endpoints: >>>>>> # - /bdrc is read-only >>>>>> # - /bdrcrw is read-write >>>>>> # >>>>>> # This was painful to come up with but the web interface >>>>>> basically >>>>>> allows no option >>>>>> # and there is no subclass inference by default so such a >>>>>> configuration >>>>>> file is necessary. >>>>>> # >>>>>> # The main doc sources are: >>>>>> # - https://jena.apache.org/documentation/fuseki2/fuseki-con >>>>>> figu >>>>>> ration >>>>>> .html >>>>>> # - https://jena.apache.org/documentation/assembler/assemble >>>>>> r-ho >>>>>> wto.ht >>>>>> ml >>>>>> # - https://jena.apache.org/documentation/assembler/assemble >>>>>> r.tt >>>>>> l >>>>>> # >>>>>> # See https://jena.apache.org/documentation/fuseki2/fuseki-la >>>>>> yout >>>>>> .html >>>>>> for the destination of this file. >>>>>> >>>>>> @prefix fuseki: <http://jena.apache.org/fuseki#> . >>>>>> @prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns# >>>>>>> . >>>>>> @prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> . >>>>>> @prefix tdb: <http://jena.hpl.hp.com/2008/tdb#> . >>>>>> # @prefix tdb2: <http://jena.apache.org/2016/tdb#> . >>>>>> @prefix ja: <http://jena.hpl.hp.com/2005/11/Assembler#> >>>>>> . >>>>>> @prefix : <http://base/#> . >>>>>> @prefix text: <http://jena.apache.org/text#> . >>>>>> @prefix skos: <http://www.w3.org/2004/02/skos/core#> . >>>>>> @prefix adm: <http://purl.bdrc.io/ontology/admin/> . >>>>>> @prefix bdd: <http://purl.bdrc.io/data/> . >>>>>> @prefix bdo: <http://purl.bdrc.io/ontology/core/> . >>>>>> @prefix bdr: <http://purl.bdrc.io/resource/> . >>>>>> @prefix f: >>>>>> <java:io.bdrc.ldsearch.query.functions.CustomARQFunctions.> >>>>>> . >>>>>> >>>>>> ja:loadClass >>>>>> "io.bdrc.ldsearch.query.functions.CustomARQFunctions" . >>>>>> # [] ja:loadClass "org.seaborne.tdb2.TDB2" . >>>>>> # tdb2:DatasetTDB2 rdfs:subClassOf ja:RDFDataset . >>>>>> # tdb2:GraphTDB2 rdfs:subClassOf ja:Model . >>>>>> >>>>>> [] rdf:type fuseki:Server ; >>>>>> fuseki:services ( >>>>>> :bdrcrw >>>>>> # :bdrcro >>>>>> ) . >>>>>> >>>>>> :bdrcrw rdf:type fuseki:Service ; >>>>>> fuseki:name "bdrcrw" ; # name >>>>>> of >>>>>> the >>>>>> dataset in the url >>>>>> fuseki:serviceQuery "query" ; # SPARQL >>>>>> query >>>>>> service >>>>>> fuseki:serviceUpdate "update" ; # SPARQL >>>>>> update >>>>>> service >>>>>> fuseki:serviceUpload "upload" ; # Non- >>>>>> SPARQL >>>>>> upload >>>>>> service >>>>>> fuseki:serviceReadWriteGraphStore "data" ; # SPARQL >>>>>> Graph store >>>>>> protocol (read and write) >>>>>> fuseki:dataset :bdrc_text_dataset ; >>>>>> . >>>>>> >>>>>> # :bdrcro rdf:type fuseki:Service ; >>>>>> # fuseki:name "bdrc" ; >>>>>> # fuseki:serviceQuery "query" ; >>>>>> # fuseki:serviceReadGraphStore "data" ; >>>>>> # fuseki:dataset :bdrc_text_dat >>>>>> aset >>>>>> ; >>>>>> # . >>>>>> >>>>>> # using TDB >>>>>> :dataset_bdrc rdf:type tdb:DatasetTDB ; >>>>>> tdb:location "/etc/fuseki/databases/bdrc" ; >>>>>> tdb:unionDefaultGraph true ; >>>>>> . >>>>>> >>>>>> # # try using TDB2 >>>>>> # :dataset_bdrc rdf:type tdb2:DatasetTDB2 ; >>>>>> # tdb2:location "/etc/fuseki/databases/bdrc" ; >>>>>> # tdb2:unionDefaultGraph true ; >>>>>> # . >>>>>> >>>>>> :bdrc_text_dataset rdf:type text:TextDataset ; >>>>>> text:dataset :dataset_bdrc ; >>>>>> text:index :bdrc_lucene_index ; >>>>>> . >>>>>> >>>>>> # Text index description >>>>>> :bdrc_lucene_index a text:TextIndexLucene ; >>>>>> text:directory <file:/etc/fuseki/lucene-bdrc> ; >>>>>> text:storeValues true ; >>>>>> text:multilingualSupport true ; >>>>>> text:entityMap :bdrc_entmap ; >>>>>> text:defineAnalyzers ( >>>>>> [ text:addLang "bo" ; >>>>>> text:analyzer [ >>>>>> a text:GenericAnalyzer ; >>>>>> text:class "io.bdrc.lucene.bo.TibetanAnalyzer" ; >>>>>> text:params ( >>>>>> [ text:paramName "segmentInWords" ; >>>>>> text:paramType text:TypeBoolean ; >>>>>> text:paramValue false ] >>>>>> [ text:paramName "lemmatize" ; >>>>>> text:paramType text:TypeBoolean ; >>>>>> text:paramValue true ] >>>>>> [ text:paramName "filterChars" ; >>>>>> text:paramType text:TypeBoolean ; >>>>>> text:paramValue false ] >>>>>> [ text:paramName "fromEwts" ; >>>>>> text:paramType text:TypeBoolean ; >>>>>> text:paramValue false ] >>>>>> ) >>>>>> ] ; >>>>>> ] >>>>>> [ text:addLang "bo-x-ewts" ; >>>>>> text:analyzer [ >>>>>> a text:GenericAnalyzer ; >>>>>> text:class "io.bdrc.lucene.bo.TibetanAnalyzer" ; >>>>>> text:params ( >>>>>> [ text:paramName "segmentInWords" ; >>>>>> text:paramType text:TypeBoolean ; >>>>>> text:paramValue false ] >>>>>> [ text:paramName "lemmatize" ; >>>>>> text:paramType text:TypeBoolean ; >>>>>> text:paramValue true ] >>>>>> [ text:paramName "filterChars" ; >>>>>> text:paramType text:TypeBoolean ; >>>>>> text:paramValue false ] >>>>>> [ text:paramName "fromEwts" ; >>>>>> text:paramType text:TypeBoolean ; >>>>>> text:paramValue true ] >>>>>> ) >>>>>> ] ; >>>>>> ] >>>>>> ) ; >>>>>> . >>>>>> >>>>>> # Index mappings >>>>>> :bdrc_entmap a text:EntityMap ; >>>>>> text:entityField "uri" ; >>>>>> text:uidField "uid" ; >>>>>> text:defaultField "label" ; >>>>>> text:langField "lang" ; >>>>>> text:graphField "graph" ; ## enable graph-specific >>>>>> indexing >>>>>> text:map ( >>>>>> [ text:field "label" ; >>>>>> text:predicate skos:prefLabel ] >>>>>> [ text:field "altLabel" ; >>>>>> text:predicate skos:altLabel ; ] >>>>>> [ text:field "rdfsLabel" ; >>>>>> text:predicate rdfs:label ; ] >>>>>> [ text:field "chunkContents" ; >>>>>> text:predicate bdo:chunkContents ; ] >>>>>> [ text:field "eTextTitle" ; >>>>>> text:predicate bdo:eTextTitle ; ] >>>>>> [ text:field "logMessage" ; >>>>>> text:predicate adm:logMessage ; ] >>>>>> [ text:field "noteText" ; >>>>>> text:predicate bdo:noteText ; ] >>>>>> [ text:field "workAuthorshipStatement" ; >>>>>> text:predicate bdo:workAuthorshipStatement ; ] >>>>>> [ text:field "workColophon" ; >>>>>> text:predicate bdo:workColophon ; ] >>>>>> [ text:field "workEditionStatement" ; >>>>>> text:predicate bdo:workEditionStatement ; ] >>>>>> [ text:field "workPublisherLocation" ; >>>>>> text:predicate bdo:workPublisherLocation ; ] >>>>>> [ text:field "workPublisherName" ; >>>>>> text:predicate bdo:workPublisherName ; ] >>>>>> [ text:field "workSeriesName" ; >>>>>> text:predicate bdo:workSeriesName ; ] >>>>>> ) ; >>>>>> . >>>>>> ############################################################# >>>>>> #### >>>>>> ## >>>>>> >>>>>> It would be wonderful to have the java:URI scheme thing >>>>>> working >>>>>> (all >>>>>> custom functions in a single class and method calls done >>>>>> directly >>>>>> in >>>>>> the sparql query : sounds like a dream !) >>>>>> >>>>>> Marc >>>>>> >>>>>> Le mardi 26 décembre 2017 à 13:22 -0500, ajs6f a écrit : >>>>>>> That exception doesn't appear to have anything to do with >>>>>>> extension >>>>>>> functions. It indicates a problem between client and >>>>>>> server. >>>>>>> >>>>>>> Please show at _least_ your actual query execution code, >>>>>>> your >>>>>>> complete Fuseki config, and a complete stacktrace. >>>>>>> >>>>>>> >>>>>>> ajs6f >>>>>>> >>>>>>>> On Dec 26, 2017, at 1:17 PM, Marc Agate <agate.marc@gmail >>>>>>>> .com >>>>>>>>> >>>>>>>> >>>>>>>> wrote: >>>>>>>> >>>>>>>> I forgot to mention that according to >>>>>>>> https://jena.apache.org/documentation/query/java-uri.html >>>>>>>> I tried for testing purpose to set a PREFIX f: >>>>>>>> <java:io.bdrc.ldsearch.query.functions.CustomARQFunctions >>>>>>>> .>an >>>>>>>> d >>>>>>>> added >>>>>>>> the following to fuseki config : >>>>>>>> ja:loadClass >>>>>>>> "io.bdrc.ldsearch.query.functions.CustomARQFunctions" >>>>>>>> . >>>>>>>> where CustomARQFunctions is : >>>>>>>> public class CustomARQFunctions { public >>>>>>>> static >>>>>>>> NodeValue myFilter(NodeValue value1){ >>>>>>>> >>>>>>>> int i >>>>>>>> = >>>>>>>> value1.asString().length(); return >>>>>>>> NodeValue.makeInteger(i); } >>>>>>>> } >>>>>>>> since according to >>>>>>>> https://jena.apache.org/documentation/query/writing_funct >>>>>>>> ions >>>>>>>> .html >>>>>>>> using the java:URI scheme "dynamically loads the code, >>>>>>>> which >>>>>>>> must >>>>>>>> be on >>>>>>>> the Java classpath. With this scheme, the function URI >>>>>>>> gives >>>>>>>> the >>>>>>>> class >>>>>>>> name. There is automatic registration of a wrapper into >>>>>>>> the >>>>>>>> function >>>>>>>> registry. This way, no explicit registration step is >>>>>>>> needed >>>>>>>> by the >>>>>>>> application and queries issues with the command line >>>>>>>> tools >>>>>>>> can load >>>>>>>> custom functions." >>>>>>>> but no luck: I keep getting the following exception: >>>>>>>> Exception in thread "main" HttpException: 404 at >>>>>>>> org.apache.jena.sparql.engine.http.HttpQuery.execGet(Http >>>>>>>> Quer >>>>>>>> y.java >>>>>>>> :328 >>>>>>>> ) at >>>>>>>> org.apache.jena.sparql.engine.http.HttpQuery.exec(HttpQue >>>>>>>> ry.j >>>>>>>> ava:28 >>>>>>>> 8) >>>>>>>> at >>>>>>>> org.apache.jena.sparql.engine.http.QueryEngineHTTP.execRe >>>>>>>> sult >>>>>>>> SetInn >>>>>>>> er(Q >>>>>>>> ueryEngineHTTP.java:348) at >>>>>>>> org.apache.jena.sparql.engine.http.QueryEngineHTTP.execSe >>>>>>>> lect >>>>>>>> (Query >>>>>>>> Engi >>>>>>>> neHTTP.java:340) >>>>>>>> I am stuck ! >>>>>>>> Marc >>>>>>>> Le mardi 26 décembre 2017 à 18:56 +0100, Marc Agate a >>>>>>>> écrit : >>>>>>>>> Hi, >>>>>>>>> Adam's gave me the right direction. >>>>>>>>> I managed to load my function class in fuseki config >>>>>>>>> using >>>>>>>>> ja:loadClass >>>>>>>>> but now remains the following issue (the function is >>>>>>>>> not >>>>>>>>> registered)seefuseki logs : >>>>>>>>> [2017-12-26 16:10:13] exec WARN URI <http://purl >>>>>>>>> .bdr >>>>>>>>> c.io/f >>>>>>>>> unct >>>>>>>>> ions#MyFilterFunction> has no registered function >>>>>>>>> factory >>>>>>>>> How can I register this function now that I have the >>>>>>>>> code >>>>>>>>> available >>>>>>>>> onthe endpoint side ? >>>>>>>>> Thanks for helping >>>>>>>>> Marc. >>>>>>>>> >>>>>>>>> Le mardi 26 décembre 2017 à 17:43 +0000, Andy Seaborne >>>>>>>>> a >>>>>>>>> écrit : >>>>>>>>>> As well s Adam's point (and all the libraries your >>>>>>>>>> function >>>>>>>>>> needs, transitively) >>>>>>>>>> What is in the Fuseki log file?How was the data >>>>>>>>>> loaded >>>>>>>>>> into >>>>>>>>>> Fuseki? >>>>>>>>>> >> I printed out the >> FunctionRegistry >>>>>>>>>> And >>>>>>>>>> On 26/12/17 14:51, ajs6f wrote: >>>>>>>>>>> I'm not as familiar with the extension points of >>>>>>>>>>> ARQ as >>>>>>>>>>> I >>>>>>>>>>> wouldlike to be, but as I understand what you are >>>>>>>>>>> doing, you >>>>>>>>>>> areregistering a new function with your _local_ >>>>>>>>>>> registry, >>>>>>>>>>> then >>>>>>>>>>> firinga query at a _remote_ endpoint (which has a >>>>>>>>>>> completely >>>>>>>>>>> independentregistry in a different JVM in a >>>>>>>>>>> different >>>>>>>>>>> process, >>>>>>>>>>> potentially ina different _system_). >>>>>>>>>>> The query is getting interpreted and executed by >>>>>>>>>>> that >>>>>>>>>>> remoteservice, not locally. So you need to register >>>>>>>>>>> the >>>>>>>>>>> function >>>>>>>>>>> _there_. >>>>>>>>>>> Take a look at this thread: >>>>>>>>>>> https://lists.apache.org/thread.html/1cda23332af426 >>>>>>>>>>> 4883 >>>>>>>>>>> e88697 >>>>>>>>>>> d994 >>>>>>>>>>> 605770edcde2f93ddea51240e4b8@%3Cusers.jena.apache.o >>>>>>>>>>> rg%3 >>>>>>>>>>> E >>>>>>>>>>> It should get you started as to how to register >>>>>>>>>>> extensionfunctionality in Fuseki. >>>>>>>>>>> >>>>>>>>>>> Adam Soroka >>>>>>>>>>>> On Dec 26, 2017, at 9:34 AM, Marc Agate <agate.ma >>>>>>>>>>>> rc@g >>>>>>>>>>>> mail.c >>>>>>>>>>>> om> >>>>>>>>>>>> wrote: >>>>>>>>>>>> >>>>>>>>>>>> Hi ! >>>>>>>>>>>> >>>>>>>>>>>> I successfully implemented sparql queries using >>>>>>>>>>>> custom ARQ >>>>>>>>>>>> functions >>>>>>>>>>>> using the following (custom function code): >>>>>>>>>>>> >>>>>>>>>>>> **************** >>>>>>>>>>>> public class LevenshteinFilter extends >>>>>>>>>>>> FunctionBase2 >>>>>>>>>>>> { >>>>>>>>>>>> >>>>>>>>>>>> public LevenshteinFilter() { super() ; } >>>>>>>>>>>> >>>>>>>>>>>> public NodeValue exec(NodeValue value1, >>>>>>>>>>>> NodeValue >>>>>>>>>>>> value2){ >>>>>>>>>>>> LevenshteinDistance LD=new >>>>>>>>>>>> LevenshteinDistance(); >>>>>>>>>>>> int i = LD.apply(value1.asString(), >>>>>>>>>>>> value2.asString()); >>>>>>>>>>>> return NodeValue.makeInteger(i); >>>>>>>>>>>> } >>>>>>>>>>>> } >>>>>>>>>>>> *************** >>>>>>>>>>>> >>>>>>>>>>>> it works fine when I query against a Model loaded >>>>>>>>>>>> from a >>>>>>>>>>>> turtle >>>>>>>>>>>> file, >>>>>>>>>>>> like this: >>>>>>>>>>>> >>>>>>>>>>>> *************** >>>>>>>>>>>> InputStream input = >>>>>>>>>>>> QueryProcessor.class.getClassLoader().getResource >>>>>>>>>>>> AsSt >>>>>>>>>>>> ream(" >>>>>>>>>>>> full >>>>>>>>>>>> .t >>>>>>>>>>>> tl"); >>>>>>>>>>>> model = >>>>>>>>>>>> ModelFactory.createMemModelMaker().createModel("d >>>>>>>>>>>> efau >>>>>>>>>>>> lt"); >>>>>>>>>>>> model.read(input,null,"TURTLE"); // >>>>>>>>>>>> null base >>>>>>>>>>>> URI, >>>>>>>>>>>> since >>>>>>>>>>>> model URIs are absolute >>>>>>>>>>>> input.close(); >>>>>>>>>>>> *************** >>>>>>>>>>>> >>>>>>>>>>>> with the query being sent like this : >>>>>>>>>>>> >>>>>>>>>>>> *************** >>>>>>>>>>>> String functionUri = "http://www.example1.org/Lev >>>>>>>>>>>> ensh >>>>>>>>>>>> teinFu >>>>>>>>>>>> ncti >>>>>>>>>>>> on >>>>>>>>>>>> "; >>>>>>>>>>>> FunctionRegistry.get().put(functionUri >>>>>>>>>>>> , >>>>>>>>>>>> LevenshteinFilter.class); >>>>>>>>>>>> >>>>>>>>>>>> String s = "whatever you want"; >>>>>>>>>>>> String sparql = prefixes+" SELECT >>>>>>>>>>>> DISTINCT >>>>>>>>>>>> ?l >>>>>>>>>>>> WHERE { >>>>>>>>>>>> ?x >>>>>>>>>>>> rdfs:label ?l . " >>>>>>>>>>>> + "FILTER(fct:LevenshteinFunction(?l, >>>>>>>>>>>> \"" + >>>>>>>>>>>> s >>>>>>>>>>>> + "\") >>>>>>>>>>>> < 4) }"; >>>>>>>>>>>> Query query = >>>>>>>>>>>> QueryFactory.create(sparql); >>>>>>>>>>>> QueryExecution qexec = >>>>>>>>>>>> QueryExecutionFactory.create(query, >>>>>>>>>>>> model); >>>>>>>>>>>> ResultSet rs = qexec.execSelect(); >>>>>>>>>>>> *************** >>>>>>>>>>>> >>>>>>>>>>>> However, if i use a working fuseki endpoint for >>>>>>>>>>>> the >>>>>>>>>>>> same >>>>>>>>>>>> dataset >>>>>>>>>>>> (full.ttl) like this : >>>>>>>>>>>> >>>>>>>>>>>> *************** >>>>>>>>>>>> fusekiUrl="http://localhost:3030/ds/query"; >>>>>>>>>>>> *************** >>>>>>>>>>>> >>>>>>>>>>>> sending the query like this (using >>>>>>>>>>>> QueryExecutionFactory.sparqlService(fusekiUrl,que >>>>>>>>>>>> ry) >>>>>>>>>>>> instead of >>>>>>>>>>>> QueryExecutionFactory.create(query,model) ): >>>>>>>>>>>> >>>>>>>>>>>> *************** >>>>>>>>>>>> String functionUri = "http://www.example1.org/Lev >>>>>>>>>>>> ensh >>>>>>>>>>>> teinFu >>>>>>>>>>>> ncti >>>>>>>>>>>> on >>>>>>>>>>>> "; >>>>>>>>>>>> FunctionRegistry.get().put(functionUri >>>>>>>>>>>> , >>>>>>>>>>>> LevenshteinFilter.class); >>>>>>>>>>>> >>>>>>>>>>>> String s = "whatever you want"; >>>>>>>>>>>> String sparql = prefixes+" SELECT >>>>>>>>>>>> DISTINCT >>>>>>>>>>>> ?l >>>>>>>>>>>> WHERE { >>>>>>>>>>>> ?x >>>>>>>>>>>> rdfs:label ?l . " + >>>>>>>>>>>> "FILTER(fct:LevenshteinFunction(?l, \"" >>>>>>>>>>>> + s >>>>>>>>>>>> + >>>>>>>>>>>> "\") >>>>>>>>>>>> < 4) }"; >>>>>>>>>>>> Query query = >>>>>>>>>>>> QueryFactory.create(sparql); >>>>>>>>>>>> QueryExecution qexec = >>>>>>>>>>>> QueryExecutionFactory.sparqlService(fusekiUrl,que >>>>>>>>>>>> ry); >>>>>>>>>>>> ResultSet rs = qexec.execSelect(); >>>>>>>>>>>> *************** >>>>>>>>>>>> >>>>>>>>>>>> Then I don't get any results back. In both cases >>>>>>>>>>>> I >>>>>>>>>>>> printed >>>>>>>>>>>> out >>>>>>>>>>>> the >>>>>>>>>>>> FunctionRegistry and they contain exactly the >>>>>>>>>>>> same >>>>>>>>>>>> entries, >>>>>>>>>>>> especially >>>>>>>>>>>> : >>>>>>>>>>>> >>>>>>>>>>>> key=http://www.example1.org/LevenshteinFunction >>>>>>>>>>>> value: >>>>>>>>>>>> org.apache.jena.sparql.function.FunctionFactoryAu >>>>>>>>>>>> to@5 >>>>>>>>>>>> a45133 >>>>>>>>>>>> e >>>>>>>>>>>> >>>>>>>>>>>> Any clue ? >>>>>>>>>>>> >>>>>>>>>>>> Thanks >>>>>>> >>>>>>> >> >>
