2013-08-16 1 views
0

Я пытаюсь построить запрос sparql на основе списка свойств, но я получаю сообщение об ошибке, что запрос плохо сформирован. Проблема в том, что я не знаю, что делать, чтобы исправить это.Sparql query bad generated

Это функция:

def create_query(dbpedia_uri, props): 
    #props are something like this ('dbpedia-owl', 'birthdate') 
    filters = '' 

    for prop in QUERIES_DICT[ename]: 
     filters += ' OPTIONAL { ?x %s:%s ?%s. } \n' % (corresp_dict[prop[0]], prop[1], prop[1]) 

    query = u""" 
     SELECT * WHERE { 
.   <%s>. 
      ?x dbpedia-owl:abstract ?abstract. 
      %s 
      FILTER (LANG(?abstract) = 'en') 
     } 
    """ % (dbpedia_uri, filters) 

    return query 

Это запрос, я получаю:

u"\n  SELECT * WHERE { <http://dbpedia.org/resource/Tim_Cook>\n   ?x dbpedia-owl:abstract ?abstract.\n   OPTIONAL { ?x dbpedia-owl:birthDate ?birthDate. }\n OPTIONAL { ?x dbpedia-owl:birthPlace ?birthPlace. }\n OPTIONAL { ?x dbpprop:name ?name. }\n OPTIONAL { ?x dbpedia-owl:profession ?profession. }\n OPTIONAL { ?x dbpprop:residence ?residence. }\n OPTIONAL { ?x dbpprop:website ?website. }\n \n   FILTER (LANG(?abstract) = 'en')\n  }\n " 

Или напечатал:

 SELECT * WHERE { <http://dbpedia.org/resource/Tim_Cook> 
      ?x dbpedia-owl:abstract ?abstract. 
      OPTIONAL { ?x dbpedia-owl:birthDate ?birthDate. } 
OPTIONAL { ?x dbpedia-owl:birthPlace ?birthPlace. } 
OPTIONAL { ?x dbpprop:name ?name. } 
OPTIONAL { ?x dbpedia-owl:profession ?profession. } 
OPTIONAL { ?x dbpprop:residence ?residence. } 
OPTIONAL { ?x dbpprop:website ?website. } 

      FILTER (LANG(?abstract) = 'en') 
     } 
+0

[ответить AndyS игровая] (http://stackoverflow.com/a/18279160/1281433) пятно на; проблема в том, что префиксы не определены. Можете ли вы включить текст «ошибки, говорящей, что запрос плохо сформирован»? Я ожидаю, что он содержит подобное сообщение. –

ответ

5

Вы должны определить все префиксы, используемые, например, dbpprop, DBpedia сова

Try: http://www.sparql.org/query-validator.html

+0

Префиксы определены, посмотрите ниже на сгенерированный запрос, и вы увидите, что они добавлены. – Rod0n

+1

@ Rod0n Сгенерированный запрос, как показано, не содержит никаких строк, таких как 'PREFIX dbpedia: '. Он не определяет префиксы. Валидатор SPARQL, связанный с @AndyS, делает это понятным, говоря «Строка 2, столбец 14: неразрешенное префиксное имя: dbpedia-owl: abstract». Без определения префикса 'dbpedia-owl: abstract' не может быть расширена до полного IRI. –