DBPedia的SPARQL和SNORQL返回不同的结果

时间:2015-02-19 16:08:56

标签: sparql dbpedia

DBpedia SPARQL endpoint中,正在运行

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

显示在默西塞德郡出生的所有English Footballers,列y只在每行[result link]上显示值6;但是,same query上的SNORQL endpoint会显示错误:

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

更奇怪的是,使用任何其他3个算术运算符 在SNORQL端点中工作(例如with division

A previous question暗示SPARQL和SNORQL端点应该返回相同的结果,那么这里发生了什么?!

3 个答案:

答案 0 :(得分:4)

snorql代码使用'escape'javascript函数,该函数不是正确的函数来编码需要作为参数参数嵌入到官方/ sparql端点的文本片段。

这导致+字符作为文字传输,并由/ sparql端点解码为空格字符,改变了查询的语法。

我们修复了dbpedia.org上的snorql代码,使用了encodeURIComponent,如下所示:

url = url +'&amp; query ='+ encodeURIComponent(query_text);

答案 1 :(得分:1)

Kingsley Idehen在邮件列表上回复说:

  

snorql没有正确编码加,因此表达式变为:   &#34; SELECT?a(3 3 AS?y)“这是错误的。

答案 2 :(得分:1)

关闭证明,通过&#34; Cool URI&#34;它与实际数据状态松散耦合。