Hi Chris,

> In the DBpedia SPARQL endpoint [1], running
> 
> PREFIX dc: <http://purl.org/dc/elements/1.1/
> >
> PREFIX : <
> http://dbpedia.org/resource/
> >
> PREFIX dbpedia2: <
> http://dbpedia.org/property/
> >
> 
> SELECT ?a (3+3 AS ?y)
> WHERE 
> { 
>    ?a dc:description "English footballer" .
>    ?a dbpedia2:placeOfBirth :Merseyside .
> }
> 
> Shows all English Footballers who were born in Merseyside, with column y just 
> displaying the value 6 on every row [result link]; however, the same query on 
> the SNORQL endpoint displays an error:
> 
> Virtuoso 37000 Error SP030: SPARQL compiler, line 16: syntax error at '3'
> before 'AS' SPARQL query: define sql:big-data-const 0 #output-
> format:application/sparql-results+json define input:default-graph-uri PREFIX 
> owl: PREFIX xsd: PREFIX rdfs: PREFIX rdf: PREFIX foaf: PREFIX dc: PREFIX : 
> PREFIX dbpedia2: PREFIX dbpedia: PREFIX skos: PREFIX pos: PREFIX dbo: SELECT 
> ?a (3 3 AS ?y) WHERE { ?a dc:description "English footballer" . ?a 
> dbpedia2:placeOfBirth :Merseyside . }
> 
> Even more strangely, using any of the other 3 arithmetic operators does work 
> in the SNORQL endpoint (e.g. with division [5])
> 
> A previous question [6] on Stackoverflow has implied that the SPARQL and 
> SNORQL endpoints should return the same result, so what's going on here?!
> 
> Cheers,
> Chris
> 
> 1: http://dbpedia.org/sparql/
> 2: 
> http://dbpedia.org/sparql/?default-graph-uri=http%3A%2F%2Fdbpedia.org&query=++++PREFIX+dc%3A+%3Chttp%3A%2F%2Fpurl.org%2Fdc%2Felements%2F1.1%2F%3E%0D%0A++++PREFIX+%3A+%3Chttp%3A%2F%2Fdbpedia.org%2Fresource%2F%3E%0D%0A++++PREFIX+dbpedia2%3A+%3Chttp%3A%2F%2Fdbpedia.org%2Fproperty%2F%3E%0D%0A%0D%0A++++SELECT+%3Fa+%283%2B3+AS+%3Fy%29%0D%0A++++WHERE+%0D%0A++++%7B+%0D%0A+++++++%3Fa+dc%3Adescription+%22English+footballer%22+.%0D%0A+++++++%3Fa+dbpedia2%3AplaceOfBirth+%3AMerseyside+.%0D%0A++++%7D&format=text%2Fhtml&timeout=30000&debug=on
> 3: 
> http://dbpedia.org/snorql/?query=PREFIX+pos%3A+%3Chttp%3A%2F%2Fwww.w3.org%2F2003%2F01%2Fgeo%2Fwgs84_pos%23%3E%0D%0APREFIX+dbo%3A+%3Chttp%3A%2F%2Fdbpedia.org%2Fontology%2F%3E%0D%0A%0D%0ASELECT+%3Fa+%283%2B3+AS+%3Fy%29%0D%0AWHERE+%0D%0A%7B+%0D%0A+++++%3Fa+dc%3Adescription+%22English+footballer%22+.%0D%0A+++++%3Fa+dbpedia2%3AplaceOfBirth+%3AMerseyside+.%0D%0A%7D
> 4: http://dbpedia.org/snorql/
> 5: 
> http://dbpedia.org/snorql/?query=PREFIX+pos%3A+%3Chttp%3A%2F%2Fwww.w3.org%2F2003%2F01%2Fgeo%2Fwgs84_pos%23%3E%0D%0APREFIX+dbo%3A+%3Chttp%3A%2F%2Fdbpedia.org%2Fontology%2F%3E%0D%0A%0D%0ASELECT+%3Fa+%283%2F3+AS+%3Fy%29%0D%0AWHERE+%0D%0A%7B+%0D%0A+++++%3Fa+dc%3Adescription+%22English+footballer%22+.%0D%0A+++++%3Fa+dbpedia2%3AplaceOfBirth+%3AMerseyside+.%0D%0A%7D
> 6: http://stackoverflow.com/a/15658884/889604


The snorql code was using the wrong method to encode the query string before 
calling the real /sparql interface.

It was using the very old 'escape()' javascript function which does not encode 
the + character as a special character. 

It then uses that escaped string to call the real /sparql endpoint. 

When the /sparql endpoint decodes the &query=XXXX3+3YYYYY string it decodes the 
+ character as a space thereby creating a syntax error in your query.

I fixed the snorql code on http://dbpedia.org to use the encodeURIComponent 
function which is the proper way of embedding a query as a parameter argument 
in a URL.
 

Patrick
--
OpenLink Software
------------------------------------------------------------------------------
Download BIRT iHub F-Type - The Free Enterprise-Grade BIRT Server
from Actuate! Instantly Supercharge Your Business Reports and Dashboards
with Interactivity, Sharing, Native Excel Exports, App Integration & more
Get technology previously reserved for billion-dollar corporations, FREE
http://pubads.g.doubleclick.net/gampad/clk?id=190641631&iu=/4140/ostg.clktrk
_______________________________________________
Dbpedia-discussion mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/dbpedia-discussion

Reply via email to