Mais conteúdo relacionado
Semelhante a ふぉとぶらり+LODAC -iPhoneアプリでのSPARQLでの活用事例- (20)
ふぉとぶらり+LODAC -iPhoneアプリでのSPARQLでの活用事例-
- 2. 自己紹介
• 所属
– 株式会社ATR-Promotions
ミュージアムメディア事業部
• 仕事
– 地理情報システムの開発
– 具体的には iPhoneアプリ「ふぉとぶらり」の開発を
担当
- 4. ミュージアムメディア事業部とは?
• ミュージアム向けモバイルガイド
– 映画村でDS
• ニンテンドーDSを利用したガイドシステム
• コンシューマー向け地理情報システム
– 「ちずぶらり」シリーズ
• 古地図・絵地図など空間的に歪んだ地図の上で現在地
が表示できる街歩きiPhone/iPadアプリ
• 手持ちの古地図・絵地図を手軽に「ちずぶらり」として利
用できるオンラインサービスを近日中にリリース予定
– 「ふぉとぶらり」
• 撮影時のほぼ全ての状態を記録できるiPhoneカメラア
プリ(iPad2でも利用可能)
• 撮影場所を地図上にかわいく・わかりやすく表示
- 11. LODACとは?
• LODAC(Linked Open Data for Academia)
• 学術情報をLinked Open Dataとして公開・共
有
– 美術館・博物館情報
– 地理情報
• 現在「LODAC Museum(α版)」でデータ公開
中
• SPARQLエンドポイントも公開
- 13. 新発売!「ふぉとぶらりPro」
• POI表示版「ふぉとぶらり」を近日リリース予定
• ふぉとぶらりPro」
名前は「ふぉとぶらり
• 写真と同時に、
1. DBPedia SPARQLで検索
で
2. Linked Geo Data
3. sinsai.info
の情報を地図上に表示可能
– モバイルDBPedia、Linked Geo Dataビューアにも
• 「写真」カテゴリ、価格は350円を予定
• 「ふぉとぶらりPro」をどうぞよろしくお願いします!
- 15. iPhoneアプリの開発に必要なものは?
• iPhone(iPad)アプリの開発には、以下が必須
(AppStore向け)
1. Intel社製CPU搭載Mac (Windowsは不可)
2. Xcode(IDE)
3. Objective-C
– 部分的にプロジェクト内でC言語、C++は利用可能
- 16. Objective-Cとはどんな言語?
• 基本的な文法はC言語に準拠するが、Objective-C
独特な記述をする部分がある
• メソッド(関数)の呼び出しが独特
(Java)
boolean flag = obj.equals(comp);
(Objective-C)
BOOL flag = [obj isEqual:comp];
• クラスの作成が独特
– クラス定義部(@interface ~ @end)
– クラス実装部(@implementation ~ @end)
• 「コンストラクタ」はない
- 17. #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
- 19. 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は文字列クラス
- 21. URLEncodeが不完全
• 代替で
「CFURLCreateStringByAddingPercentEscapes」
を使用することで回避
NSString* sparql = @” SELECT * WHERE { ?s ?p ?o. } LIMIT 10” ;
NSString* query =
(NSString*)CFURLCreateStringByAddingPercentEscapes(
kDFAllocatorDefault,
(CFStringRef)sparql,
NULL,
CFSTR(“;,/?:@=+$#”),
kCFStringEncodingUTF8) ;
- 24. 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];
- 26. 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" }
},
...
- 27. 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
- 28. 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);
}
- 30. まとめ
• iPhoneアプリ「ふぉとぶらり」でのSPARQLの
導入事例を紹介
• 導入がとても簡単
• SPARQLのメリット
– 他のSPARQLエンドポイントを公開するプロバイ
ダ(DBPedia、LGD)でもほぼ同様のコードを利
用可能
– SPARQLが普及すれば、ユーザが自由にデータ
を追加できるようにすることが可能
= 自由度が広がる
- 33. 参考
• ふぉとぶらり(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/