オープンデータ界隈では、オープンデータの形式として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](http://qiita.com/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でリンクできる
- クエリ言語でデータを抽出できる
間違って理解しているところがあれば、ぜひぜひ指摘おねがいします。