D2R - MySQLのデータからRDFの出力/SPARQLエンドポイントの設置


D2Rを使うとMySQL等のRDBのデータからRDFを出力することができる。またSPARQLのエンドポイントとしても機能する。
本家サイトはこちら: http://www4.wiwiss.fu-berlin.de/bizer/d2r-server/

動きとしては、RDBのテーブル/カラム構成とRDFでの出力結果をひもづけするマッピングファイルを用意して、それをもとにサーバーを起動する、という形になる。

セットアップ

基本的なセットアップは上記公式サイトからtar.gzをダウンロードしてきて展開すればOK

マッピングファイルのひな形を出力する

RDBの構成をどうRDFとして出力するかを記述するものがマッピングファイルである。
現状のカラム構成からマッピングファイルのひな形を出力するユーティリティコマンドが用意されている。
例えばlocalhostにあるblogというデータベースからマッピングファイルを出力する場合

$ ./generate-mapping -u john -p your_pw -d com.mysql.jdbc.Driver \
-o mapping.n3  jdbc:mysql://localhost/blog

マッピングファイルの編集

マッピングファイルはひな形として出力したものから表示したくないカラムやテーブルを除けば、概ね使える状態になるが、テーブル間のアソシエーションを表現したい場合などは少々手を入れる必要がある。

例えば、一つのブログ記事に複数のコメントが紐づいていて、その情報を出力に加えたい場合は下記のようにd2r:join句を使って表現する

map:posts_comment a d2rq:PropertyBridge;
        d2rq:belongsToClassMap map:posts;
        d2rq:property vocab:comments;
        d2rq:uriPattern "http://yourblog.com/comments/@@comments.id@@";
        d2rq:join "posts.id <= comments.post_id";
        .

次に、例えば緯度データがミリ秒としてDBに入っているが、出力は度形式にしたい場合などはd2rq:sqlExpressionを使ってSQL文として演算を加える

@prefix geo: <http://www.w3.org/2003/01/geo/wgs84_pos#> .

map:posts_lat a d2rq:PropertyBridge;
        d2rq:belongsToClassMap map:posts;
        d2rq:property geo:lat;
        d2rq:propertyDefinitionLabel "posts lat";
        d2rq:sqlExpression "posts.lat / (60.0 * 60.0 * 1000.0)";
        d2rq:datatype xsd:double;
        .

サーバーの起動

変更を加えたマッピングファイルをmapping.n3とすると下記のコマンドでサーバーが立ちあがる

$ ./d2r-server -p 80 -b http://yourblog.com mapping.n3

ブラウザでアクセウスするとデータ全体をブラウズすることができる。
この場合、SPARQLエンドポイントはhttp://yourblog.com/sparqlとなる