RDF, Sparql query with python

A simple query to test rdf and sparql.

[codesyntax lang="python"]
import sys
import rdflib
from rdflib.Graph import ConjunctiveGraph

g = ConjunctiveGraph()

g.parse(sys.argv[1], format="xml")

fbns = rdflib.Namespace("http://rdf.freebase.com/ns/")

player_refs = g.query("""SELECT ?player
        WHERE {
            ?root fb:soccer.football_roster_position.player ?player .
        }""", initNs={'fb':fbns})
players = []
for player in player_refs:
    gp = ConjunctiveGraph()
    gp.parse(player[0], format="xml")
    results = gp.query("""SELECT ?player_name ?player_position
        WHERE {
            ?player fb:type.object.name ?player_name .
            ?player fb:soccer.football_player.position_s ?player_position .
        }""", initNs={'fb':fbns})
    l = list(results)
    for r in l:
        if r[0].language == 'en':
            players.append(r)

for player in players:
    print player

[/codesyntax]

The query will return all player-position tuple from freebase’s db for specified resource.
To query for players of AC Milan, execute the script with resource location:
python rdfquery.py http://rdf.freebase.com/rdf/en/ac_milan
got:
(rdflib.Literal(‘Yoann Gourcuff’, language=u’en’, datatype=None), rdflib.URIRef(‘http://rdf.freebase.com/ns/en.midfielder’))
(rdflib.Literal(‘Andrea Pirlo’, language=u’en’, datatype=None), rdflib.URIRef(‘http://rdf.freebase.com/ns/en.midfielder’))
(rdflib.Literal(‘Paolo Maldini’, language=u’en’, datatype=None), rdflib.URIRef(‘http://rdf.freebase.com/ns/en.defender’))
(rdflib.Literal(‘Gianluca Zambrotta’, language=u’en’, datatype=None), rdflib.URIRef(‘http://rdf.freebase.com/ns/en.defender’))
(rdflib.Literal(‘Davide Facchin’, language=u’en’, datatype=None), rdflib.URIRef(‘http://rdf.freebase.com/ns/guid.9202a8c04000641f8000000000c75e75′))
(rdflib.Literal(‘Marcus Plinio Diniz Paixao’, language=u’en’, datatype=None), rdflib.URIRef(‘http://rdf.freebase.com/ns/en.defender’))

All resources are stored as rdf:resource references. If you are also Milan fan like me, take a quick look at the players, well, the data is not up to date:)

I have also tried to fetch data for my favorite local team.
python rdfquery.py http://rdf.freebase.com/rdf/en/jiangsu_shuntian
(rdflib.Literal(‘Yao Hanlin’, language=u’en’, datatype=None), rdflib.URIRef(‘http://rdf.freebase.com/ns/en.midfielder’))

Leave a Reply

Your email address will not be published. Required fields are marked *

*

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>