Mercurial > repos > shellac > guppy_basecaller
comparison env/lib/python3.7/site-packages/rdflib/plugins/serializers/n3.py @ 0:26e78fe6e8c4 draft
"planemo upload commit c699937486c35866861690329de38ec1a5d9f783"
| author | shellac |
|---|---|
| date | Sat, 02 May 2020 07:14:21 -0400 |
| parents | |
| children |
comparison
equal
deleted
inserted
replaced
| -1:000000000000 | 0:26e78fe6e8c4 |
|---|---|
| 1 """ | |
| 2 Notation 3 (N3) RDF graph serializer for RDFLib. | |
| 3 """ | |
| 4 from rdflib.graph import Graph | |
| 5 from rdflib.namespace import Namespace, OWL | |
| 6 from rdflib.plugins.serializers.turtle import ( | |
| 7 TurtleSerializer, SUBJECT, OBJECT) | |
| 8 | |
| 9 __all__ = ['N3Serializer'] | |
| 10 | |
| 11 SWAP_LOG = Namespace("http://www.w3.org/2000/10/swap/log#") | |
| 12 | |
| 13 | |
| 14 class N3Serializer(TurtleSerializer): | |
| 15 | |
| 16 short_name = "n3" | |
| 17 | |
| 18 def __init__(self, store, parent=None): | |
| 19 super(N3Serializer, self).__init__(store) | |
| 20 self.keywords.update({ | |
| 21 OWL.sameAs: '=', | |
| 22 SWAP_LOG.implies: '=>' | |
| 23 }) | |
| 24 self.parent = parent | |
| 25 | |
| 26 def reset(self): | |
| 27 super(N3Serializer, self).reset() | |
| 28 self._stores = {} | |
| 29 | |
| 30 def subjectDone(self, subject): | |
| 31 super(N3Serializer, self).subjectDone(subject) | |
| 32 if self.parent: | |
| 33 self.parent.subjectDone(subject) | |
| 34 | |
| 35 def isDone(self, subject): | |
| 36 return (super(N3Serializer, self).isDone(subject) | |
| 37 and (not self.parent or self.parent.isDone(subject))) | |
| 38 | |
| 39 def startDocument(self): | |
| 40 super(N3Serializer, self).startDocument() | |
| 41 # if not isinstance(self.store, N3Store): | |
| 42 # return | |
| 43 # | |
| 44 # all_list = [self.label(var) for var in | |
| 45 # self.store.get_universals(recurse=False)] | |
| 46 # all_list.sort() | |
| 47 # some_list = [self.label(var) for var in | |
| 48 # self.store.get_existentials(recurse=False)] | |
| 49 # some_list.sort() | |
| 50 # | |
| 51 # for var in all_list: | |
| 52 # self.write('\n'+self.indent()+'@forAll %s. '%var) | |
| 53 # for var in some_list: | |
| 54 # self.write('\n'+self.indent()+'@forSome %s. '%var) | |
| 55 # | |
| 56 # if (len(all_list) + len(some_list)) > 0: | |
| 57 # self.write('\n') | |
| 58 | |
| 59 def endDocument(self): | |
| 60 if not self.parent: | |
| 61 super(N3Serializer, self).endDocument() | |
| 62 | |
| 63 def indent(self, modifier=0): | |
| 64 indent = super(N3Serializer, self).indent(modifier) | |
| 65 if self.parent is not None: | |
| 66 indent += self.parent.indent() # modifier) | |
| 67 return indent | |
| 68 | |
| 69 def preprocessTriple(self, triple): | |
| 70 super(N3Serializer, self).preprocessTriple(triple) | |
| 71 if isinstance(triple[0], Graph): | |
| 72 for t in triple[0]: | |
| 73 self.preprocessTriple(t) | |
| 74 if isinstance(triple[2], Graph): | |
| 75 for t in triple[2]: | |
| 76 self.preprocessTriple(t) | |
| 77 | |
| 78 def getQName(self, uri, gen_prefix=True): | |
| 79 qname = None | |
| 80 if self.parent is not None: | |
| 81 qname = self.parent.getQName(uri, gen_prefix) | |
| 82 if qname is None: | |
| 83 qname = super(N3Serializer, self).getQName(uri, gen_prefix) | |
| 84 return qname | |
| 85 | |
| 86 def statement(self, subject): | |
| 87 self.subjectDone(subject) | |
| 88 properties = self.buildPredicateHash(subject) | |
| 89 if len(properties) == 0: | |
| 90 return False | |
| 91 return (self.s_clause(subject) | |
| 92 or super(N3Serializer, self).statement(subject)) | |
| 93 | |
| 94 def path(self, node, position, newline=False): | |
| 95 if not self.p_clause(node, position): | |
| 96 super(N3Serializer, self).path(node, position, newline) | |
| 97 | |
| 98 def s_clause(self, subject): | |
| 99 if isinstance(subject, Graph): | |
| 100 self.write('\n' + self.indent()) | |
| 101 self.p_clause(subject, SUBJECT) | |
| 102 self.predicateList(subject) | |
| 103 self.write(' .') | |
| 104 return True | |
| 105 else: | |
| 106 return False | |
| 107 | |
| 108 def p_clause(self, node, position): | |
| 109 if isinstance(node, Graph): | |
| 110 self.subjectDone(node) | |
| 111 if position is OBJECT: | |
| 112 self.write(' ') | |
| 113 self.write('{') | |
| 114 self.depth += 1 | |
| 115 serializer = N3Serializer(node, parent=self) | |
| 116 serializer.serialize(self.stream) | |
| 117 self.depth -= 1 | |
| 118 self.write(self.indent() + '}') | |
| 119 return True | |
| 120 else: | |
| 121 return False |
