diff --git a/tenet/transduction/query_builder.py b/tenet/transduction/query_builder.py index 44a186207af5c8543378ef4bb6b43dff6be10f4f..a3e6affccbf555ccbfb967137f4418af7483fecf 100644 --- a/tenet/transduction/query_builder.py +++ b/tenet/transduction/query_builder.py @@ -105,7 +105,45 @@ def generate_select_query(graph, select_data_list, clause_list): query_code += f'\n SELECT {select_data_part}' query_code += f'\n WHERE {{ {clause_part} \n }}' - return query_code + return query_code + + +def generate_select_distinct_query(graph, select_data_list, clause_list): + """ Generate a SELECT Sparql query with a select part (from select_data_list) + and a clause part (from clause_list). + + Parameters + ---------- + graph : RDFLIB Graph + target graph of the query. + select_data_list : List + list of sparql variables for the select part. + clause_list : List + list of clauses (as rdf triples or string) for the clause part. + + Returns + ------- + query_code : SPARQL query (string) + SELECT Sparql query. + + """ + + prefix = get_prefix_def() + + first = True + select_data_part = '' + for data in select_data_list: + if not first: select_data_part += ' ' + select_data_part += f'{data}' + first = False + + clause_part = __define_clause_part(graph, clause_list) + + query_code = f'{prefix}' + query_code += f'\n SELECT DISTINCT {select_data_part}' + query_code += f'\n WHERE {{ {clause_part} \n }}' + + return query_code