One typical problem is that the federated query might be executed *before* the rest of the query. So when you write
SERVICE https://query.wikidata.org/sparql { ?ParisWDID wdt:P625 ?ParisLoc . ?BordeauxWDID wdt:P625 ?BordeauxLoc . BIND(geof:distance(?ParisLoc,?BordeauxLoc) AS ?dist) } Then that part is sent to Wikidata *without any bindings of the variables*, which is basically asking wikidata to return the distance between *all* pairs of entities in the database, resulting in a timeout. And this is why your second query works. If you want to guarantee ordering of execution, use a subquery, which is logically executed first : PREFIX wd: http://www.wikidata.org/entity/ PREFIX owl: http://www.w3.org/2002/07/owl# PREFIX ex: http://example/ PREFIX wdt: http://www.wikidata.org/prop/direct/ PREFIX geof: http://www.opengis.net/def/geosparql/function/ SELECT * WHERE { { SELECT ?ParisWDID ?BordeauxWDID WHERE { BIND(ex:Paris AS ?ParisWDID ) BIND(ex:Bordeaux AS ?BordeauxWDID ) } } ?ParisWDID owl:sameAs ex:Paris . ?BordeauxWDID owl:sameAs ex:Bordeaux . SERVICE https://query.wikidata.org/sparql { ?ParisWDID wdt:P625 ?ParisLoc . ?BordeauxWDID wdt:P625 ?BordeauxLoc . BIND(geof:distance(?ParisLoc,?BordeauxLoc) AS ?dist) } } (note : that typical query pattern is supported in Sparnatural SPARQL query builder, see http://docs.sparnatural.eu/Federated-querying.html#additionnal-experimental-config--executedafter ) Le lun. 28 août 2023 à 18:08, <[email protected]> a écrit : > > Hello, > > I've got a problem running this query on fuseki 4.9.0 (basically, I'd like > to delegate to Wikidata, the computation of the distance between two > cities) : > > PREFIX wd: http://www.wikidata.org/entity/ > PREFIX owl: http://www.w3.org/2002/07/owl# > PREFIX ex: http://example/ > PREFIX wdt: http://www.wikidata.org/prop/direct/ > PREFIX geof: http://www.opengis.net/def/geosparql/function/ > SELECT * > WHERE { > ?ParisWDID owl:sameAs ex:Paris . > ?BordeauxWDID owl:sameAs ex:Bordeaux . > SERVICE https://query.wikidata.org/sparql { > ?ParisWDID wdt:P625 ?ParisLoc . > ?BordeauxWDID wdt:P625 ?BordeauxLoc . > BIND(geof:distance(?ParisLoc,?BordeauxLoc) AS ?dist) > } > } > ____________ > Here is the content of my rdf graph: > > @prefix wd: http://www.wikidata.org/entity/ . > @prefix owl: http://www.w3.org/2002/07/owl# . > @prefix wdt: http://www.wikidata.org/prop/direct/ . > @prefix ex: http://example/ . > > wd:Q90 owl:sameAs ex:Paris . > > wd:Q1479 owl:sameAs ex:Bordeaux . > > ____________ > Here is the trace on the standard output: > > 17:44:59 INFO Fuseki :: [8] POST > http://localhost:3030/sparql/sparql > 17:44:59 INFO Fuseki :: [8] Query = PREFIX wd: > http://www.wikidata.org/entity/ PREFIX owl: http://www.w3.org/2002/07/owl# > PREFIX ex: http://example/ PREFIX wdt: > http://www.wikidata.org/prop/direct/ PREFIX geof: > http://www.opengis.net/def/geosparql/function/ SELECT * WHERE { > ?ParisWDID owl:sameAs ex:Paris . ?BordeauxWDID owl:sameAs ex:Bordeaux . > SERVICE https://query.wikidata.org/sparql { ?ParisWDID wdt:P625 > ?ParisLoc . ?BordeauxWDID wdt:P625 ?BordeauxLoc . > BIND(geof:distance(?ParisLoc,?BordeauxLoc) AS ?dist) } } > 17:46:08 WARN Fuseki :: [8] RC = 500 : > com.google.gson.stream.MalformedJsonException: Unterminated string at line > 19922828 column 49 path $.results.bindings[855041].ParisLoc.value > org.apache.jena.sparql.resultset.ResultSetException: > com.google.gson.stream.MalformedJsonException: Unterminated string at line > 19922828 column 49 path $.results.bindings[855041].ParisLoc.value > at > org.apache.jena.riot.rowset.rw.rs_json.RowSetJSONStreaming.moveToNext(RowSetJSONStreaming.java:214) > ~[fuseki-server.jar:4.9.0] > at > org.apache.jena.riot.rowset.rw.rs_json.RowSetJSONStreaming.moveToNext(RowSetJSONStreaming.java:66) > ~[fuseki-server.jar:4.9.0] > ... > at > org.apache.jena.riot.rowset.rw.rs_json.IteratorRsJSON.computeNextActual(IteratorRsJSON.java:136) > ~[fuseki-server.jar:4.9.0] > at > org.apache.jena.riot.rowset.rw.rs_json.IteratorRsJSON.moveToNext(IteratorRsJSON.java:72) > ~[fuseki-server.jar:4.9.0] > at > org.apache.jena.atlas.iterator.IteratorSlotted.hasNext(IteratorSlotted.java:63) > ~[fuseki-server.jar:4.9.0] > at > org.apache.jena.riot.rowset.rw.rs_json.RowSetJSONStreaming.computeNextActual(RowSetJSONStreaming.java:225) > ~[fuseki-server.jar:4.9.0] > at > org.apache.jena.riot.rowset.rw.rs_json.RowSetJSONStreaming.moveToNext(RowSetJSONStreaming.java:210) > ~[fuseki-server.jar:4.9.0] > ... 112 more > 17:46:08 INFO Fuseki :: [8] 500 Server Error (68,499 s) > > ____________ > I verified that when replacing the variables ?ParisWDID and ?BordeauxWDID > with their values, the query is processed correctly. Thus this query works: > > PREFIX wd: http://www.wikidata.org/entity/ > PREFIX owl: http://www.w3.org/2002/07/owl# > PREFIX ex: http://example/ > PREFIX wdt: http://www.wikidata.org/prop/direct/ > PREFIX geof: http://www.opengis.net/def/geosparql/function/ > SELECT * > WHERE { > SERVICE https://query.wikidata.org/sparql { > wd:Q90 wdt:P625 ?ParisLoc . > wd:Q1479 wdt:P625 ?BordeauxLoc . > BIND(geof:distance(?ParisLoc,?BordeauxLoc) AS ?dist) > } > } > > ____________ > Thank you for any hint on what I did wrong > > Kind regards, > > Fano > > > > > Orange Restricted > > ____________________________________________________________________________________________________________ > Ce message et ses pieces jointes peuvent contenir des informations > confidentielles ou privilegiees et ne doivent donc > pas etre diffuses, exploites ou copies sans autorisation. Si vous avez > recu ce message par erreur, veuillez le signaler > a l'expediteur et le detruire ainsi que les pieces jointes. Les messages > electroniques etant susceptibles d'alteration, > Orange decline toute responsabilite si ce message a ete altere, deforme ou > falsifie. Merci. > > This message and its attachments may contain confidential or privileged > information that may be protected by law; > they should not be distributed, used or copied without authorisation. > If you have received this email in error, please notify the sender and > delete this message and its attachments. > As emails may be altered, Orange is not liable for messages that have been > modified, changed or falsified. > Thank you. > -- *Thomas Francart* -* SPARNA* Web de *données* | Architecture de l'*information* | Accès aux *connaissances* blog : blog.sparna.fr, site : sparna.fr, linkedin : fr.linkedin.com/in/thomasfrancart tel : +33 (0)6.71.11.25.97, skype : francartthomas
