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 > > > > > > > > > > > > > >
