2012-02-15 29 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のエラーメッセージのクエリには、不正なSPARQL構文であるresource:Venice,_Italyがあります。

ここで完全なURIを使用することを回避するには、現在のJSとして建物のQNamesを使用する代わりに完全なURIを作成する必要があります。代わりに、あなたのようなのQNameの

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

は、現在の操作を行います。

resource:" + where + " 
+0

おかげであなたの応答のために多くのことを。次の行がどのように見えるかを教えてください。IKS_QUERY = "PREFIXオントロジ:<http://dbpedia.org/ontology/> PREFIXプロパティ: PREFIXリソース: http://dbpedia.org/resource/>プレフィックスの位置: SELECT DISTINCT?Abstract?ThumbnailURL WHERE {resource: "+ where +" ontology:オントロジー:サムネイル?ThumbnailURL。FILTER(lang(?Abstract)= \ "en \")} "; – user160820

+1

'resource:" + where + "'ビットを私の答えで示した別の完全なURI形式に置き換えてください – RobV