ふぉとぶらり+lodac -iphoneアプリでのsparqlでの活用事例-

33
ふぉとぶらり+LODAC iPhoneアプリでのSPARQL の活用事例 株式会社ATR-Promotions ミュージアムメディア事業部 上田 洋 [email protected] http://museum-media.jp/

Upload: hiroshi-ueda

Post on 12-Jun-2015

5.541 views

Category:

Technology


2 download

DESCRIPTION

ふぉとぶらり+LODAC -iPhoneアプリでのSPARQLでの活用事例- ATR-Promotions 上田 洋 2011/07/23 第2回Linked Data勉強会

TRANSCRIPT

Page 1: ふぉとぶらり+LODAC -iPhoneアプリでのSPARQLでの活用事例-

ふぉとぶらり+LODAC

iPhoneアプリでのSPARQL

の活用事例

株式会社ATR-Promotions

ミュージアムメディア事業部

上田洋[email protected]

http://museum-media.jp/

Page 2: ふぉとぶらり+LODAC -iPhoneアプリでのSPARQLでの活用事例-

自己紹介

• 所属–株式会社ATR-Promotions

ミュージアムメディア事業部

• 仕事

–地理情報システムの開発

–具体的には iPhoneアプリ「ふぉとぶらり」の開発を

担当

Page 3: ふぉとぶらり+LODAC -iPhoneアプリでのSPARQLでの活用事例-

ATR-Promotionsとは?

• 国際電気通信基礎技術研究所(通称ATR)

の研究成果を事業展開

–計測機器・ソフトウェアの販売

–脳活動計測装置(MRI装置やMEG装置)の貸出

–など

• ATRとは?

–情報通信技術に関わる研究開発を行う民間の研究所

–研究分野

• ロボット、脳情報、無線通信、メディア情報

• など

Page 4: ふぉとぶらり+LODAC -iPhoneアプリでのSPARQLでの活用事例-

ミュージアムメディア事業部とは?

• ミュージアム向けモバイルガイド–映画村でDS

• ニンテンドーDSを利用したガイドシステム

• コンシューマー向け地理情報システム– 「ちずぶらり」シリーズ

• 古地図・絵地図など空間的に歪んだ地図の上で現在地が表示できる街歩きiPhone/iPadアプリ

• 手持ちの古地図・絵地図を手軽に「ちずぶらり」として利用できるオンラインサービスを近日中にリリース予定

– 「ふぉとぶらり」• 撮影時のほぼ全ての状態を記録できるiPhoneカメラアプリ(iPad2でも利用可能)

• 撮影場所を地図上にかわいく・わかりやすく表示

Page 5: ふぉとぶらり+LODAC -iPhoneアプリでのSPARQLでの活用事例-

ふぉとぶらりとは?

• 撮影時の全て状態を記録・管理できる多機能カメラアプリ

–撮影時の位置、方角、仰角(上下の向き)を自動的に記録でき、かつ、撮影時の状況をメモとして記録可能

• リストと地図で写真を閲覧・検索

–かわいいねこ・いぬアイコンで撮影時の状態を地図上に表示

Page 6: ふぉとぶらり+LODAC -iPhoneアプリでのSPARQLでの活用事例-

北北北北

南東南東南東南東

ねこの向いている方向で、撮影した方角がわかります!

Page 7: ふぉとぶらり+LODAC -iPhoneアプリでのSPARQLでの活用事例-

iPhoneを下に向けて撮影すると…

Page 8: ふぉとぶらり+LODAC -iPhoneアプリでのSPARQLでの活用事例-

iPhoneを上に向けて撮影すると…

Page 9: ふぉとぶらり+LODAC -iPhoneアプリでのSPARQLでの活用事例-
Page 10: ふぉとぶらり+LODAC -iPhoneアプリでのSPARQLでの活用事例-

ふぉとぶらりとLODACの連携

• 地図上に写真とともに、LODACの地理情報(POI)を表示する機能

を実装

• 6月2・3日に開催されたNIIオープンハウスで

デモ展示

Page 11: ふぉとぶらり+LODAC -iPhoneアプリでのSPARQLでの活用事例-

LODACとは?

• LODAC(Linked Open Data for Academia)

• 学術情報をLinked Open Dataとして公開・共

–美術館・博物館情報

–地理情報

• 現在「LODAC Museum(α版)」でデータ公開

• SPARQLエンドポイントも公開

Page 12: ふぉとぶらり+LODAC -iPhoneアプリでのSPARQLでの活用事例-

ふぉとぶらりのご紹介

システムデモをご覧下さい

Page 13: ふぉとぶらり+LODAC -iPhoneアプリでのSPARQLでの活用事例-

新発売!「ふぉとぶらりPro」

• POI表示版「ふぉとぶらり」を近日リリース予定

• 名前は「ふぉとぶらりふぉとぶらりふぉとぶらりふぉとぶらりPro」• 写真と同時に、

1. DBPedia2. Linked Geo Data3. sinsai.info

の情報を地図上に表示可能– モバイルDBPedia、Linked Geo Dataビューアにも

• 「写真」カテゴリ、価格は350円を予定

• 「ふぉとぶらりPro」をどうぞよろしくお願いします!

SPARQLでででで検索検索検索検索

Page 14: ふぉとぶらり+LODAC -iPhoneアプリでのSPARQLでの活用事例-

iPhoneアプリでSPARQLを

使うには?

Page 15: ふぉとぶらり+LODAC -iPhoneアプリでのSPARQLでの活用事例-

iPhoneアプリの開発に必要なものは?

• iPhone(iPad)アプリの開発には、以下が必須(AppStore向け)

1. Intel社製CPU搭載Mac (Windowsは不可)

2. Xcode(IDE)

3. Objective-C

– 部分的にプロジェクト内でC言語、C++は利用可能

Page 16: ふぉとぶらり+LODAC -iPhoneアプリでのSPARQLでの活用事例-

Objective-Cとはどんな言語?

• 基本的な文法はC言語に準拠するが、Objective-C

独特な記述をする部分がある

• メソッド(関数)の呼び出しが独特

• クラスの作成が独特– クラス定義部(@interface ~@end)

– クラス実装部(@implementation ~@end)

• 「コンストラクタ」はない

(Java)boolean flag = obj.equals(comp);

(Objective-C)BOOL flag = [obj isEqual:comp];

Page 17: ふぉとぶらり+LODAC -iPhoneアプリでのSPARQLでの活用事例-

#import <Foundation/Foundation.h>

@interface MyClass : NSObject {

NSString* str;

}

-(NSString*) combineDirectory:(NSString*)dir addFile:(NSString*)file;

@end

@implementation MyClass

- (id)init {

self = [super init];

if(self != nil) { str = @“c:/hoge/“; }

return self;

}

- (void)dealloc {

[super dealloc];

}

- (NSString*) combineDirectory:(NSString*)dir addFile:(NSString*)file {

return [str stringByAppendingFormat:@”%@/%@.txt”, dir, file];

}

@end

MyClass* mc = [[MyClass alloc] init];NSString* path

= [mc combinDirectory:@”text” addFile:@”doc”];NSLog(@”Current Path: ““““%@”””””, path);

Current Path: ““““C:/hoge/text/doc.txt””””

Page 18: ふぉとぶらり+LODAC -iPhoneアプリでのSPARQLでの活用事例-

Objective-CでSPARQLで使うには?

• HTTP通信による情報取得

• XML、JSONのパーサーによる解析

Page 19: ふぉとぶらり+LODAC -iPhoneアプリでのSPARQLでの活用事例-

HTTP通信による情報取得

• NSURLConnectionを利用

• 問題点:NSStringのURLEncodeが不完全

– NSStringは文字列クラス

NSURL *url = [NSURL URLWithString:@"http://lod.ac/"];NSMutableURLRequest *req = [NSMutableURLRequest requestWithURL:url];NSURLResponse *resp;NSError *err;NSData *data = [NSURLConnection sendSynchronousRequest:req

returningResponse:&resperror:&err];

NSString* result = [[NSString alloc] initWithData:dataencoding:NSUTF8StringEncoding];

Page 20: ふぉとぶらり+LODAC -iPhoneアプリでのSPARQLでの活用事例-

URLEncodeが不完全

• GETでSPARQLクエリを送信する場合は、URLEncodeが必要

• NSStringクラスにURLEncode変換メソッドはあ

るが...– [NSString stringByAddingPercentEscapesUsingEncoding:]

• なぜか、一部文字がエンコードされない– $ & + , / : ; = ? @$ & + , / : ; = ? @$ & + , / : ; = ? @$ & + , / : ; = ? @

Page 21: ふぉとぶらり+LODAC -iPhoneアプリでのSPARQLでの活用事例-

URLEncodeが不完全

• 代替で「CFURLCreateStringByAddingPercentEscapes」を使用することで回避

NSString* sparql = @” SELECT * WHERE { ?s ?p ?o. } LIMIT 10” ;NSString* query =

(NSString*)CFURLCreateStringByAddingPercentEscapes(kDFAllocatorDefault,(CFStringRef)sparql, NULL, CFSTR(“;,/?:@=+$#”),kCFStringEncodingUTF8) ;

Page 22: ふぉとぶらり+LODAC -iPhoneアプリでのSPARQLでの活用事例-

XML、JSONのパーサーの利用

• XML、JSONの利用には、プロジェクトにライブラリの組み込みが必要

• XML– NSXMLParser

– Libxml

– TouchXML

– KissXML

– など

• JSON– JSON Framework

– TouchJSON

– など

Page 23: ふぉとぶらり+LODAC -iPhoneアプリでのSPARQLでの活用事例-

ふぉとぶらりでは?

• RDFをJSON形式で取得

• JSONの解析に

JSON Framework(SBJSON)を使用

• JSON Framework

– JSONを連想配列(NSDictonary)形式で返す

Page 24: ふぉとぶらり+LODAC -iPhoneアプリでのSPARQLでの活用事例-

HTTPヘッダーにMIMEタイプ指定

• MIMEタイプをJSONに指定

NSURL *url = [NSURL URLWithString: sparql_query ];NSMutableURLRequest *req = [NSMutableURLRequest requestWithURL:url];

[req setValue:@”application/sparql-results+json”forHTTPHeaderField:@”Accept”];

NSURLResponse *resp;NSError *err;NSData *data = [NSURLConnection sendSynchronousRequest:req

returningResponse:&resperror:&err];

NSString* result = [[NSString alloc] initWithData:dataencoding:NSUTF8StringEncoding];

JSON形式形式形式形式でのでのでのでの結果結果結果結果をををを要求要求要求要求

Page 25: ふぉとぶらり+LODAC -iPhoneアプリでのSPARQLでの活用事例-

JSON Frameworkをプロジェクトへ追加

• ソースをプロジェクトにコピーするだけ

Page 26: ふぉとぶらり+LODAC -iPhoneアプリでのSPARQLでの活用事例-

LODACのRDF/JSON結果{

"head": {"vars": [ "link", "title", "lat", "long" ]}, "results": {

"bindings": [{

"title": { "type": "literal", "xml:lang": "ja", "value": "けいはんなけいはんなけいはんなけいはんなプラザプラザプラザプラザ郵便局郵便局郵便局郵便局" },

"long": { "type": "typed-literal", "datatype": "http:¥/¥/www.w3.org¥/2001¥/XMLSchema#float", "value": "135.763971" },

"lat": { "type": "typed-literal", "datatype": "http:¥/¥/www.w3.org¥/2001¥/XMLSchema#float", "value": "34.745723" },

"link": { "type": "uri", "value": "http://lod.ac/id/577214" }

},

............

Page 27: ふぉとぶらり+LODAC -iPhoneアプリでのSPARQLでの活用事例-

SPARQLクエリ

• FILTERにより地図表示領域のみを対象に

PREFIX dct: <http://purl.org/dc/terms/>PREFIX omgeo: <http://www.ontotext.com/owlim/geo#>PREFIX geo: <http://www.w3.org/2003/01/geo/wgs84_pos#>PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>SELECT distinct ?link ?title ?lat ?longWHERE{

?link dct:references ?ref.?ref rdfs:label ?title.?ref geo:lat ?lat.?ref geo:long ?long.?ref omgeo:within(北北北北西西西西のののの緯度緯度緯度緯度北北北北西西西西のののの経度経度経度経度南南南南東東東東のののの緯度緯度緯度緯度南南南南東東東東のののの経度経度経度経度).

}Limit 30

Page 28: ふぉとぶらり+LODAC -iPhoneアプリでのSPARQLでの活用事例-

JSON Frameworkコーディング

#import “SBJSON.h"

~~~~~~~

NSDictionary *json = [text JSONValue];

NSDictionary* results = [[json objectForKey:@"results"] objectForKey:@"bindings"];

for ( NSDictionary* result in results ){NSString* title = [[result objectForKey:@"title"] objectForKey:@"value"];NSString* lat = [[result objectForKey:@"lat"] objectForKey:@"value"];NSString* long = [[result objectForKey:@"long"] objectForKey:@"value"];NSString* link = [[result objectForKey:@"link"] objectForKey:@"value"];

NSLog(@"%@ : %@ : %@ : %@", title, lat, long, link);}

JSONののののテキストテキストテキストテキスト(NSString)

NSStringのののの拡張拡張拡張拡張メソッドメソッドメソッドメソッドとしてとしてとしてとして解析解析解析解析(JSONValue)

連想配列連想配列連想配列連想配列からからからから取得取得取得取得

SBJSON.h をををを import

Page 29: ふぉとぶらり+LODAC -iPhoneアプリでのSPARQLでの活用事例-

あとは地図にのせるだけ

Page 30: ふぉとぶらり+LODAC -iPhoneアプリでのSPARQLでの活用事例-

まとめ

• iPhoneアプリ「ふぉとぶらり」でのSPARQLの

導入事例を紹介

• 導入がとても簡単

• SPARQLのメリット

–他のSPARQLエンドポイントを公開するプロバイダ(DBPedia、LGD)でもほぼ同様のコードを利

用可能

– SPARQLが普及すれば、ユーザが自由にデータ

を追加できるようにすることが可能

= 自由度が広がる

Page 31: ふぉとぶらり+LODAC -iPhoneアプリでのSPARQLでの活用事例-

謝辞

• iPhoneアプリ「ふぉとぶらり」とLODACの連携について、情報・システム研究機構新領域融合研究センター「LODAC」プロジェクトの皆

様にご協力をいただきました。深く感謝いたします。

Page 32: ふぉとぶらり+LODAC -iPhoneアプリでのSPARQLでの活用事例-

ご清聴ありがとうございました

Page 33: ふぉとぶらり+LODAC -iPhoneアプリでのSPARQLでの活用事例-

• ふぉとぶらり(AppStore)

– http://itunes.apple.com/jp/app/id404106239?mt=8

• LODAC

– http://lod.ac/

– http://lod.ac/sparql (Endpoint)

• SPARQL

– http://www.asahi-net.or.jp/~ax2s-kmtn/internet/rdf/rdf-

sparql-query.html

• JSON Framework

– https://github.com/stig/json-framework/

参考