2017-01-03 24 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 Fuseki的--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。

我跟着討論了herehere,使用http://localhost:3030/project/update執行查詢。問題是,如果我使用Web在具有相同端點URL的本地Fuseki服務器上執行相同的查詢,它可以工作,但是從JavaScript代碼中,它會引發錯誤: 「SPARQL查詢錯誤:400錯誤400 :SPARQL更新:無'update ='參數「。 我使用Ubuntu 16.04和Jena Fuseki - 版本2.4.1。

回答

2

要解決此問題,=query參數必須更改爲=update。另外,必須處理具有查詢類型的參數,即updatequery

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"); 
    } 
相關問題