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

6,391 views

Published on

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

Published in: Technology
0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
6,391
On SlideShare
0
From Embeds
0
Number of Embeds
1,899
Actions
Shares
0
Downloads
37
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide

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

  1. 1. ふぉとぶらり+LODACiPhoneアプリでのSPARQL の活用事例 株式会社ATR-Promotions ミュージアムメディア事業部 上田 洋 h-ueda@atr-p.com http://museum-media.jp/
  2. 2. 自己紹介• 所属 – 株式会社ATR-Promotions ミュージアムメディア事業部• 仕事 – 地理情報システムの開発 – 具体的には iPhoneアプリ「ふぉとぶらり」の開発を 担当
  3. 3. ATR-Promotionsとは?• 国際電気通信基礎技術研究所(通称ATR) の研究成果を事業展開 – 計測機器・ソフトウェアの販売 – 脳活動計測装置(MRI装置やMEG装置)の貸出 – など• ATRとは? – 情報通信技術に関わる研究開発を行う民間の研 究所 – 研究分野 • ロボット、脳情報、無線通信、メディア情報 • など
  4. 4. ミュージアムメディア事業部とは?• ミュージアム向けモバイルガイド – 映画村でDS • ニンテンドーDSを利用したガイドシステム• コンシューマー向け地理情報システム – 「ちずぶらり」シリーズ • 古地図・絵地図など空間的に歪んだ地図の上で現在地 が表示できる街歩きiPhone/iPadアプリ • 手持ちの古地図・絵地図を手軽に「ちずぶらり」として利 用できるオンラインサービスを近日中にリリース予定 – 「ふぉとぶらり」 • 撮影時のほぼ全ての状態を記録できるiPhoneカメラア プリ(iPad2でも利用可能) • 撮影場所を地図上にかわいく・わかりやすく表示
  5. 5. ふぉとぶらりとは?• 撮影時の全て状態を記録・管理できる多機能 カメラアプリ – 撮影時の位置、方角、仰角(上下の向き)を自動 的に記録でき、かつ、撮影時の状況をメモとして 記録可能• リストと地図で写真を閲覧・検索 – かわいいねこ・いぬアイコンで撮影時の状態を地 図上に表示
  6. 6. ねこの向いている方向で、撮影した方角がわかります! 北 南東
  7. 7. iPhoneを下に向けて撮影すると…
  8. 8. iPhoneを上に向けて撮影すると…
  9. 9. ふぉとぶらりとLODACの連携• 地図上に写真とともに、 LODACの地理情報 (POI)を表示する機能 を実装• 6月2・3日に開催された NIIオープンハウスで デモ展示
  10. 10. LODACとは?• LODAC(Linked Open Data for Academia)• 学術情報をLinked Open Dataとして公開・共 有 – 美術館・博物館情報 – 地理情報• 現在「LODAC Museum(α版)」でデータ公開 中• SPARQLエンドポイントも公開
  11. 11. ふぉとぶらりのご紹介システムデモをご覧下さい
  12. 12. 新発売!「ふぉとぶらりPro」• POI表示版「ふぉとぶらり」を近日リリース予定• ふぉとぶらりPro」 名前は「ふぉとぶらり• 写真と同時に、 1. DBPedia SPARQLで検索 で 2. Linked Geo Data 3. sinsai.info の情報を地図上に表示可能 – モバイルDBPedia、Linked Geo Dataビューアにも• 「写真」カテゴリ、価格は350円を予定• 「ふぉとぶらりPro」をどうぞよろしくお願いします!
  13. 13. iPhoneアプリでSPARQLを 使うには?
  14. 14. iPhoneアプリの開発に必要なものは?• iPhone(iPad)アプリの開発には、以下が必須 (AppStore向け) 1. Intel社製CPU搭載Mac (Windowsは不可) 2. Xcode(IDE) 3. Objective-C – 部分的にプロジェクト内でC言語、C++は利用可能
  15. 15. Objective-Cとはどんな言語?• 基本的な文法はC言語に準拠するが、Objective-C 独特な記述をする部分がある• メソッド(関数)の呼び出しが独特 (Java) boolean flag = obj.equals(comp); (Objective-C) BOOL flag = [obj isEqual:comp];• クラスの作成が独特 – クラス定義部(@interface ~ @end) – クラス実装部(@implementation ~ @end)• 「コンストラクタ」はない
  16. 16. #import <Foundation/Foundation.h>@interface MyClass : NSObject { NSString* str;}-(NSString*) combineDirectory:(NSString*)dir addFile:(NSString*)file;@end MyClass* mc = [[MyClass alloc] init]; NSString* path@implementation MyClass = [mc combinDirectory:@”text” addFile:@”doc”]; NSLog(@”Current Path: “%@””, path); ”- (id)init { self = [super init]; if(self != nil) { str = @“c:/hoge/“; } return self;} Current Path: “C:/hoge/text/doc.txt” ”- (void)dealloc { [super dealloc];}- (NSString*) combineDirectory:(NSString*)dir addFile:(NSString*)file { return [str stringByAppendingFormat:@”%@/%@.txt”, dir, file];}@end
  17. 17. Objective-CでSPARQLで使うには?• HTTP通信による情報取得• XML、JSONのパーサーによる解析
  18. 18. HTTP通信による情報取得• NSURLConnectionを利用NSURL *url = [NSURL URLWithString:@"http://lod.ac/"];NSMutableURLRequest *req = [NSMutableURLRequest requestWithURL:url];NSURLResponse *resp;NSError *err;NSData *data = [NSURLConnection sendSynchronousRequest:req returningResponse:&resp error:&err];NSString* result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];• 問題点:NSStringのURLEncodeが不完全 – NSStringは文字列クラス
  19. 19. URLEncodeが不完全• GETでSPARQLクエリを送信する場合は、 URLEncodeが必要• NSStringクラスにURLEncode変換メソッドはあ るが... – [NSString stringByAddingPercentEscapesUsingEncoding:]• なぜか、一部文字がエンコードされない –$&+,/:;=?@
  20. 20. URLEncodeが不完全• 代替で 「CFURLCreateStringByAddingPercentEscapes」 を使用することで回避NSString* sparql = @” SELECT * WHERE { ?s ?p ?o. } LIMIT 10” ;NSString* query = (NSString*)CFURLCreateStringByAddingPercentEscapes( kDFAllocatorDefault, (CFStringRef)sparql, NULL, CFSTR(“;,/?:@=+$#”), kCFStringEncodingUTF8) ;
  21. 21. XML、JSONのパーサーの利用• XML、JSONの利用には、プロジェクトにライブラリ の組み込みが必要• XML – NSXMLParser – Libxml – TouchXML – KissXML – など• JSON – JSON Framework – TouchJSON – など
  22. 22. ふぉとぶらりでは?• RDFをJSON形式で取得• JSONの解析に JSON Framework(SBJSON)を使用• JSON Framework – JSONを連想配列(NSDictonary)形式で返す
  23. 23. HTTPヘッダーにMIMEタイプ指定 • MIMEタイプをJSONに指定NSURL *url = [NSURL URLWithString: sparql_query ];NSMutableURLRequest *req = [NSMutableURLRequest requestWithURL:url];[req setValue:@”application/sparql-results+json” forHTTPHeaderField:@”Accept”]; JSON形式での結果を要求 形式での結果を 形式での結果NSURLResponse *resp;NSError *err;NSData *data = [NSURLConnection sendSynchronousRequest:req returningResponse:&resp error:&err];NSString* result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
  24. 24. JSON Frameworkをプロジェクトへ追加• ソースをプロジェクトにコピーするだけ
  25. 25. 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" } }, ...
  26. 26. 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 ?long WHERE{ ?link dct:references ?ref. ?ref rdfs:label ?title. ?ref geo:lat ?lat. ?ref geo:long ?long. ?ref omgeo:within(北西の緯度 北西の経度 南東の緯度 南東の経度 北 経度). } Limit 30
  27. 27. SBJSON.h を import JSON Frameworkコーディング#import “SBJSON.h" JSONのテキスト(NSString) のテキスト~~~~~~~NSDictionary *json = [text JSONValue]; NSStringの拡張メソッドとして の拡張メソッドとして メソッド 解析(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);}
  28. 28. あとは地図にのせるだけ
  29. 29. まとめ• iPhoneアプリ「ふぉとぶらり」でのSPARQLの 導入事例を紹介• 導入がとても簡単• SPARQLのメリット – 他のSPARQLエンドポイントを公開するプロバイ ダ(DBPedia、LGD)でもほぼ同様のコードを利 用可能 – SPARQLが普及すれば、ユーザが自由にデータ を追加できるようにすることが可能 = 自由度が広がる
  30. 30. 謝辞• iPhoneアプリ「ふぉとぶらり」とLODACの連 携について、情報・システム研究機構 新領域 融合研究センター「LODAC」プロジェクトの皆 様にご協力をいただきました。深く感謝いたし ます。
  31. 31. ご清聴ありがとうございました
  32. 32. 参考• ふぉとぶらり(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/

×