从 javascript 进行插入查询时,Jena Fuseki 无法正常工作。无更新参数错误
Jena Fuseki not working when making an insert query from javascript. No Update parameter error
我有这个 JavaScript 函数,它旨在在属于 project
数据集的命名图中插入关键字。
function insert(keyword) {
var query = "INSERT DATA {GRAPH <http://test1> {<subj> <pred>'" + keyword + "'. }}";
var endpoint = "http://localhost:3030/project/update";
sparqlQueryJson(query, endpoint, showResults, true);
}
我用 --update
选项执行了 Jena Fuseki。 sparqlQueryJson函数如下:
function sparqlQueryJson(queryStr, endpoint, callback, isDebug) {
var querypart = "query=" + escape(queryStr);
// Get our HTTP request object.
var xmlhttp = null;
if (window.XMLHttpRequest) {
xmlhttp = new XMLHttpRequest();
} else if (window.ActiveXObject) {
// Code for older versions of IE, like IE6 and before.
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
} else {
alert('Perhaps your browser does not support XMLHttpRequests?');
}
// Set up a POST with JSON result format.
xmlhttp.open('POST', endpoint, true); // GET can have caching probs, so POST
xmlhttp.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
xmlhttp.setRequestHeader("Accept", "application/sparql-results+json");
// Set up callback to get the response asynchronously.
xmlhttp.onreadystatechange = function() {
if (xmlhttp.readyState == 4) {
if (xmlhttp.status == 200) {
// Process the results
callback(xmlhttp.responseText);
} else {
// Some kind of error occurred.
alert("Sparql query error: " + xmlhttp.status + " " + xmlhttp.responseText);
}
}
};
xmlhttp.send(querypart);
};
在我看来,showResults 函数在这里不是很重要,因为它获取查询结果并将它们显示在 HTML 中。
我按照讨论的内容 here and ,使用 http://localhost:3030/project/update
执行查询。问题是,如果我使用网络在具有相同端点 url 的本地 Fuseki 服务器上执行相同的查询,它会工作,但是从 JavaScript 代码来看,它会引发错误:
"SPARQL query error: 400 Error 400: SPARQL Update: No 'update=' parameter"。
我正在使用 Ubuntu 16.04 和 Jena Fuseki - 2.4.1 版。
要解决此问题,必须将 =query
参数更改为 =update
。此外,必须处理具有查询类型的参数,即 update
或 query
。
if(type==="update"){
var querypart = "update=" + escape(queryStr);
}else if(type === "query"){
var querypart = "query=" + escape(queryStr);
}
...
xmlhttp.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
if(type==="query"){
xmlhttp.setRequestHeader("Accept", "application/sparql-results+json");
}
我有这个 JavaScript 函数,它旨在在属于 project
数据集的命名图中插入关键字。
function insert(keyword) {
var query = "INSERT DATA {GRAPH <http://test1> {<subj> <pred>'" + keyword + "'. }}";
var endpoint = "http://localhost:3030/project/update";
sparqlQueryJson(query, endpoint, showResults, true);
}
我用 --update
选项执行了 Jena Fuseki。 sparqlQueryJson函数如下:
function sparqlQueryJson(queryStr, endpoint, callback, isDebug) {
var querypart = "query=" + escape(queryStr);
// Get our HTTP request object.
var xmlhttp = null;
if (window.XMLHttpRequest) {
xmlhttp = new XMLHttpRequest();
} else if (window.ActiveXObject) {
// Code for older versions of IE, like IE6 and before.
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
} else {
alert('Perhaps your browser does not support XMLHttpRequests?');
}
// Set up a POST with JSON result format.
xmlhttp.open('POST', endpoint, true); // GET can have caching probs, so POST
xmlhttp.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
xmlhttp.setRequestHeader("Accept", "application/sparql-results+json");
// Set up callback to get the response asynchronously.
xmlhttp.onreadystatechange = function() {
if (xmlhttp.readyState == 4) {
if (xmlhttp.status == 200) {
// Process the results
callback(xmlhttp.responseText);
} else {
// Some kind of error occurred.
alert("Sparql query error: " + xmlhttp.status + " " + xmlhttp.responseText);
}
}
};
xmlhttp.send(querypart);
};
在我看来,showResults 函数在这里不是很重要,因为它获取查询结果并将它们显示在 HTML 中。
我按照讨论的内容 here and http://localhost:3030/project/update
执行查询。问题是,如果我使用网络在具有相同端点 url 的本地 Fuseki 服务器上执行相同的查询,它会工作,但是从 JavaScript 代码来看,它会引发错误:
"SPARQL query error: 400 Error 400: SPARQL Update: No 'update=' parameter"。
我正在使用 Ubuntu 16.04 和 Jena Fuseki - 2.4.1 版。
要解决此问题,必须将 =query
参数更改为 =update
。此外,必须处理具有查询类型的参数,即 update
或 query
。
if(type==="update"){
var querypart = "update=" + escape(queryStr);
}else if(type === "query"){
var querypart = "query=" + escape(queryStr);
}
...
xmlhttp.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
if(type==="query"){
xmlhttp.setRequestHeader("Accept", "application/sparql-results+json");
}