diff --git a/rdflib/plugins/sparql/results/txtresults.py b/rdflib/plugins/sparql/results/txtresults.py index 426dd9a10..baa5316b4 100644 --- a/rdflib/plugins/sparql/results/txtresults.py +++ b/rdflib/plugins/sparql/results/txtresults.py @@ -43,7 +43,7 @@ def c(s, w): return "(no results)\n" else: - keys = sorted(self.result.vars) + keys = self.result.vars maxlen = [0] * len(keys) b = [ [_termString(r[k], namespace_manager) for k in keys] diff --git a/test/test_sparql.py b/test/test_sparql.py index fa5481469..6454e7ef2 100644 --- a/test/test_sparql.py +++ b/test/test_sparql.py @@ -1,8 +1,8 @@ from rdflib.plugins.sparql import sparql, prepareQuery from rdflib import Graph, URIRef, Literal, BNode, ConjunctiveGraph from rdflib.namespace import Namespace, RDF, RDFS -from rdflib.plugins.sparql import prepareQuery from rdflib.compare import isomorphic +from rdflib.term import Variable from nose.tools import eq_ @@ -163,6 +163,43 @@ def test_named_filter_graph_query(): initNs={'ex': ex})) == [(Literal('Susan'),)] +def test_txtresult(): + data = f"""\ + @prefix rdfs: <{str(RDFS)}> . + rdfs:Class a rdfs:Class ; + rdfs:isDefinedBy ; + rdfs:label "Class" ; + rdfs:comment "The class of classes." ; + rdfs:subClassOf rdfs:Resource . + """ + graph = Graph() + graph.parse(data=data, format="turtle") + result = graph.query( + """\ + SELECT ?class ?superClass ?label ?comment WHERE { + ?class rdf:type rdfs:Class. + ?class rdfs:label ?label. + ?class rdfs:comment ?comment. + ?class rdfs:subClassOf ?superClass. + } + """ + ) + vars = [ + Variable("class"), + Variable("superClass"), + Variable("label"), + Variable("comment"), + ] + assert result.type == "SELECT" + assert len(result) == 1 + assert result.vars == vars + txtresult = result.serialize(format="txt") + lines = txtresult.decode().splitlines() + assert len(lines) == 3 + vars_check = [Variable(var.strip()) for var in lines[0].split("|")] + assert vars_check == vars + + if __name__ == "__main__": import nose