# 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])