Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/creactistore/_templates/lib/rdflib/plugins/serializers/n3.py
blob: 63faf9dab22ed43fcdf3a817cc31977b2b588905 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
"""
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, VERB, 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