任何人都可以向我展示如何加载使用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);
});
我已经尝试过类似的方法和无数其他变体,但它仍然不起作用。我不得不提到我测试了这两种情况:
- Tomcat 未安装在 Apache 中,在这种情况下我们有一个跨域请求 - 我尝试在浏览器中设置所需的所有内容;
- Tomcat 安装在 Apache 中 - 据我所知,它不需要任何其他工作,但仍然没有成功。
这是请求标头:
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 中则不会引发任何错误,但正如我在query-results.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 等)。
此致!