2013-08-16 41 views
0

我想建立一個基於屬性列表的sparql查詢,但我得到一個錯誤,說查詢是壞的形成。問題是我不知道該如何解決它。Sparql查詢不良形成

這是函數:

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的貓頭鷹

嘗試:http://www.sparql.org/query-validator.html

+0

定義了前綴,查看下面的生成查詢,你會看到它們被添加。 – Rod0n

+1

@ Rod0n所示的生成查詢不包含任何行,例如'PREFIX dbpedia:'。它沒有定義前綴。 @AndyS鏈接的SPARQL驗證程序明確說明了「第2行第14列:未解析的前綴名稱:dbpedia-owl:abstract」。沒有定義前綴,「dbpedia-owl:abstract」不能擴展爲完整的IRI。 –