Я использую эти функции Python:
def createConcat(self, data, separator = ";;;"):
""" Creates concat string. """
return "(group_concat(distinct ?"+data+";separator='"+separator+"') as ?"+data+"_s)"
def createSparqlQuery(self, data, separator = ";;;", key = "root", offset = 100):
"""Generates SPARQL query from input file."""
query = []
orderby = []
select = "SELECT DISTINCT"
#from_each_subpage
for prop in data['select']:
if prop.endswith("_s"):
select +=" "+ self.createConcat(prop.split("_")[0])
else:
v = "?"+ prop.replace('_X','')
select += " "+ v
orderby.append(v)
where = " WHERE { "
closing = 1
query.append(select)
query.append(where)
try:
service = "SERVICE "+data['service'] + " {"
query.append(service)
closing += 1
except:
pass
query.append('\n'.join(data[key]))
while closing > 0:
query.append('}')
closing -= 1
o = " ORDER BY " + ' '.join(orderby)
query.append(o)
try:
limit = data['limit']
l = " LIMIT %s" % limit
query.append(l)
except:
pass
complete_query = '\n'.join(query)
print complete_query
return complete_query
Так что немного строковых манипуляций с подстановкой " distinct?" + data + ";"
, l = " LIMIT %s" % limit
, добавление каждой строки в список и затем присоединение к списку для создания запросас: complete_query = '\n'.join(query)
ОБНОВЛЕНИЕ:
Чтобы ответить на запрос OP более четко:
query_parts = []
baseiri = "PREFIX ont: <%s>" % self.baseiri
select_where = "SELECT ?class WHERE {"
queryonto = "ont: %s a ?class ." % self.queryonto
closing = "}"
query_parts.append(baseiri)
query_parts.append(select_where)
query_parts.append(queryonto)
query_parts.append(closing)
self.request = "\n".join(query_parts)
Также убедитесь, что self.queryonto
имеетstring
представление.