DBPedia 的 SPARQL 和 SNORQL 返回不同的结果
DBPedia's SPARQL and SNORQL returning different results
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
仅在每一行显示值 6
[result link]; however, the same query on the 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 端点应该 return 相同的结果,那么这里发生了什么?!
Kingsley Idehen 在邮件列表中回复说:
The snorql doesn't encode properly plus, so the expression becomes :
"SELECT ?a (3 3 AS ?y)” which is wrong.
snorql 代码使用了 'escape' javascript 函数,该函数不是对一段文本进行编码的正确函数,该文本需要作为参数参数嵌入到官方 /sparql 端点。
这导致 + 字符作为文字传输,并被 /sparql 端点解码为 space 字符,从而改变查询的语法。
我们修复了 dbpedia.org 上的 snorql 代码以使用 encodeURIComponent,如:
url = url + '&query=' + encodeURIComponent(query_text);
闭包证明,通过与实际数据状态松散耦合的“Cool URI”。
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
仅在每一行显示值 6
[result link]; however, the same query on the 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 端点应该 return 相同的结果,那么这里发生了什么?!
Kingsley Idehen 在邮件列表中回复说:
The snorql doesn't encode properly plus, so the expression becomes : "SELECT ?a (3 3 AS ?y)” which is wrong.
snorql 代码使用了 'escape' javascript 函数,该函数不是对一段文本进行编码的正确函数,该文本需要作为参数参数嵌入到官方 /sparql 端点。
这导致 + 字符作为文字传输,并被 /sparql 端点解码为 space 字符,从而改变查询的语法。
我们修复了 dbpedia.org 上的 snorql 代码以使用 encodeURIComponent,如:
url = url + '&query=' + encodeURIComponent(query_text);
闭包证明,通过与实际数据状态松散耦合的“Cool URI”。