Mercurial > repos > guerler > springsuite
diff planemo/lib/python3.7/site-packages/rdflib/plugins/sparql/results/rdfresults.py @ 1:56ad4e20f292 draft
"planemo upload commit 6eee67778febed82ddd413c3ca40b3183a3898f1"
author | guerler |
---|---|
date | Fri, 31 Jul 2020 00:32:28 -0400 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/planemo/lib/python3.7/site-packages/rdflib/plugins/sparql/results/rdfresults.py Fri Jul 31 00:32:28 2020 -0400 @@ -0,0 +1,61 @@ +from rdflib import Graph, Namespace, RDF, Variable + +from rdflib.query import Result, ResultParser + +RS = Namespace('http://www.w3.org/2001/sw/DataAccess/tests/result-set#') + + +class RDFResultParser(ResultParser): + def parse(self, source, **kwargs): + return RDFResult(source, **kwargs) + + +class RDFResult(Result): + + def __init__(self, source, **kwargs): + + if not isinstance(source, Graph): + graph = Graph() + graph.load(source, **kwargs) + else: + graph = source + + rs = graph.value(predicate=RDF.type, object=RS.ResultSet) + # there better be only one :) + + if rs is None: + type_ = 'CONSTRUCT' + + # use a new graph + g = Graph() + g += graph + + else: + + askAnswer = graph.value(rs, RS.boolean) + + if askAnswer is not None: + type_ = 'ASK' + else: + type_ = 'SELECT' + + Result.__init__(self, type_) + + if type_ == 'SELECT': + self.vars = [Variable(v) for v in graph.objects(rs, + RS.resultVariable)] + + self.bindings = [] + + for s in graph.objects(rs, RS.solution): + sol = {} + for b in graph.objects(s, RS.binding): + sol[Variable(graph.value( + b, RS.variable))] = graph.value(b, RS.value) + self.bindings.append(sol) + elif type_ == 'ASK': + self.askAnswer = askAnswer.value + if askAnswer.value == None: + raise Exception('Malformed boolean in ask answer!') + elif type_ == 'CONSTRUCT': + self.graph = g