ProjectLA

バックエンドの技術解説
RDFを使った三つ組みデータの格納と検索
2013/02/15
クラウド・テクノロジー研究部会 リーダー
荒本道隆
（アドソル日進株式会社）何故、RDFか？
• 断片的なデータを相互につなぎたい– RDFは主語・述語・目的語の三つ組構造で表現– 目的語と主語に同じ値を設定して、それぞれをつなぐ• 属性を事前に決定できない– RDFはスキーマレスなので、柔軟に対応できる– RDFは多様な情報を関係性で表現できる• 大量のデータを蓄積・分析したい– RDFは構造が単純なので、コンピュータ・パワーが活きる

Copyright © 2013 Advanced IT Consortium to Evaluate, Apply and Drive All Rights Reserved.

バックエンドの概要• 格納はRDF形式• 検索はSPARQL（RDFクエリ言語）を使用

Copyright © 2013 Advanced IT Consortium to Evaluate, Apply and Drive All Rights Reserved.

RDFとは• RDF：Resource Description Framework– 2008年にW3C勧告となった– 代表的な使用例• RSS（RDF site summary）0.9, RSS1.0• DBpedia• 主語、述語、目的語の３つの要素で表現– 主語（Subject）：URI• http://aitc.jp/LA/rdfs/1– 述語（Predicate）：URI• http://aitc.jp/LA/model/ski#宿泊先– 目的語（Object）：値• 「２月スキー旅行」• 「ペンション・アルプ」

述語
主語

Copyright © 2013 Advanced IT Consortium to Evaluate, Apply and Drive All Rights Reserved.

目的語RDFとNoSQLの比較• RDFとCassandraの比較– 主語（Subject）←KEY– 述語（Predicate）←Column• どちらもスキーマレス• どちらも主語（Key）＋述語（Column）でユニーク– 目的語（Object）←Value
述語
主語目的語– 主語の名前空間←Column Family• 名前空間を変えることで、異なるデータを混在– http://aitc.jp/LA/users/1– http://aitc.jp/LA/plans/1
Copyright © 2013 Advanced IT Consortium to Evaluate, Apply and Drive All Rights Reserved.

RDFで複雑なデータを表現• 目的語（Object）と主語（Subject）に同じ値を入れる
述語
主語

目的語/
目的語
主語

主語

主語

The Linking Open Data cloud diagram
http://richard.cyganiak.de/2007/10/lod/
Copyright © 2013 Advanced IT Consortium to Evaluate, Apply and Drive All Rights Reserved.

目的語

目的語

RDFの実装：Jena• Apacheのプロジェクトの１つ– http://jena.apache.org/• Java製フレームワーク– Semantic Webアプリケーションを構築– RDFデータを読み、書き、処理するためのAPI• ファイルシステム• RDB（Oracle, MS-SQLServer, DB2, PostgreSQL, MySQL,Derby, H2, HSQLDB）– RDFとOWLを使ったルールベースの推論エンジン• OWL：Web Ontology Language– SPARQLのクエリーエンジン– RDFデータを公開するためのサーバ
Copyright © 2013 Advanced IT Consortium to Evaluate, Apply and Drive All Rights Reserved.

関心事参加者とコンテンツ
小学生
低学年

同伴者

ゲレンデの写真

先端太郎

付帯画像

2013/02
/16
4人

旅行者
旅行人数

兵庫県

旅行日
出発地

家族旅
行

自家用車

旅行目的

移動手段

スキー場
白馬八方尾根
スキー場

2月ス
キー旅行

天候

体感温度

旅行中

活動状況

宿泊先

強風でリフトがほとんど止まっている

吹雪

状態

目的地

コンテンツ
休憩中

ペンション・アルプ
住所2013/02/16 10：00

作成日時

白馬

寒い専用アプリからのつぶやき

コンテンツ

サービス

第一駐車場はいっぱい

送迎あり
白馬村

コンテンツ
今から出発

チェックインシステムから登録した関心事（RDFによる３つ組み）

Twitterから収集

Copyright © 2013 Advanced IT Consortium to Evaluate, Apply and Drive All Rights Reserved.

RDFへの変換• この部分をRDFにする場合
２月ス
キー旅行

宿泊先

ペンション・
アルプ• 識別できるようにIDを追加
タイトル
1

２月ス
キー旅行

宿泊先

Copyright © 2013 Advanced IT Consortium to Evaluate, Apply and Drive All Rights Reserved.

ペンション・
アルプ

IDを振っただけだと• これをそのままRDFにすると問題がある
タイトル

２月ス
キー旅行

1

タイトル

２月ス
キー旅行

2

宿泊先

ペンション・
アルプ

宿泊先

ホテル・○○• データがこうなる
主語

述語

目的語

1

タイトル

２月スキー旅行

２月スキー旅行宿泊先

ペンション・アルプ

2タイトル

２月スキー旅行２月スキー旅行

宿泊先

ホテル・ ○ ○– 同じタイトルを付けられると区別がつかない
Copyright © 2013 Advanced IT Consortium to Evaluate, Apply and Drive All Rights Reserved.

区別可能にするには• 元

２月スキー旅行宿泊先

ペンション・
アルプ• IDを追加するパターン
1

宿泊先

ペンション・
アルプ

タイトル
２月スキー旅行• IDと空白ノードを追加するパターン
1

blankb

宿泊先

タイトル
２月スキー旅行
Copyright © 2013 Advanced IT Consortium to Evaluate, Apply and Drive All Rights Reserved.

ペンション・アルプ

IDを追加するパターン
• モデル
1

宿泊先

ペンション・
アルプ

タイトル
２月スキー旅行

• データ
主語

述語

目的語

1

タイトル

２月スキー旅行1

宿泊先

ペンション・アルプ

2タイトル

２月スキー旅行2

宿泊先

ホテル・ ○ ○Copyright © 2013 Advanced IT Consortium to Evaluate, Apply and Drive All Rights Reserved.

IDと空白ノードを追加するパターン• モデル
blank1

宿泊先b

ペンション・アルプタイトル
２月スキー旅行

• データ
主語

述語

目的語

1

nodeb1b1

タイトル

２月スキー旅行b1

宿泊先

ペンション・アルプ

2

Nodeb2b2

タイトル

２月スキー旅行b2

宿泊先

ホテル・ ○ ○Copyright © 2013 Advanced IT Consortium to Evaluate, Apply and Drive All Rights Reserved.

モデルをRDF化し易いよう変換
2月ス
キー旅
行

コンテンツ

第一駐車場はいっぱい

宿泊先
コンテンツ

ペンショ
ン・アルプ

今から出発

住所

サービス

白馬村

送迎あり

チェックインシステムから登録した関心事（RDFによる３つ組み）

Twitterから収集

2月ス
キー旅行

IDb

コンテンツ

第一駐車場はいっぱい

コンテンツ

今から出発bb
住所
白馬村

宿泊先

ペンショ
ン・アルプ

サービス
送迎あり

Copyright © 2013 Advanced IT Consortium to Evaluate, Apply and Drive All Rights Reserved.

RDF化に必要なこと• IDをURIにする– http://aitc.jp/LA/users/1– http://aitc.jp/LA/plans/1• 述語の書き方を決める– http://aitc.jp/LA/model#blank– http://aitc.jp/LA/model#タイトル– http://aitc.jp/LA/model/ski#宿泊先– http://aitc.jp/LA/model/ski#住所

Copyright © 2013 Advanced IT Consortium to Evaluate, Apply and Drive All Rights Reserved.

Jenaを使ってRDFを作成する

Copyright © 2013 Advanced IT Consortium to Evaluate, Apply and Drive All Rights Reserved.

作成したRDF<rdf:RDF
xmlns:j.0="http://aitc.jp/LA/sns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:j.1="http://aitc.jp/LA/model/ski#"
xmlns:j.2="http://aitc.jp/LA/model#"><rdf:Description rdf:about="http://aitc.jp/LA/rdfs/1"><j.2:blank rdf:parseType="Resource"><j.2:タイトル>２月スキー旅行</j.2:タイトル><j.2:blank rdf:parseType="Resource"><j.1:宿泊先>ペンション・アルプ</j.1:宿泊先><j.1:住所>白馬村</j.1:住所><j.1:サービス>送迎あり</j.1:サービス></j.2:blank><j.2:blank rdf:parseType="Resource"><j.0:twitter>第一駐車場はいっぱい</j.0:twitter><j.0:twitter>今から出発</j.0:twitter></j.2:blank></j.2:blank></rdf:Description></rdf:RDF>
Copyright © 2013 Advanced IT Consortium to Evaluate, Apply and Drive All Rights Reserved.

作成したRDFの検証方法• W3Cの検証サイトに、出来たRDFを入れてみる– http://www.w3.org/RDF/Validator/

Copyright © 2013 Advanced IT Consortium to Evaluate, Apply and Drive All Rights Reserved.

SPARQLを使った検索• SPARQL– RDFのクエリ言語– 2008年にW3C勧告となった– http://www.w3.org/TR/rdf-sparql-query/– http://www.asahi-net.or.jp/~ax2s-kmtn/internet/rdf/rdf-sparql-query.html– SELECT * WHERE { ?s <http://aitc.jp/LA/model#タイトル> ?o }– SELECT * WHERE {?s ?p ?o . FILTER (regex(?o, “白馬"))}– SELECT ?o (count(?s) as ?z)
WHERE {?s <http://aitc.jp/LA/model/ski#宿泊先> ?o} GROUP BY ?oCopyright © 2013 Advanced IT Consortium to Evaluate, Apply and Drive All Rights Reserved.

SPARQLを使った検索
SELECT ?value WHERE {<http://aitc.jp/LA/rdfs/1> <http://aitc.jp/LA/model#blank> ?x .
?x <http://aitc.jp/LA/model#タイトル> ?value .
}SELECT ?value WHERE {?x <http://aitc.jp/LA/model/ski#住所> "白馬村" .
?x <http://aitc.jp/LA/model/ski#宿泊先> ?value .
}SELECT ?value WHERE {?x <http://aitc.jp/LA/model/ski#住所> "白馬村" .
?y <http://aitc.jp/LA/model#blank> ?x .
?y <http://aitc.jp/LA/model#タイトル> ?value .
}Copyright © 2013 Advanced IT Consortium to Evaluate, Apply and Drive All Rights Reserved.

システム構成

Copyright © 2013 Advanced IT Consortium to Evaluate, Apply and Drive All Rights Reserved.

システム構成－初期

ブラウザ

アプリケーション
サーバ

アプリ開発者が、何でもできてしまうデータ構造を理解しないと、使えないRDF
低レベル APISPARQLRDF

Copyright © 2013 Advanced IT Consortium to Evaluate, Apply and Drive All Rights Reserved.

システム構成－現在アクセスできる範囲を限定
簡単に使えるように抽象化した APIブラウザ
パラメータ

アプリケーションサーバ

RDF

SPARQL

低レベル APIRDF

Copyright © 2013 Advanced IT Consortium to Evaluate, Apply and Drive All Rights Reserved.

システム構成－今後の予定
アプリケーション
サーバ

パラメータ

抽象化した API

RDF

データ解析基盤
データ分析基盤
データ分析基盤

Hadoopを想定
定期的にバッチ実行する
結果もRDFで格納
Copyright © 2013 Advanced IT Consortium to Evaluate, Apply and Drive All Rights Reserved.

SPARQL

低レベル APIRDF

バックエンドのまとめ• RDFは、テーブルレス＆スキーマレス– 小さな粒度で自由に格納できる• RDFでの名前空間の使い分け– 同じ値でも、名前空間が違えば別物• 性能はそれなりに出る– 各要素にインデックス• SPARQLは書いてみると意外に簡単– RDFを図化したものを参照しつつ

Copyright © 2013 Advanced IT Consortium to Evaluate, Apply and Drive All Rights Reserved.