クラウド・テクノロジー研究部会

Jenaを使った三つ組みデータの格納と検索
2012/08/30
アドソル日進株式会社
荒本道隆

目的
• 三つ組みデータ（RDF）をJenaで操作してみる– RDF：Resource Description Framework– W3Cで規格化されている– 触ってみれば、雰囲気が掴めるはず• RDFデータを作ってみる– サンプルモデルをRDFデータに落とす– RDBのテーブル設計やXMLのスキーマ設計と同様、正しくなければ違和感があるはず• SPARQL（RDFクエリ言語）を使ってみる– 利用例を見ても、よく分からないので
Copyright © 2011 Advanced IT Consortium to Evaluate, Apply and Drive All Rights Reserved.

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 © 2011 Advanced IT Consortium to Evaluate, Apply and Drive All Rights Reserved.

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

同伴者
芦田尚
人

2013/02
/16

付帯画像

旅行者

兵庫県

旅行日
出発地

家族旅
行

自家用車

旅行目的
移動手段

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

2月スキー旅行

天候

体感温度

旅行中

活動状況

宿泊先

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

吹雪状態

目的地

コンテンツ
休憩中

ペンショ
ン・アルプ
住所

2013/02/16 10：00

作成日時

4人
旅行人数

ゲレンデの写真白馬

寒い

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

コンテンツ

サービス

第一駐車場はいっぱい

送迎あり
白馬村

コンテンツ
今から出発

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

Twitterから収集

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

RDF• 主語、述語、目的語の３つの要素で表現– 主語（Subject）：URI• http://aitc.jp/LA/rdfs/1– 述語（Predicate）：URI• http://aitc.jp/LA/model/ski#宿泊先– 目的語（Object）：値• 「２月スキー旅行」• 「ペンション・アルプ」
述語主語

目的語

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

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

宿泊先

ペンション・アルプ• 識別できるようにIDを追加
タイトル
1２月ス
キー旅行

宿泊先

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

ペンション・アルプ

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

２月ス
キー旅行

1

宿泊先

ペンション・
アルプ• データがこうなる
主語

述語目的語

1

タイトル

２月スキー旅行

２月スキー旅行宿泊先

ペンション・アルプ

2タイトル

２月スキー旅行

２月スキー旅行

宿泊先

ホテル・ ○ ○– 同じタイトルを付けられると区別がつかない

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

区別可能にするには
• 元

２月ス
キー旅行

宿泊先

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

宿泊先

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

blankb

宿泊先

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

ペンション・アルプ

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

宿泊先

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

• データ
主語

述語

目的語

1タイトル

２月スキー旅行1

宿泊先

ペンション・アルプ

2タイトル

２月スキー旅行2

宿泊先

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

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

1

宿泊先

b

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

• データ
主語

述語

目的語

1

nodeb1b1

タイトル

２月スキー旅行b1

宿泊先

ペンション・アルプ

2

Nodeb2b2

タイトル

２月スキー旅行b2

宿泊先

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

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

第一駐車場はいっぱい

宿泊先
コンテンツ

ペンショ
ン・アルプ

今から出発

住所

サービス

白馬村

送迎あり

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

Twitterから収集

2月ス
キー旅行

IDb

コンテンツ

第一駐車場はいっぱい

コンテンツ

今から出発bb
住所
白馬村

宿泊先

ペンショ
ン・アルプ

サービス
送迎あり

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

RDF化に必要なこと• IDをURIにする– http://aitc.jp/LA/rdfs/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 © 2011 Advanced IT Consortium to Evaluate, Apply and Drive All Rights Reserved.

Jenaを使ってRDFを作成する

Copyright © 2011 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 © 2011 Advanced IT Consortium to Evaluate, Apply and Drive All Rights Reserved.

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

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

別の表現方法<rdf:RDF
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#“xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
xmlns:laProp="http://aitc.jp/projectLA/property/"
xmlns:laSki="http://aitc.jp/projectLA/property/ski/"><rdf:Description rdf:about="http://aitc.jp/projectLA/demo/concern/id001"><rdf:type rdf:resource="http://aitc.jp/projectLA/関心事"/><rdfs:label xml:lang="ja">2月スキー旅行</rdfs:label><laProp:コンテンツ rdf:parseType="Resource"><laProp:入手先 rdf:resource="http://aitc.jp/projectLA/入手先/twitter"/><laProp:日時>2012-08-01T11:30:25.000-9:00</laProp:日時><laProp:テキスト xml:lang="ja">第一駐車場はいっぱい</laProp:テキスト></laProp:コンテンツ><laProp:コンテンツ rdf:parseType="Resource"><laProp:入手先 rdf:resource="http://aitc.jp/projectLA/入手先/twitter"/><laProp:日時>2012-08-01T09:50:45.000-9:00</laProp:日時><laProp:テキスト xml:lang="ja">今から出発</laProp:テキスト></laProp:コンテンツ><laProp:宿泊先 rdf:parseType="Resource"><rdf:type rdf:resource="http://aitc.jp/projectLA/ホテル"/><rdfs:label>ペンション・アルプ</rdfs:label><laSki:住所>白馬村</laSki:住所><laSki:サービス>送迎あり</laSki:サービス></laProp:宿泊先></rdf:Description></rdf:RDF>
Copyright © 2011 Advanced IT Consortium to Evaluate, Apply and Drive All Rights Reserved.

別の表現方法

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

SPARQLで検索

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

やってみて分かったこと• 三つ組みデータ（RDF）をJenaで操作してみた– Javaで操作するのは簡単– 更新や部分更新については、未実装• RDFデータを作ってみた– 考えなければならない事が、予想以上にあった• モデルの最適化、後々の拡張性を考慮• 述語の命名規約– 表記方法は１つじゃない• 記述する人によって、かなり差が出そう• SPARQL（RDFクエリ言語）を使ってみた– 「ある条件に合致するのを取り出す」のは簡単• SQLで複数JOINするよりも直感的

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

今後の予定• Internet上でサービスを運用– 他部会のアプリから利用できるように• 述語の検討– 命名規約• 更新の実装– 部分更新– SNSの発言を追加

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