2012-02-15 5 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"; 

и имеющее специальный charactes в плане поиска я получаю следующее сообщение об ошибке.

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 вам следует создавать полные URI, например.

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

Вместо QNames, как вы делаете в данный момент:

resource:" + where + " 
+0

Спасибо большое за ответ. Не могли бы вы помочь мне, как следующая строка будет выглядеть как var IKS_QUERY = "PREFIX ontology: <http://dbpedia.org/ontology/> Свойство PREFIX: Ресурс PREFIX: < http://dbpedia.org/resource/> PREFIX position: SELECT DISTINCT? Аннотация? ThumbnailURL WHERE {ресурс: «+ где +» онтология: Аннотация: ресурс: «+ где +» онтология: thumbnail ThumbnailURL. FILTER (lang (? Abstract) = \ "en \")} "; – user160820

+1

Просто замените бит 'resource:" + where + "' с альтернативной формой полного URI, показанной в моем ответе – RobV

Смежные вопросы