以前Kobe.R no 13に参加してきました - shigeponが関心のある技術情報などでLinked Open Dataが気になってたので、Pythonでいじれるライブラリを探してみて遊んでみた。

Sparqlで色々試してみると面白そうなので、pip search sparqlで出た結果とググってみた結果から、SPARQLWrapperが何となく良さげかなと思い、インストールしてみた。

$ pip install SPARQLWrapper

これだけでおk

djangoのshellから使ってみる

$ python manage.py shell
from SPARQLWrapper import SPARQLWrapper, JSON
sparql = SPARQLWrapper("http://dbpedia.org/sparql")
sparql.setQuery("""
  PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
  SELECT ?label
  WHERE { <http://dbpedia.org/resource/Asturias> rdfs:label ?label }
""")
sparql.setReturnFormat(JSON)
results = sparql.query().convert()

<!-- more -->

for result in results["results"]["bindings"]:
    print(result["label]["value"])

とやるとこんな感じの結果が出た

Asturias
منطقة أستورياس
Asturien
Asturias
Asturies
Asturie
アストゥリアス州
Asturië (regio)
Asturia
Astúrias
Астурия
阿斯图里亚斯

参考:SPARQL Endpoint interface to Python

Sparqlの書き方はKobe.R: Kobe.R #13 + Open Dataに載っているスライドが参考になる。

Linked Open Dataで1つ気になるのが、エンドポイントをどうやって探すかなんだけど、今の所ググってみるくらいしかやり方が分からない。ここらへん何か良い方法無いのかなー。