home *** CD-ROM | disk | FTP | other *** search
- # Source Generated with Decompyle++
- # File: in.pyc (Python 2.6)
-
- import urlparse
- from xml.sax.saxutils import escape, quoteattr
- from rdflib.BNode import BNode
- from rdflib.Literal import Literal
- from rdflib.URIRef import URIRef
- from rdflib.syntax.xml_names import split_uri
- from rdflib.syntax.serializers.RecursiveSerializer import RecursiveSerializer
- from rdflib.exceptions import Error
- from rdflib import RDF, RDFS
- SUBJECT = 0
- VERB = 1
- OBJECT = 2
-
- class TurtleSerializer(RecursiveSerializer):
- short_name = 'turtle'
- indentString = ' '
-
- def __init__(self, store):
- super(TurtleSerializer, self).__init__(store)
- self.reset()
- self.stream = None
-
-
- def reset(self):
- super(TurtleSerializer, self).reset()
- self._shortNames = { }
- self._started = False
-
-
- def getQName(self, uri):
- if isinstance(uri, URIRef):
-
- try:
- parts = self.store.compute_qname(uri)
- except Exception:
- e = None
- parts = None
-
- if parts:
- (prefix, namespace, local) = parts
- if local.find('.') != -1:
- return None
- self.addNamespace(prefix, namespace)
- return u'%s:%s' % (prefix, local)
-
-
-
- def preprocessTriple(self, triple):
- super(TurtleSerializer, self).preprocessTriple(triple)
- for node in triple:
- self.getQName(node)
-
- p = triple[1]
- if isinstance(p, BNode):
- self._references[p] = self.refCount(p) + 1
-
-
-
- def label(self, node):
- qname = self.getQName(node)
- if qname is None:
- return node.n3()
- return qname
-
-
- def startDocument(self):
- self._started = True
- ns_list = list(self.store.namespaces())
- ns_list.sort()
- if len(ns_list) == 0:
- return None
- for prefix, uri in ns_list:
- self.write('\n' + self.indent() + '@prefix %s: %s.' % (prefix, uri))
-
- self.write('\n')
-
-
- def endDocument(self):
- pass
-
-
- def isValidList(self, l):
- '''Checks if l is a valid RDF list, i.e. no nodes have other properties.'''
-
- try:
- if not self.store.value(l, RDF.first):
- return False
- except:
- return False
-
- while l:
- if l != RDF.nil and len(list(self.store.predicate_objects(l))) != 2:
- return False
- l = self.store.value(l, RDF.rest)
- continue
- len(list(self.store.predicate_objects(l))) != 2
- return True
-
-
- def doList(self, l):
- while l:
- item = self.store.value(l, RDF.first)
- if item:
- self.path(item, SUBJECT)
- self.subjectDone(l)
-
- l = self.store.value(l, RDF.rest)
-
-
- def p_squared(self, node, position):
- if not isinstance(node, BNode) and node in self._serialized and self.refCount(node) > 1 or position == SUBJECT:
- return False
- if self.isValidList(node):
- self.write(' (')
- self.depth += 2
- self.doList(node)
- self.depth -= 2
- self.write(' )')
- return True
- self.subjectDone(node)
- self.write(' [')
- self.depth += 2
- self.predicateList(node)
- self.depth -= 2
- self.write(']')
- return True
-
-
- def p_default(self, node, ignore):
- self.write(' ' + self.label(node))
- return True
-
-
- def path(self, node, position):
- if not self.p_squared(node, position) or self.p_default(node, position):
- raise Error("Cannot serialize node '%s'" % (node,))
- self.p_default(node, position)
-
-
- def verb(self, node):
- if node == RDF.type:
- self.write(' a')
- else:
- self.path(node, VERB)
-
-
- def objectList(self, objects):
- if len(objects) == 0:
- return None
- self.path(objects[0], OBJECT)
- for obj in objects[1:]:
- self.write(',\n' + self.indent(2))
- self.path(obj, OBJECT)
-
-
-
- def predicateList(self, subject):
- properties = self.buildPredicateHash(subject)
- propList = self.sortProperties(properties)
- if len(propList) == 0:
- return None
- self.verb(propList[0])
- self.objectList(properties[propList[0]])
- for predicate in propList[1:]:
- self.write(';\n' + self.indent(1))
- self.verb(predicate)
- self.objectList(properties[predicate])
-
-
-
- def s_squared(self, subject):
- if self.refCount(subject) > 0 or not isinstance(subject, BNode):
- return False
- self.write('\n' + self.indent() + ' [')
- self.depth += 1
- self.predicateList(subject)
- self.depth -= 1
- self.write('].')
- return True
-
-
- def s_default(self, subject):
- self.write('\n' + self.indent())
- self.path(subject, SUBJECT)
- self.predicateList(subject)
- self.write('. ')
- return True
-
-
- def statement(self, subject):
- self.subjectDone(subject)
- if not self.s_squared(subject):
- self.s_default(subject)
-
-
-
- def serialize(self, stream, base = None, encoding = None, **args):
- self.reset()
- self.stream = stream
- self.base = base
- self.preprocess()
- subjects_list = self.orderSubjects()
- self.startDocument()
- firstTime = True
- for subject in subjects_list:
- if not self.isDone(subject):
- if firstTime:
- firstTime = False
- else:
- self.write('\n')
- self.statement(subject)
- continue
-
- self.endDocument()
-
-
-