diff planemo/lib/python3.7/site-packages/rdflib/plugins/serializers/n3.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/serializers/n3.py	Fri Jul 31 00:32:28 2020 -0400
@@ -0,0 +1,121 @@
+"""
+Notation 3 (N3) RDF graph serializer for RDFLib.
+"""
+from rdflib.graph import Graph
+from rdflib.namespace import Namespace, OWL
+from rdflib.plugins.serializers.turtle import (
+    TurtleSerializer, SUBJECT, OBJECT)
+
+__all__ = ['N3Serializer']
+
+SWAP_LOG = Namespace("http://www.w3.org/2000/10/swap/log#")
+
+
+class N3Serializer(TurtleSerializer):
+
+    short_name = "n3"
+
+    def __init__(self, store, parent=None):
+        super(N3Serializer, self).__init__(store)
+        self.keywords.update({
+            OWL.sameAs: '=',
+            SWAP_LOG.implies: '=>'
+        })
+        self.parent = parent
+
+    def reset(self):
+        super(N3Serializer, self).reset()
+        self._stores = {}
+
+    def subjectDone(self, subject):
+        super(N3Serializer, self).subjectDone(subject)
+        if self.parent:
+            self.parent.subjectDone(subject)
+
+    def isDone(self, subject):
+        return (super(N3Serializer, self).isDone(subject)
+                and (not self.parent or self.parent.isDone(subject)))
+
+    def startDocument(self):
+        super(N3Serializer, self).startDocument()
+        # if not isinstance(self.store, N3Store):
+        #    return
+        #
+        # all_list = [self.label(var) for var in
+        #        self.store.get_universals(recurse=False)]
+        # all_list.sort()
+        # some_list = [self.label(var) for var in
+        #        self.store.get_existentials(recurse=False)]
+        # some_list.sort()
+        #
+        # for var in all_list:
+        #    self.write('\n'+self.indent()+'@forAll %s. '%var)
+        # for var in some_list:
+        #    self.write('\n'+self.indent()+'@forSome %s. '%var)
+        #
+        # if (len(all_list) + len(some_list)) > 0:
+        #    self.write('\n')
+
+    def endDocument(self):
+        if not self.parent:
+            super(N3Serializer, self).endDocument()
+
+    def indent(self, modifier=0):
+        indent = super(N3Serializer, self).indent(modifier)
+        if self.parent is not None:
+            indent += self.parent.indent()  # modifier)
+        return indent
+
+    def preprocessTriple(self, triple):
+        super(N3Serializer, self).preprocessTriple(triple)
+        if isinstance(triple[0], Graph):
+            for t in triple[0]:
+                self.preprocessTriple(t)
+        if isinstance(triple[2], Graph):
+            for t in triple[2]:
+                self.preprocessTriple(t)
+
+    def getQName(self, uri, gen_prefix=True):
+        qname = None
+        if self.parent is not None:
+            qname = self.parent.getQName(uri, gen_prefix)
+        if qname is None:
+            qname = super(N3Serializer, self).getQName(uri, gen_prefix)
+        return qname
+
+    def statement(self, subject):
+        self.subjectDone(subject)
+        properties = self.buildPredicateHash(subject)
+        if len(properties) == 0:
+            return False
+        return (self.s_clause(subject)
+                or super(N3Serializer, self).statement(subject))
+
+    def path(self, node, position, newline=False):
+        if not self.p_clause(node, position):
+            super(N3Serializer, self).path(node, position, newline)
+
+    def s_clause(self, subject):
+        if isinstance(subject, Graph):
+            self.write('\n' + self.indent())
+            self.p_clause(subject, SUBJECT)
+            self.predicateList(subject)
+            self.write(' .')
+            return True
+        else:
+            return False
+
+    def p_clause(self, node, position):
+        if isinstance(node, Graph):
+            self.subjectDone(node)
+            if position is OBJECT:
+                self.write(' ')
+            self.write('{')
+            self.depth += 1
+            serializer = N3Serializer(node, parent=self)
+            serializer.serialize(self.stream)
+            self.depth -= 1
+            self.write(self.indent() + '}')
+            return True
+        else:
+            return False