RDFに関する雑な説明


オープンデータ界隈では、オープンデータの形式としてRDFがおすすめらしい。スキーマが定義されているとなおよいらしい。
いまいちRDFで調べても知りたいことがわからなかったので、自分が伝えたい順序で雑に整理しました。

基本

RDFは何かといわれると、有向グラフです。
S P Oの3つの値で有向グラフをつくります。

S: Subject
P: Predicate
O: Object

このSPOをステートメントと呼ぶらしいです。

このSPOをたくさん集めてデータを構築します。SubjectはURIである必要があるらしいですが、正確なことはRDF Primerとかみればいいはずです。

具体例

RDFをつかって具体的にデータを構築してみます。

上記のグラフはQiitaというウェブサービスの説明とその会員の情報を表現したRDFになります。
SPOのステートメントで表現すると以下のようになります。

http://qiita.com/ name Qiita
http://qiita.com/ description プログラミングを共有しよう
http://qiita.com/ user http://qiita.com/eielh
http://qiita.com/ user http://qiita.com/だれか
http://qiita.com/eielh name Himura Tomohiko

表現することができました。
仮にテーブル形式で表現するとこうなりますね。

ウェブサービスの情報テーブル








name description user
Qiita プログラミング知識を共有しよう eielh
誰か

ObjectにURIを使用することでデータをリンクさせることができています。RDFを使うとオープンリンクデータが作成できるわけです。
同じ属性をいれることで繰り返しも表現できています。
非常に柔軟なデータ構造であることがわかりました。

柔軟ですが、http://qiita.com/ どんな種類の情報で、属性をもっていて、どんな値を取り得るのか明確化されているとコンピュータで扱いやすくなります。user属性ならURIがはいっているなどです。
それが記述されているのがスキーマになります。

出力形式

RDFは有向グラフという概念なので物理的には、いろんな形式で出力できます。
ルールさえ決めればXMLやJSONにできそうですね。
すでにRDFXMLやJSON-LDがあります。

RDFはHTMLにも埋め込みができます。RDFaとかMicrodataがあります。
SEO系の話ででてくるものですね。

RSSも一部のバージョンはRDF形式になっているようです。

RDFの解析

RDFはJSONに比べてプログラムで扱うには優しくないように思うはずです。JSONであればそのまま連想配列になります。RDFはそうもいかないのです。そこがあんまり耳にしない理由な気がしています。

リレーショナル・データベースからのデータ取得はSQLというクエリ言語をつかいます。XMLにはXQueryというクエリ言語をつかいますね。(HTMLではjQueryというライブラリがありましたね)
RDF用のクエリ言語はSPARQLというのがあります。

SPARQLを私はまだあまり触ってまた機会があれば。

まとめ

というわけで、RDFはなにものかというと以下の感じの理解をしています。

  • RDFは有向グラフ
  • RDFXML JSON-LDなど様々な形式で表現できる
  • スキーマを定義することでよりコンピュータで有効利用しやすくなる
  • データ同士をURIでリンクできる
  • クエリ言語でデータを抽出できる

間違って理解しているところがあれば、ぜひぜひ指摘おねがいします。