2012-02-15 92 views
1

我想通過Ajax向dbperdia發送一個查詢。它工作正常,但如果搜索字詞中有特殊字符,我總是會收到一條錯誤消息。帶特殊字符的sparql查詢

我的代碼看起來像

var IKS_QUERY = "PREFIX ontology: <http://dbpedia.org/ontology/> PREFIX property: <http://dbpedia.org/property/> PREFIX resource: <http://dbpedia.org/resource/> PREFIX position:<http://www.w3.org/2003/01/geo/wgs84_pos#> SELECT DISTINCT ?Abstract ?ThumbnailURL WHERE { resource:"+where+" ontology:abstract ?Abstract. resource:"+where+" ontology:thumbnail ?ThumbnailURL. FILTER (lang(?Abstract)=\"en\")}"; 
var IKS_URL = "http://dbpedia.org/sparql?default-graph-uri=http%3A%2F%2Fdbpedia.org&query=" + escape(IKS_QUERY) + "&format=json"; 

並具有搜索詞的特殊本地字符我收到以下錯誤消息。

Virtuoso 37000 Error SP030: SPARQL compiler, line 3: syntax error at ',' before '_Italy' 

    SPARQL query: 
    define sql:big-data-const 0 
    #output-format:application/sparql-results+json 
    define input:default-graph-uri <http://dbpedia.org> PREFIX ontology: <http://dbpedia.org/ontology/> PREFIX property: <http://dbpedia.org/property/> PREFIX resource: <http://dbpedia.org/resource/> PREFIX position:<http://www.w3.org/2003/01/geo/wgs84_pos#> SELECT DISTINCT ?Abstract ?ThumbnailURL WHERE { resource:Venice,_Italy ontology:abstract ?Abstract. resource:wherePlaceHolder ontology:thumbnail ?ThumbnailURL. FILTER (lang(?Abstract)="en")} 

有什麼建議嗎?

在此先感謝!

回答

3

您生成的查詢無效,這與您通過AJAX發送無關。請注意,Virtuoso錯誤消息中的查詢具有類似resource:Venice,_Italy這是非法的SPARQL語法。

一種解決方法是在這裏使用完整的URI,而不是使用建立QNames作爲你當前的JS,你應該建立完整的URIs,例如

<http://dbpedia.org/resource/" + where + "> 

而是喜歡你的QName目前做:

resource:" + where + " 
+0

非常感謝您的回覆。你能幫我看看下面這行看起來像var IKS_QUERY =「PREFIX ontology:<http://dbpedia.org/ontology/> PREFIX屬性: PREFIX資源:< http://dbpedia.org/resource/> PREFIX position: SELECT DISTINCT?Abstract?ThumbnailURL WHERE {resource:「+ where +」ontology:抽象?資源:「+ where +」本體:縮略圖?縮略圖URL。FILTER(lang(?Abstract)= \「en \」)}「; – user160820 2012-02-15 18:57:01

+1

只需將我的答案中顯示的替代完整URI表單替換爲「resource:」+,其中+「位 – RobV 2012-02-15 19:25:29