2017-01-03 13 views
1

У меня есть эта функция JavaScript, которая направлена ​​на вставку ключевого слова в именованный граф, который принадлежит набору данных project.Jena Fuseki не работает при создании запроса вставки из javascript. Нет Ошибка обновления параметра

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); 
} 

Я выполнил Jena фусеки с опцией --update. Функция 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 и here, выполнив запрос, используя http://localhost:3030/project/update. Дело в том, что если я выполню тот же запрос поверх локального сервера Fuseki с тем же URL-адресом конечной точки с помощью Интернета, он работает, но из кода JavaScript он вызывает ошибку: «Ошибка запроса SPARQL: 400 Ошибка 400 : SPARQL Update: No 'update =' параметр ". Я использую Ubuntu 16.04 и Jena Fuseki - версия 2.4.1.

ответ

2

Для решения этой проблемы необходимо изменить параметр =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"); 
    }