位 置 情 報 ベースのサービス PinQA とLOD 澤 村 正 樹 佐 藤 宏 之 NTTレゾナント 株 式 会 社 概 要 1. gooラボで 提 供 している 位 置 情 報 に 特 化 したQ&Aサービス PinQA(ピンカ)をLinked Open Dataに 対 応 さた 実 際 にコンシュー マー 向 けに 提 供 されているサービスのLOD 対 応 事 例 として その 検 討 過 程 と 効 果 について 紹 介 する - 71 -
位 置 情 報 サービスPinQA(ピンカ) 位 置 情 報 ベースのQ&Aサービス 2010 年 リリース ( 現 在 大 規 模 なリニューアル 検 討 中 ) 検 索 で 探 せない 人 々の 持 つローカル 情 報 がウェブ 上 で 共 有 され ることがゴール 例 ) このへんでよい 歯 医 者 さんはどこですか? 子 連 れでも 入 れるよいレストランはありませんか? スカイツリーがよく 見 える スポットはどこですか? - 72 -
LOD 対 応 のゴール 他 の 位 置 情 報 サービスからマッシュアップされること o 各 Q&AデータをRDF 形 式 で 取 得 できること o QやA 投 稿 者 のデータをたどって 行 けること o 緯 度 経 度 で 範 囲 指 定 してデータを 取 得 できること SPARQLエンドポイントを 持 つこと - 73 -
検 討 の 流 れ 1.リソースのURIの 検 討 2.プロパティ(ボキャブラリ)のURIの 検 討 3. 出 力 フォーマットの 検 討 4. 外 部 データ(DBpedia)へのリンク 5.SPARQLエンドポイントの 設 置 データ 構 造 このへんに 美 味 しいラーメン 屋 はありませんか? 二 郎 がありますよ 山 頭 火 がおすすめです 緯 度 経 度 : 35.6/139.7 緯 度 経 度 : 35.7/139.0 緯 度 経 度 : 35.8/138.1-74 -
ボキャブラリ dc:creator dc:creator pinqa:answer pinqa:answer geo:lat geo:long geo:lat geo:long geo:lat geo:long geo:lat geo:long リソースURI 設 計 基 本 となるQ&AページのURLは 下 記 だった http://pinqa.com/qa/24 これをそのまま 個 々の 質 問 を 表 すURIとして 使 うように 決 めた メタ 情 報 取 得 のURLを 以 下 のように 定 義 http://pinqa.com/qa/24.n3 http://pinqa.com/qa/24.trix http://pinqa.com/qa/24.rdf (RDF+XML) - 75 -
ページのフッター 部 分 にリンク Q&Aページ linkタグをうめこみ PinQAのリソースURI 例 質 問 http://pinqa.com/qa/123 回 答 http://pinqa.com/a/567 ユーザー http://pinqa.com/people/sawamura PinQAのプロパティ 回 答 pinqa:answer ユーザー dc:creator 近 くの 駅 pinqa:nearquestion @prefix pinqa: <http://pinqa.com/terms/>. - 76 -
[ 課 題 ] 既 存 APIとのバッティング 既 に.xmlと.jsonという 拡 張 子 を 独 自 形 式 のデータを 返 す APIとして 利 用 していた リリース 済 みのiPhoneアプリな どでも 使 っていたため.jsonでjson 形 式 のRDFを 返 すよう にはできなかった http://pinqa.com/qa/234.json @prefix dc: <http://purl.org/dc/elements/1.1/>. @prefix dcterms: <http://purl.org/dc/terms/>. @prefix geo: <http://www.w3.org/2003/01/geo/wgs84_pos#>. @prefix pinqa: <http://pinqa.com/terms/>. @prefix rdfs: <http://www.w3c.org/2000/01/rdf-schema#>. <http://pinqa.com/qa/2301> pinqa:answer <http://pinqa.com/a/23471>, <http://pinqa.com/a/23472>, <http://pinqa.com/a/23473>, <http://pinqa.com/a/23474>, <http://pinqa.com/a/23475>; dcterms:spatial " 東 京 "; pinqa:nearquestion <http://pinqa.com/qa/162>, <http://pinqa.com/qa/1831>; pinqa:nearstation <http://dbpedia.org/resource/jimb%c5%8dch%c5%8d_station>, <http://dbpedia.org/resource/takebashi_station>, <http://dbpedia.org/resource/ochanomizu_station>; dc:creator <http://pinqa.com/people/sa2hi>; dc:date "2011-11-14T11:48:03+09:00"; dc:description " 一 ツ 橋 神 保 町 のあたりで 土 曜 日 の 夕 方 25~30 人 で 懇 親 会 ができるお 店 を 探 しています どこか 良 いところをご 存 知 の 方 はいらっしゃいますか?"; geo:lat "35.6941358333333"^^<http://www.w3.org/2001/XMLSchema#double>; geo:long "139.757873888889"^^<http://www.w3.org/2001/XMLSchema#double>; rdfs:label " 一 ツ 橋 神 保 町 のあたりで 土 曜 日 の 夕 方 25~30 人 で 懇 親 会 ができるお 店 を 探 しています どこか 良 いところをご 存 知 の 方 はいらっしゃいますか?". - 77 -
実 装 方 法 PinQAはRuby on Railsで 動 いているため RDF.rbを 使 いRDFを 生 成 した Gemfile: gem 'rdf' gem 'rdf/n3',:require => 'rdf/n3' gem 'rdf/rdf-xml,:require => 'rdf/rdfxml' Controller: respond_to do format format.html format.json { render :json => @qa.to_json } format.n3 { render :text => @qa.to_n3 } format.rdf { render :text => @qa.to_rdfxml } end - 78 -
def to_n3 geo = RDF::Vocabulary.new("http://www.w3.org/2003/01/geo/wgs84_pos#") dcterms = RDF::Vocabulary.new("http://purl.org/dc/terms/") pinqa = RDF::Vocabulary.new("http://pinqa.com/terms/") RDF::Writer.for(:n3).buffer { writer writer.prefix("geo",geo.to_s) writer.prefix("dcterms",dcterms.to_s) writer << RDF::Graph.new do graph graph << [question[2202],dc.description,rdf::literal("このへんに 美 味 しいラーメン 屋 はありますか?",:language => :ja)] graph << [question[2202],geo.lat,35.6853844444444] graph << [question[2202],geo.long,139.748879722222] end end DBpediaへのリンク 近 くの 駅 をDBpediaへリンク 原 宿 駅 <http://dbpedia.org/resource/harajuku_station> - 79 -
ある 緯 度 経 度 範 囲 の 駅 データをDBpediaから 取 得 するSPARQL PREFIX rdfs:<http://www.w3.org/2000/01/rdf-schema#> PREFIX geo:<http://www.w3.org/2003/01/geo/wgs84_pos#> PREFIX geo:<http://www.w3.org/2003/01/geo/wgs84_pos#> PREFIX dbpedia_ont: <http://dbpedia.org/ontology/> SELECT * WHERE {?link rdfs:label?title; rdfs:comment?comment; geo:lat?lat; geo:long?long.?link rdf:type dbpedia_ont:station. FILTER (?lat> 35.7 &&?lat< 35.9 &&?long> 139.5 &&?long< 139.6 && lang(?comment) = "ja" && lang(?title) = "ja" ) } SPARQLエンドポイント 設 置 1. ActiveRecord+MySQLで 扱 っているデータを SPARQL 文 をパースして 取 得 して 返 すことを 試 す 定 型 の 文 の 一 部 のみ 対 応 させることならば できな くもないが エンドポイントとして 実 装 するのは 相 当 難 し そう 2. 4Storeをインストールして 試 験 3. D2RでRDBのデータを 直 接 クエリーする 方 式 に 切 り 替 える - 80 -
D2Rについて D2Rを 使 うとMySQLなどのRDBから 直 接 RDFを 生 成 することがで きる SPARQLエンドポイントとしても 機 能 する http://www4.wiwiss.fu-berlin.de/bizer/d2r-server/ D2Rの 設 定 現 状 のカラム 構 成 からマッピングファイルのひな 形 を 出 力 するユー ティリティコマンドが 用 意 されている $./generate-mapping -u john -p your_pw -d com.mysql.jdbc.driver -o mapping.n3 jdbc:mysql://localhost/blog マッピングファイルはテーブル 間 のアソシエーションを 表 現 したい 場 合 などは 少 々 手 を 入 れる 必 要 がある @prefix geo: <http://www.w3.org/2003/01/geo/wgs84_pos#>. map:posts_lat a d2rq:propertybridge; d2rq:belongstoclassmap map:posts; d2rq:property geo:lat; d2rq:propertydefinitionlabel "posts lat"; d2rq:sqlexpression "posts.lat / (60.0 * 60.0 * 1000.0)"; d2rq:datatype xsd:double;. - 81 -
PinQAのSPARQLエンドポイント 利 用 例 : Yokohama Art Spot まとめ 実 際 にコンシューマー 向 けに 提 供 されているサービスPinQA(ピ ンカ)についてLOD 対 応 を 実 装 した o 通 常 のXMLでのAPI 設 計 とは 違 う 感 覚 がある 出 力 の 実 装 はある 程 度 ライブラリがあるので 大 丈 夫 既 存 APIとのすみわけが 課 題 D2Rを 使 ってSPARQLエンドポイントに 対 応 させた 全 体 的 に 実 装 ノウハウや 利 用 事 例 がまだまだ 足 りていないという のが 実 感 より 多 くの 情 報 発 信 が 普 及 の 鍵 - 82 -
ご 清 聴 ありがとうございました mail: m-sawa@nttr.co.jp http://pinqa.com - 83 -