2013-08-16 40 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。 –