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