Successfully reported this slideshow.

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

2

Share

Loading in …3
×
1 of 33
1 of 33

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

2

Share

Download to read offline

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

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

More Related Content

Related Books

Free with a 14 day trial from Scribd

See all

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

  1. 1. ふぉとぶらり+LODAC iPhoneアプリでの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/

×