通过来自 node js 的 SPARQL over HTTP POST 请求插入数据

Insert data through SPARQL over HTTP POST request from node js

我在我的节点应用程序中使用 'request' 模块来 POST 驻留在 fuseki 服务器中的模型中的 ontology 数据。我正在使用以下代码:

var request = require('request');
var querystring = require('querystring');

var myquery = querystring.stringify({update: "PREFIX test:<http://www.semanticweb.org/muhammad/ontologies/2017/2/untitled-ontology-14#> INSERT { ?KPIs test:hasValue 2009} WHERE { ?KPIs test:hasValue ?Newvalue}"});


request.post('http://localhost:3030/DS-1/sparql?'+myquery, function (error, response, body) {
  if (!error && response.statusCode == 200) {
   // Show the HTML for the Google homepage.
console.log('successful update');
console.log(body);

  } else {
   console.log(response.statusCode);
   console.warn(error);
  }
});

PS:当我使用 POSTMAN 发送 Post 请求以插入数据时,它工作正常,但在我的节点应用程序中,它没有。它显示错误 'bad request 400'。 P.S:GET 方法在 POSTMAN 和节点应用程序中工作正常。

/DS-1/sparql为查询服务

INSERT是一个更新操作。

尝试/DS-1/update

最好POST 在请求正文中使用 Content-type 进行更新。 ?update= 可能无效。

已解决的问题: 我在 post 请求的格式上犯了错误。更正后的格式如下。

var request = require('request');
var querystring = require('querystring');

var myquery2 = querystring.stringify({update: "PREFIX test:<http://www.semanticweb.org/muhammad/ontologies/2017/2/untitled-ontology-14#> INSERT { ?KPI_Variables test:hasValue_ROB1 2000} WHERE { ?KPI_Variables test:hasValue_ROB1 ?Newvalue FILTER(?KPI_Variables= test:Actual_Production_Time)}"});

request.post({headers: {'content-type' : 'application/x-www-form-urlencoded'},url:'http://localhost:3030/DS-1/?'+myquery2 }, function (error, response, body) {
  if (!error && response.statusCode == 200) {
   // Show the HTML for the Google homepage.
console.log('successful update');
console.log(body);
  } 
  else
  {
   console.log(response.statusCode)
   console.warn(error);
  }
});

我的 request.post 中缺少 'headers' 和 'url' 元素。