# By Alexandre Passant # Licenced under BSD licence #!/usr/bin/python import RDF import sys # Graph node color # Besed on regexp from the sameAs label colors = { 'default':'ffffff', 'flickr':'ff3399', 'facebook':'003399', 'twitter':'33ccff', 'wordpress':'666666' } def run_query(file, query): model = RDF.Model() parser = RDF.Parser() parser.parse_into_model(model, file) query = """ PREFIX foaf: PREFIX owl: PREFIX rdfs: %s""" %query query = RDF.Query(query, query_language="sparql") return query.execute(model) def get_same_as(file, uri) : sparql = """ SELECT DISTINCT ?sameAs ?seeAlso ?label WHERE { <%s> owl:sameAs ?sameAs . ?sameAs rdfs:seeAlso ?seeAlso ; rdfs:label ?label } """ %uri return run_query(file, sparql) def get_rel_from_uri(file, uri) : sparql = """ SELECT DISTINCT ?name ?knows ?seeAlso ?img WHERE { <%s> foaf:knows ?knows . OPTIONAL { ?knows foaf:name ?name } OPTIONAL { ?knows foaf:img ?img } OPTIONAL { ?knows rdfs:seeAlso ?seeAlso } } """ %uri return run_query(file, sparql) def get_name(file, uri) : sparql = """ SELECT DISTINCT ?name WHERE { <%s> foaf:name ?name ; } LIMIT 1 """ %uri res = run_query(file, sparql) for name in res : return name['name'] def get_color(label): l = label.lower() if colors.has_key(l): return colors[l] return colors['default'] def usage(): print """Usage: foafgear.py foaf_URI""" def foafgear(uri) : myname = get_name(uri, uri) n=net=1 print """ \t""" %myname res = get_same_as(uri, uri) for result in res: net+=1 uri = result['sameAs']._get_uri() file = result['seeAlso']._get_literal_value()['string'] label = result['label']._get_literal_value()['string'] l = label.split()[0] color = get_color(l) print """\t""" %(net, l, color) print """\t""" %net res = get_rel_from_uri(file, uri) done = [] for result in res: n+=1 knows = result['knows'] name = result['name'] img = result['img'] seeAlso = result['seeAlso'] if knows not in done: done.append(knows) if not name and seeAlso: knows = knows._get_uri() seeAlso = result['seeAlso']._get_uri() name = get_name(seeAlso, knows) if name: name = name._get_literal_value()['string'].encode('utf-8') image = '' if img: image = "image=\"%s\"" %img._get_uri() print """\t""" %(n, name, color, image) print """\t""" %(net, n) print "" if __name__ == '__main__' : if len(sys.argv) != 2: usage() else: foafgear(sys.argv[1])