Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/creactistore/_templates/lib/rdflib/collection.py
diff options
context:
space:
mode:
Diffstat (limited to 'creactistore/_templates/lib/rdflib/collection.py')
-rw-r--r--creactistore/_templates/lib/rdflib/collection.py262
1 files changed, 0 insertions, 262 deletions
diff --git a/creactistore/_templates/lib/rdflib/collection.py b/creactistore/_templates/lib/rdflib/collection.py
deleted file mode 100644
index 6b61dd8..0000000
--- a/creactistore/_templates/lib/rdflib/collection.py
+++ /dev/null
@@ -1,262 +0,0 @@
-from rdflib.namespace import RDF
-from rdflib.term import BNode
-from rdflib.term import Literal
-from rdflib.graph import Graph
-from rdflib.py3compat import format_doctest_out
-
-__all__ = ['Collection']
-
-class Collection(object):
- __doc__ = format_doctest_out("""
- See 3.3.5 Emulating container types: http://docs.python.org/ref/sequence-types.html#l2h-232
-
- >>> from rdflib.graph import Graph
- >>> listName = BNode()
- >>> g = Graph('IOMemory')
- >>> listItem1 = BNode()
- >>> listItem2 = BNode()
- >>> g.add((listName,RDF.first,Literal(1)))
- >>> g.add((listName,RDF.rest,listItem1))
- >>> g.add((listItem1,RDF.first,Literal(2)))
- >>> g.add((listItem1,RDF.rest,listItem2))
- >>> g.add((listItem2,RDF.rest,RDF.nil))
- >>> g.add((listItem2,RDF.first,Literal(3)))
- >>> c=Collection(g,listName)
- >>> print(list(c))
- [rdflib.term.Literal(%(u)s'1', datatype=rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#integer')), rdflib.term.Literal(%(u)s'2', datatype=rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#integer')), rdflib.term.Literal(%(u)s'3', datatype=rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#integer'))]
- >>> 1 in c
- True
- >>> len(c)
- 3
- >>> c._get_container(1) == listItem1
- True
- >>> c.index(Literal(2)) == 1
- True
- """)
- def __init__(self, graph, uri, seq=[]):
- self.graph = graph
- self.uri = uri or BNode()
- for item in seq:
- self.append(item)
-
- def n3(self):
- """
- >>> from rdflib.graph import Graph
- >>> listName = BNode()
- >>> g = Graph('IOMemory')
- >>> listItem1 = BNode()
- >>> listItem2 = BNode()
- >>> g.add((listName,RDF.first,Literal(1)))
- >>> g.add((listName,RDF.rest,listItem1))
- >>> g.add((listItem1,RDF.first,Literal(2)))
- >>> g.add((listItem1,RDF.rest,listItem2))
- >>> g.add((listItem2,RDF.rest,RDF.nil))
- >>> g.add((listItem2,RDF.first,Literal(3)))
- >>> c=Collection(g,listName)
- >>> print(c.n3())
- ( "1"^^<http://www.w3.org/2001/XMLSchema#integer> "2"^^<http://www.w3.org/2001/XMLSchema#integer> "3"^^<http://www.w3.org/2001/XMLSchema#integer> )
- """
- return "( %s )"%(' '.join([i.n3() for i in self]))
-
- def _get_container(self, index):
- """Gets the first, rest holding node at index."""
- assert isinstance(index, int)
- graph = self.graph
- container = self.uri
- i = 0
- while i<index:
- i += 1
- container = graph.value(container, RDF.rest)
- if container is None:
- break
- return container
-
- def __len__(self):
- """length of items in collection."""
- count = 0
- links=set()
- for item in self.graph.items(self.uri):
- assert item not in links,"There is a loop in the RDF list! (%s has been processed before)"%item
- links.add(item)
- count += 1
- return count
-
- def index(self, item):
- """
- Returns the 0-based numerical index of the item in the list
- """
- listName = self.uri
- index = 0
- while True:
- if (listName,RDF.first,item) in self.graph:
- return index
- else:
- newLink = list(self.graph.objects(listName,RDF.rest))
- index += 1
- if newLink == [RDF.nil]:
- raise ValueError("%s is not in %s"%(item,self.uri))
- elif not newLink:
- raise Exception("Malformed RDF Collection: %s"%self.uri)
- else:
- assert len(newLink)==1, "Malformed RDF Collection: %s"%self.uri
- listName = newLink[0]
-
- def __getitem__(self, key):
- """TODO"""
- c = self._get_container(key)
- if c:
- v = self.graph.value(c, RDF.first)
- if v:
- return v
- else:
- raise KeyError, key
- else:
- raise IndexError, key
-
- def __setitem__(self, key, value):
- """TODO"""
- c = self._get_container(key)
- if c:
- self.graph.add((c, RDF.first, value))
- else:
- raise IndexError, key
-
-
- def __delitem__(self, key):
- """
- >>> from rdflib.namespace import RDF, RDFS
- >>> from rdflib import Graph
- >>> from pprint import pformat
- >>> g=Graph()
- >>> a=BNode('foo')
- >>> b=BNode('bar')
- >>> c=BNode('baz')
- >>> g.add((a,RDF.first,RDF.type))
- >>> g.add((a,RDF.rest,b))
- >>> g.add((b,RDF.first,RDFS.label))
- >>> g.add((b,RDF.rest,c))
- >>> g.add((c,RDF.first,RDFS.comment))
- >>> g.add((c,RDF.rest,RDF.nil))
- >>> len(g)
- 6
- >>> def listAncestry(node,graph):
- ... for i in graph.subjects(RDF.rest,node):
- ... yield i
- >>> [str(node.n3()) for node in g.transitiveClosure(listAncestry,RDF.nil)]
- ['_:baz', '_:bar', '_:foo']
- >>> lst=Collection(g,a)
- >>> len(lst)
- 3
- >>> b==lst._get_container(1)
- True
- >>> c==lst._get_container(2)
- True
- >>> del lst[1]
- >>> len(lst)
- 2
- >>> len(g)
- 4
-
- """
- self[key] # to raise any potential key exceptions
- graph = self.graph
- current = self._get_container(key)
- assert current
- if len(self)==1 and key>0:
- pass
- elif key==len(self)-1:
- #the tail
- priorLink = self._get_container(key-1)
- self.graph.set((priorLink,RDF.rest,RDF.nil))
- graph.remove((current, None, None))
- else:
- next = self._get_container(key+1)
- prior = self._get_container(key-1)
- assert next and prior
- graph.remove((current, None, None))
- graph.set((prior, RDF.rest, next))
-
- def __iter__(self):
- """Iterator over items in Collections"""
- return self.graph.items(self.uri)
-
- def append(self, item):
- """
- >>> from rdflib.graph import Graph
- >>> listName = BNode()
- >>> g = Graph()
- >>> c=Collection(g,listName,[Literal(1),Literal(2)])
- >>> links = [list(g.subjects(object=i,predicate=RDF.first))[0] for i in c]
- >>> len([i for i in links if (i,RDF.rest,RDF.nil) in g])
- 1
-
- """
- container = self.uri
- graph = self.graph
- #iterate to the end of the linked list
- rest = graph.value(container, RDF.rest)
- while rest:
- if rest == RDF.nil:
- #the end, append to the end of the linked list
- node = BNode()
- graph.set((container, RDF.rest, node))
- container=node
- break
- else:
- #move down one link
- if container != self.uri:
- rest = graph.value(rest, RDF.rest)
- if not rest == RDF.nil:
- container=rest
- graph.add((container, RDF.first, item))
- graph.add((container, RDF.rest, RDF.nil))
-
- def clear(self):
- container = self.uri
- graph = self.graph
- while container:
- rest = graph.value(container, RDF.rest)
- graph.remove((container, RDF.first, None))
- graph.remove((container, RDF.rest, None))
- container = rest
-def test():
- import doctest
- doctest.testmod()
-
-if __name__=="__main__":
- test()
-
- g = Graph()
-
- c = Collection(g, BNode())
-
- assert len(c)==0
-
- c = Collection(g, BNode(), [Literal("1"), Literal("2"), Literal("3"), Literal("4")])
-
- assert len(c)==4
-
- assert c[1]==Literal("2"), c[1]
-
- del c[1]
-
- assert list(c)==[Literal("1"), Literal("3"), Literal("4")], list(c)
-
- try:
- del c[500]
- except IndexError, i:
- pass
-
- c.append(Literal("5"))
-
- print(list(c))
-
- for i in c:
- print(i)
-
- del c[3]
-
- c.clear()
-
- assert len(c)==0
-