比較的簡単にDBpediaのようにLinked Open Data(LOD)を公開する方法


DBpediaとは

Linked Open Data(LOD)としてデータ公開する最も有名なサイトのひとつにDBpediaがあります。
DBpedia では、Wikipediaの記事の一部をRDF化して提供しています。コンテントネゴシエーションによりリクエストにあわせたファイルフォーマットでデータを取得できます。


http://wiki.dbpedia.org/about/about-dbpedia/architecture より引用

例えば、ja.dbpedia:東京駅をブラウザで開くと東京に関する情報をWebページとして閲覧できますが、ここに掲載されているデータをXMLやJSONでほしい場合、リクエストヘッダーにその要求を記述すれば取得できるようになっています。


※ コンテントネゴシエーションにより、HTMLを取得する例。http://www.slideshare.net/fumihiro/20140904-bodik より引用

Simple LODI

今までDBpediaのような仕組みで公開する場合、自前のデータベースを作成しなければいけなかったりと若干難しい部分がありました。そこで、RDF記述言語の一種であるTurtleファイルを作成すればDBpediaのようにRDFデータをHTMLだけでなくXMLやJSONで取得できるサイトを作れるPHPプログラムを作りました。

Simple LODI: Simple Linked Open Data Interface

以下が、設置例になります。

これは、

@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix foaf: <http://xmlns.com/foaf/0.1/> .

<http://uedayou.net/simplelodi/uedayou>
    a foaf:Person ;
    foaf:mbox <mailto:[email protected]> ;
    foaf:homepage <http://uedayou.net/> ;
    foaf:name "Hiroshi Ueda" .

このTurtleのデータを表示した例になります。Webブラウザで開くと、表形式でデータが表示されます。

これを例えば、cURL などで、以下のようにリクエストを投げると

$ curl -H "Accept: application/rdf+xml" http://uedayou.net/simplelodi/uedayou

XML形式でデータが返ってきます。

<?xml version="1.0" encoding="utf-8" ?>
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
     xmlns:foaf="http://xmlns.com/foaf/0.1/">

  <foaf:Person rdf:about="http://uedayou.net/simplelodi/uedayou">
    <foaf:mbox rdf:resource="mailto:[email protected]"/>
    <foaf:homepage rdf:resource="http://uedayou.net/"/>
    <foaf:name>Hiroshi Ueda</foaf:name>
    <foaf:Image rdf:resource="http://uedayou.net/uedayou.jpg"/>
  </foaf:Person>

</rdf:RDF>

N-Triples だと
$ curl -H "Accept: application/n-triples" http://uedayou.net/simplelodi/uedayou
JSON-LD だと
$ curl -H "Accept: application/ld+json" http://uedayou.net/simplelodi/uedayou
のようになります。

コンテントネゴシエーション以外にも、ファイル拡張子を変更することで同様のデータを手軽に取得できるようにもなっています。

Turtle
http://uedayou.net/simplelodi/uedayou.ttl
XML
http://uedayou.net/simplelodi/uedayou.xml
JSON-LD
http://uedayou.net/simplelodi/uedayou.jsonld
N-Triples
http://uedayou.net/simplelodi/uedayou.nt

設置方法

以下の手順により設置できます。PHPは5.4以上をインストールしてください。また、.htaccessでmod_rewrite が使えるようにしてください。

  • simplelodi フォルダをWebサーバ上の任意の場所にコピーしてください。
  • simplelodi フォルダをリネームしてください(たとえば、resource など)
  • data フォルダに サンプルファイル(data/uedayou.ttl)を参考にTurtle ファイルを作成し、コピーしてください。
  • http:// ... /resource/[拡張子を省略したファイル名] をブラウザで開くと、HTMLが表示されます。
    ※ たとえば uedayou.ttl の場合は、 http:// ... /resource/uedayou となります
  • 対応する拡張子(対応フォーマット節 参照)をつけると、出力フォーマットを変更できます。

https://github.com/uedayou/simplelodi より

Linked Dataとして公開するためのTurtleファイル作成方法

Simple LODI で使用するTurtleファイルの作成方法によっては、Linked Dataとすることもできます。

Turtleファイル自体のURIと実際にアクセスできるURLを同じにすれば Linked Data として公開できます。TurtleファイルのライセンスがCC BYCC BY-SAなどオープンライセンスなら、Linked Open Dataになります。

@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix foaf: <http://xmlns.com/foaf/0.1/> .

<http://uedayou.net/simplelodi/uedayou>
    a foaf:Person ;
    foaf:mbox <mailto:[email protected]> ;
    foaf:homepage <http://uedayou.net/> ;
    foaf:name "Hiroshi Ueda" .

例えば、上記サンプルデータのURIは<http://uedayou.net/simplelodi/uedayou>なので、http://uedayou.net/simplelodi/uedayou のURLでアクセスできればLinked Dataです。
そのために、uedayou.netの部分は自分が管理できる(持っている)ドメインである必要があり、そのドメインがアクセスできるサーバの公開領域に simplelodi フォルダをコピーする必要があります。

まとめると
(1) サーバに simplelodi フォルダをコピーする。simplelodiはリネームしてください。
(2) simplelodi/data/ フォルダの中に Turtleファイルを .ttl 拡張子に変更してコピーする。
(3) コピーするTurtle ファイル自体のURI を

http://[サーバのドメイン]/[simplelodiフォルダの名前]/[(2)の拡張子なしファイル名]

にする。

なお、上記のデータのファイル名は uedayou.ttl ですが、Simple LODI では、.ttlの部分は省略されます。
また、data フォルダの中のデータは実際にはひとつ上の階層
(例では、http://uedayou.net/simplelodi/data/uedayouではなく http://uedayou.net/simplelodi/uedayou)
でアクセスできます。