有人能告诉我如何加载使用 jQuery的getJSON 查询 Sesame SPARQL 端点所产生的.srj文件的示例吗?我已经尝试设置Accept标头和其他技巧,但我仍然看到200代码,显然没有错误,但文件内容未加载。
$.getJSON("http://localhost:8090/openrdf-sesame/repositories/myrepo?queryLn=SPARQL&query=QUERY&limit=none&infer=true&Accept=application%2Fsparql-results%2Bjson",
{
},
function(data) {
alert('data = ', data);
});
我尝试了类似这样的东西和无数其他变种,它仍然无效。我必须提一下,我测试了两种情况:
以下是请求标头:
Accept:application/json, text/javascript, */*; q=0.01
Accept-Encoding:gzip, deflate
Accept-Language:en-us,en;q=0.5
Connection:keep-aliveHost:localhost:8090
Origin:http://localhost
Referer:http://localhost/d3v280/examples/ablodvis/localtest.html
User-Agent:Mozilla/5.0 (Windows NT 6.1; WOW64; rv:12.0) Gecko/20100101 Firefox/12.0
以下是响应标题:
Content-Disposition:attachment; filename=query-result.srj
Content-Language:en-US
Content-Type:application/sparql-results+json;charset=UTF-8
Date:Mon, 28 May 2012 14:06:06 GMT
Server:Apache-Coyote/1.1
Transfer-Encoding:chunked
正如您所看到的,我在query-result.srj文件中得到了一个结果,但我不知道如何访问它。 我非常希望第一个版本可以工作,但显然我错过了一些东西。所有类似的getJSON请求都有效。
以下是几乎有效的请求:
$.ajax({
beforeSend: function(xhrObj){
xhrObj.setRequestHeader("Accept","application/sparql-results+json");
},
dataType: 'jsonp',
url: queryUrl,
success: function(data) {
// callback code here
console.log("source: " + data.length)
alert('success!');
}
});
然而,它会在Firefox中引发“无效标签错误”,而在Chrome中它不会引发任何错误,但正如我在查询结果的第二行上看到的那样。 srj 文件显示 Uncaught SyntaxError:Unexpected token:。以下是响应的第一行:
{
"head": {
"vars": [ "s", "p", "o", "r" ]
},
"results": {
"bindings": [ ...
这一次,我能够看到请求成功完成并在我的浏览器中看到它(至少在Chrome和Firefox的调试模式下)。我应该理解jsonp技巧不适用于Sesame吗?如果我从Sesame中获取答案,将其复制到一个文件中,将其重命名为 file.js 并使用$ .getJSON加载它可以正常工作...我不想让任何服务器端此应用程序的代码,只是直接处理SPARQL查询的结果。我可以通过$ .getJSON或$ .ajax轻松设置其余的源(WorldBank,DBPedia和其他)。
祝你好运!
答案 0 :(得分:4)
我刚刚编写了我自己的简单JQuery脚本来测试它,它似乎都按预期工作。我花了很长时间才开始工作,但这主要与我的脚本与Sesame在同一台服务器上运行的事实有关。
更新以回答有关jsonp的问题:自2.7.0发布以来,Sesame支持JSONP回调(请参阅SES-1019)。
但是如果JQuery脚本在与sesame服务器相同的主机上运行,则以下脚本将查询结果作为表输出。我还没有完全弄清楚我在做什么与你不同,我并不认为这是最有效的处理重用,但至少这是有效的,所以我希望这将是有用的。
脚本:
$(document).ready(function() {
$.ajax({
url: 'http://localhost:8080/openrdf-sesame/repositories/test',
dataType: 'json',
data: {
queryLn: 'SPARQL',
query: "SELECT * WHERE { ?s ?p ?o }",
limit: 'none',
infer: 'true',
Accept: 'application/sparql-results+json'
},
success: displayData,
error: displayError
});
});
function displayError(xhr, textStatus, errorThrown) {
alert(textStatus);
alert(errorThrown);
}
function displayData(data) {
var header = $('#result thead').append('<tr/>');
$.each(data.head.vars, function(key,value) {
header.append("<th>" + value + "</th>");
});
$.each(data.results.bindings, function(index, bs) {
var row = $('<tr/>');
$.each(data.head.vars, function(key, varname) {
row.append("<td>" + bs[varname].value + "</td>");
});
$("#result tbody").after(row);
});
}
HTML正文包含一个空表:
<table id="result" border=1>
<thead/>
<tbody/>
</table>