Я также добавил фрагмент ниже.Этот запрос вернет название компании URI, ее название и материнскую компанию.Он работает с DBpedia.org/sparql, но не с sparqlwrapper (ничего не возвращает;)
query1 = """ PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> PREFIX dbo: <http://dbpedia.org/ontology/> PREFIX dbp: <http://dbpedia.org/property/> PREFIX db: <http://dbpedia.org/resource/> select distinct ?iri ?name ?parent (concat('[',group_concat(distinct ?location;separator=','),']') as ?location) { ?iri a dbo:Company ; rdfs:label ?label ; foaf:name ?name OPTIONAL { ?iri dbo:parentCompany ?parent. filter (!isBlank(?parent)) } OPTIONAL { ?iri dbo:location ?location.} filter(regex(?name, "\\btata steel\\b","i" )) . filter(regex(?label, "\\btata steel\\b","i" )) } GROUP BY ?iri ?name ?parent """ def get_country_description(query1): sparql = SPARQLWrapper("http://dbpedia.org/sparql") sparql.setReturnFormat('json') sparql.setQuery(query1) # the previous query as a literal string return sparql.query().convert()
избавьтесь от \\b в вашем regex выражении, и это работает!(я не знаю, зачем это нужно, так как tata steel - это целое слово)
\\b
regex
tata steel
Также вам нужно передать query1!к вашей функции!и используйте sparql.setReturnFormat('json') не JSON,
query1
sparql.setReturnFormat('json')
cheers