#!/usr/bin/python """Eep-Plex Integration""" __author__ = 'Sean B. Palmer' __license__ = 'Copyright (C) 2001 Sean B. Palmer. GNU GPL 2' import urllib try: import eep import plexrdf.rdfapi as rdf import plexrdf.ntriples as ntriples except: import rdfapi, ntriples import eep.eep as eep def nodeToArticle(node): if hasattr(node, 'uri'): if node.uri[0:6] == 'data:,': return eep.Article('"'+urllib.unquote(node.uri[6:])+'"') else: return eep.Article('<'+node.uri+'>') elif hasattr(node, 'ruid'): if hasattr(node, 'universal'): return eep.Article('?'+node.ruid) else: return eep.Article('_:'+node.ruid) else: raise "Odd node:", node def articleToNode(article): if article.type == 'URI': return rdf.node(str(article.val)) elif article.type == 'Literal': return rdf.node(unicode(article.val)) elif article.type == 'Exivar': return rdf.node() elif article.type == 'Univar': return rdf.node(uni=1) else: raise "Odd Article:", article def plexToEep(store): triples = [] for triple in store: triples.append([nodeToArticle(triple.subject), nodeToArticle(triple.predicate), nodeToArticle(triple.object)]) return triples def eepToPlex(triples): store, bNodes = rdf.Store(), {} for t in triples: for pos in (0, 1, 2): if t[pos].repr in bNodes.keys(): t[pos] = bNodes[t[pos].repr] elif t[pos].type == 'Exivar': b = articleToNode(t[pos]) bNodes[t[pos].repr] = b t[pos] = b else: t[pos] = articleToNode(t[pos]) store.triple(t[0], t[1], t[2]) return store def test(): print dir(rdf) print rdf.__doc__ store = rdf.Store() store.triple('http://www.w3.org/', 'dc:title', u"World Wide Web Consortium (W3C)") store.triple('http://www.w3.org/', 'dc:title', u"World Wide Web Consortium (W3C)") store.triple(rdf.node(), 'temp:eats', 'temp:food') store.triple(rdf.node(uni=1), 'rdf:type', 'rdfs:Resource') print 'PlexStore:', store store = plexToEep(store) print 'Eep Store:', store store = eepToPlex(store) print 'PlexStore:', store store = plexToEep(store) print 'Eep Store:', store print document = """ _:Plex <#canBeUsedWith> _:Eep . _:Plex <#label> "Plex" . _:Eep <#label> "Eep" . """.strip() plexn = ntriples.parse(document) eepn = eep.parse(document) print 'Raw Plex:\n', ntriples.serialize(plexn), '\n' print 'Raw Eep:\n', eep.serialize(eepn), '\n' nplex = eepToPlex(eepn) neep = plexToEep(plexn) print 'Eep => Plex:\n', ntriples.serialize(nplex), '\n' print 'Plex => Eep:\n', eep.serialize(neep), '\n' if __name__=="__main__": print __doc__ test()