Upload
hiroshi-ueda
View
5.539
Download
2
Embed Size (px)
DESCRIPTION
ふぉとぶらり+LODAC -iPhoneアプリでのSPARQLでの活用事例- ATR-Promotions 上田 洋 2011/07/23 第2回Linked Data勉強会
Citation preview
ふぉとぶらり+LODAC
iPhoneアプリでのSPARQL
の活用事例
株式会社ATR-Promotions
ミュージアムメディア事業部
http://museum-media.jp/
自己紹介
• 所属–株式会社ATR-Promotions
ミュージアムメディア事業部
• 仕事
–地理情報システムの開発
–具体的には iPhoneアプリ「ふぉとぶらり」の開発を
担当
ATR-Promotionsとは?
• 国際電気通信基礎技術研究所(通称ATR)
の研究成果を事業展開
–計測機器・ソフトウェアの販売
–脳活動計測装置(MRI装置やMEG装置)の貸出
–など
• ATRとは?
–情報通信技術に関わる研究開発を行う民間の研究所
–研究分野
• ロボット、脳情報、無線通信、メディア情報
• など
ミュージアムメディア事業部とは?
• ミュージアム向けモバイルガイド–映画村でDS
• ニンテンドーDSを利用したガイドシステム
• コンシューマー向け地理情報システム– 「ちずぶらり」シリーズ
• 古地図・絵地図など空間的に歪んだ地図の上で現在地が表示できる街歩きiPhone/iPadアプリ
• 手持ちの古地図・絵地図を手軽に「ちずぶらり」として利用できるオンラインサービスを近日中にリリース予定
– 「ふぉとぶらり」• 撮影時のほぼ全ての状態を記録できるiPhoneカメラアプリ(iPad2でも利用可能)
• 撮影場所を地図上にかわいく・わかりやすく表示
ふぉとぶらりとは?
• 撮影時の全て状態を記録・管理できる多機能カメラアプリ
–撮影時の位置、方角、仰角(上下の向き)を自動的に記録でき、かつ、撮影時の状況をメモとして記録可能
• リストと地図で写真を閲覧・検索
–かわいいねこ・いぬアイコンで撮影時の状態を地図上に表示
北北北北
南東南東南東南東
ねこの向いている方向で、撮影した方角がわかります!
iPhoneを下に向けて撮影すると…
iPhoneを上に向けて撮影すると…
ふぉとぶらりとLODACの連携
• 地図上に写真とともに、LODACの地理情報(POI)を表示する機能
を実装
• 6月2・3日に開催されたNIIオープンハウスで
デモ展示
LODACとは?
• LODAC(Linked Open Data for Academia)
• 学術情報をLinked Open Dataとして公開・共
有
–美術館・博物館情報
–地理情報
• 現在「LODAC Museum(α版)」でデータ公開
中
• SPARQLエンドポイントも公開
ふぉとぶらりのご紹介
システムデモをご覧下さい
新発売!「ふぉとぶらりPro」
• POI表示版「ふぉとぶらり」を近日リリース予定
• 名前は「ふぉとぶらりふぉとぶらりふぉとぶらりふぉとぶらりPro」• 写真と同時に、
1. DBPedia2. Linked Geo Data3. sinsai.info
の情報を地図上に表示可能– モバイルDBPedia、Linked Geo Dataビューアにも
• 「写真」カテゴリ、価格は350円を予定
• 「ふぉとぶらりPro」をどうぞよろしくお願いします!
SPARQLでででで検索検索検索検索
iPhoneアプリでSPARQLを
使うには?
iPhoneアプリの開発に必要なものは?
• iPhone(iPad)アプリの開発には、以下が必須(AppStore向け)
1. Intel社製CPU搭載Mac (Windowsは不可)
2. Xcode(IDE)
3. Objective-C
– 部分的にプロジェクト内でC言語、C++は利用可能
Objective-Cとはどんな言語?
• 基本的な文法はC言語に準拠するが、Objective-C
独特な記述をする部分がある
• メソッド(関数)の呼び出しが独特
• クラスの作成が独特– クラス定義部(@interface ~@end)
– クラス実装部(@implementation ~@end)
• 「コンストラクタ」はない
(Java)boolean flag = obj.equals(comp);
(Objective-C)BOOL flag = [obj isEqual:comp];
#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””””
Objective-CでSPARQLで使うには?
• HTTP通信による情報取得
• XML、JSONのパーサーによる解析
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];
URLEncodeが不完全
• GETでSPARQLクエリを送信する場合は、URLEncodeが必要
• NSStringクラスにURLEncode変換メソッドはあ
るが...– [NSString stringByAddingPercentEscapesUsingEncoding:]
• なぜか、一部文字がエンコードされない– $ & + , / : ; = ? @$ & + , / : ; = ? @$ & + , / : ; = ? @$ & + , / : ; = ? @
URLEncodeが不完全
• 代替で「CFURLCreateStringByAddingPercentEscapes」を使用することで回避
NSString* sparql = @” SELECT * WHERE { ?s ?p ?o. } LIMIT 10” ;NSString* query =
(NSString*)CFURLCreateStringByAddingPercentEscapes(kDFAllocatorDefault,(CFStringRef)sparql, NULL, CFSTR(“;,/?:@=+$#”),kCFStringEncodingUTF8) ;
XML、JSONのパーサーの利用
• XML、JSONの利用には、プロジェクトにライブラリの組み込みが必要
• XML– NSXMLParser
– Libxml
– TouchXML
– KissXML
– など
• JSON– JSON Framework
– TouchJSON
– など
ふぉとぶらりでは?
• RDFをJSON形式で取得
• JSONの解析に
JSON Framework(SBJSON)を使用
• JSON Framework
– JSONを連想配列(NSDictonary)形式で返す
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形式形式形式形式でのでのでのでの結果結果結果結果をををを要求要求要求要求
JSON Frameworkをプロジェクトへ追加
• ソースをプロジェクトにコピーするだけ
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" }
},
............
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
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
あとは地図にのせるだけ
まとめ
• iPhoneアプリ「ふぉとぶらり」でのSPARQLの
導入事例を紹介
• 導入がとても簡単
• SPARQLのメリット
–他のSPARQLエンドポイントを公開するプロバイダ(DBPedia、LGD)でもほぼ同様のコードを利
用可能
– SPARQLが普及すれば、ユーザが自由にデータ
を追加できるようにすることが可能
= 自由度が広がる
謝辞
• iPhoneアプリ「ふぉとぶらり」とLODACの連携について、情報・システム研究機構新領域融合研究センター「LODAC」プロジェクトの皆
様にご協力をいただきました。深く感謝いたします。
ご清聴ありがとうございました
• ふぉとぶらり(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/
参考