I'm trying to build a sparql query based on a list of properties but I get an error saying that the query is bad formed. The problem is I don't know what to do to fix it.
This is the function:
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
This is the query I get:
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 "
Or printed:
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')
}
You need to define all the prefixes used e.g. dbpprop ,dbpedia-owl
Try: http://www.sparql.org/query-validator.html