44
Linked Open Data(LOD)ハンズオン Pinpoint ReminderによるLODアプリ構築 2山口琢(D3)@高橋修研究室 はこだて未来大 v1.120130509 20130509 1

SPARQLから入門するLinked Open Data(LOD)ハンズオン 第2回

Embed Size (px)

Citation preview

Page 1: SPARQLから入門するLinked Open Data(LOD)ハンズオン 第2回

Linked  Open  Data(LOD)ハンズオン  -­‐  Pinpoint  ReminderによるLODアプリ構築  -­‐  

第2回

山口琢(D3)@高橋修研究室  

はこだて未来大  

v1.1、2013-­‐05-­‐09

2013-­‐05-­‐09 1

Page 2: SPARQLから入門するLinked Open Data(LOD)ハンズオン 第2回

前回までのLODハンズオン

•  「函館○○情報」にSPARQLで問い合わせてみた  –  hCp://210.226.0.93/sparql/  – Webページのフォームから人がクエリーを入力すると、  

結果がHTMLで表示された。  

•  SPARQLで情報を取り出す  –  必要な知識  

•  SPARQLの文法などなど  

•  データセットの知識  

–  自分がLODデータを公開したら、世界の開発者が、自分のデータに対して、同じように悩むのです。  ↑  これ大事  

2013-­‐05-­‐09 2

Page 3: SPARQLから入門するLinked Open Data(LOD)ハンズオン 第2回

今回は

•  プログラムから問い合わせる  –  プログラムからSPARQLで問い合わせる…  …ときにやることを、手作業で体験  

–  URL合成、パーセントエンコード、JSON、変数(入力をクエリーに埋め込む、出力JSONから値を取り出す)  

•  Pinpoint  Reminder概要  –  LODアプリの例  

–  Pinpoint  ReminderにおけるSPARQL  ←  ここまでは  

•  Pinpoint  Reminderのハブを作ってみよう  

2013-­‐05-­‐09 3

Page 4: SPARQLから入門するLinked Open Data(LOD)ハンズオン 第2回

次回、次々回、…があれば:

•  「はこだてMap+」の仕組み・設計  by  観光系の誰か  •  他のアプリにおけるSPARQL(LOD)利用方法  

–  ブラウザーのWebアクセスモニター  

•  発表(ライトニングトーク、3分/人)  by  みんな  –  20人  x  3分/人  =  1時間!  

•  適用分野の観点で、個別・詳細トピック  –  開発ドキュメント管理:  要求  -­‐  仕様  -­‐  …  –  地理情報:  地理的近さ、Geohash、…  

•  開発の観点で、個別・詳細トピック  パーセントエンコーディング、IRI、処理方式・性能、…

2013-­‐05-­‐09 4

Page 5: SPARQLから入門するLinked Open Data(LOD)ハンズオン 第2回

プログラムから問い合わせる

2013-­‐05-­‐09 5

Page 6: SPARQLから入門するLinked Open Data(LOD)ハンズオン 第2回

DBpedia  Japanese

hCp://ja.dbpedia.org/

2013-­‐05-­‐09 6

Page 7: SPARQLから入門するLinked Open Data(LOD)ハンズオン 第2回

エンドポイント:  hCp://ja.dbpedia.org/sparql

2013-­‐05-­‐09 7

クリック!  

Page 8: SPARQLから入門するLinked Open Data(LOD)ハンズオン 第2回

2013-­‐05-­‐09 8

select  discnct  *  where  {  <hCp://ja.dbpedia.org/resource/東京都>  ?p  ?o  .  }  

<hCp://ja.dbpedia.org/resource/東京都>  ?p  ?o  

 hCp://ja.dbpedia.org/resource/東京都が主語になっている…  

*  

 全ての変数の組:  ?pと?oを…  

discnct  

 重複しないように…  

…取り出しなさい!

Page 9: SPARQLから入門するLinked Open Data(LOD)ハンズオン 第2回

問合せ結果のURL

1.  コピーしてテキストエディターに貼り付けておく  

2.  パーセントデコードする  

3.  デコード結果を、テキストエディターに貼り付ける

2013-­‐05-­‐09 9

hCp://ja.dbpedia.org/sparql?default-­‐graph-­‐uri=hCp%3A%2F%2Fja.dbpedia.org&query=select+discnct+*+where+%7B+%3ChCp%3A%2F%2Fja.dbpedia.org%2Fresource%2F%E6%9D%B1%E4%BA%AC%E9%83%BD%3E+%3Fp+%3Fo+.+%7D&format=text%2Fhtml&cmeout=0&debug=on  

Page 10: SPARQLから入門するLinked Open Data(LOD)ハンズオン 第2回

hCp://ja.dbpedia.org/sparql?default-­‐graph-­‐uri=hCp%3A%2F%2Fja.dbpedia.org&query=select+discnct+*+where+%7B+%3ChCp%3A%2F%2Fja.dbpedia.org%2Fresource%2F%E6%9D%B1%E4%BA%AC%E9%83%BD%3E+%3Fp+%3Fo+.+%7D&format=text%2Fhtml&cmeout=0&debug=on  

↓  

hCp://ja.dbpedia.org/sparql?default-­‐graph-­‐uri=hCp://ja.dbpedia.org&query=select  discnct  *  where  {  <hCp://ja.dbpedia.org/resource/東京都>  ?p  ?o  .  }&format=text/html&cmeout=0&debug=on

2013-­‐05-­‐09 10

Page 11: SPARQLから入門するLinked Open Data(LOD)ハンズオン 第2回

query  parameter  strings

hCp://ja.dbpedia.org/sparql?default-­‐graph-­‐uri=hCp://ja.dbpedia.org&query=select  discnct  *  where  {  <hCp://ja.dbpedia.org/resource/東京都>  ?p  ?o  .  }&format=text/html&cmeout=0&debug=on

2013-­‐05-­‐09 11

Page 12: SPARQLから入門するLinked Open Data(LOD)ハンズオン 第2回

query  parameter  strings

hCp://ja.dbpedia.org/sparql  ?default-­‐graph-­‐uri=hCp://ja.dbpedia.org  

&query=select  discnct  *  where  {  <hCp://ja.dbpedia.org/resource/東京都>  ?p  ?o  .  }  

&format=text/html  

&cmeout=0  &debug=on

2013-­‐05-­‐09 12

エンドポイント

SPARQLのクエリ

出力(応答)形式

Page 13: SPARQLから入門するLinked Open Data(LOD)ハンズオン 第2回

ちなみに、見るだけなら…  ネットワークのモニター

•  Chrome  –  「ツール」-­‐「デベロッパー ツール」  →  「Network」  

•  Firefox  –  「ツール」-­‐「Web開発」-­‐「Firebug」  (インストールしてれば)  

•  Opera  –  Dragonfly  

2013-­‐05-­‐09 13

Page 14: SPARQLから入門するLinked Open Data(LOD)ハンズオン 第2回

Chrome  Developer  Tools

2013-­‐05-­‐09 14

Page 15: SPARQLから入門するLinked Open Data(LOD)ハンズオン 第2回

Firefox  Firebug

2013-­‐05-­‐09 15

Page 16: SPARQLから入門するLinked Open Data(LOD)ハンズオン 第2回

Opera  Dragonfly

2013-­‐05-­‐09 16

Page 17: SPARQLから入門するLinked Open Data(LOD)ハンズオン 第2回

東京都のところを、函館にして…

select  discnct  *  where  {  <hCp://ja.dbpedia.org/resource/函館>  ?p  ?o  .  }  

<hCp://ja.dbpedia.org/resource/函館>  ?p  ?o  

 hCp://ja.dbpedia.org/resource/函館が主語になっている…  

*  

 全ての変数の組:  ?pと?oを…  

discnct  

 重複しないように…  

…取り出しなさい!

2013-­‐05-­‐09 17

フォームを使わずにやってみる

Page 18: SPARQLから入門するLinked Open Data(LOD)ハンズオン 第2回

…逆をやってみる

1.  SPARQLクエリーを組み立てる  

2.  クエリーパラメタの値をパーセントエンコードする  

3.  クエリーパラメタをつなげてURL(の元)を組み立てる  

4.  URLをブラウザーで開く

2013-­‐05-­‐09 18

Page 19: SPARQLから入門するLinked Open Data(LOD)ハンズオン 第2回

今やったこと

1.  入力:  {  "東京都",  "函館",  …  }  

2.  問合せ  –  入力からSPARQLクエリーを組み立てる  

–  クエリーパラメタの値をパーセントエンコードする

–  クエリーパラメタをつなげてURL(の元)を組み立てる

–  URLをブラウザーで開く  

3.  出力:  {  p:  ○○,  o:  □□  }という組の一覧を得る

2013-­‐05-­‐09 19

Page 20: SPARQLから入門するLinked Open Data(LOD)ハンズオン 第2回

プログラムがやること

1.  入力:  {  "東京都",  "函館",  …  }  

2.  問合せ  –  入力からSPARQLクエリーを組み立てる

–  クエリーパラメタの値をパーセントエンコードする  

–  クエリーパラメタをつなげてURLの元を組み立てる

–  URLを開く:  f  =  urlopen(URL,  ...)など  

–  結果を読み出す:  res  =  f.read()  

–  閉じる  

3.  出力:  {  p:  ○○,  o:  △△  }という組の一覧を得る

2013-­‐05-­‐09 20

Page 21: SPARQLから入門するLinked Open Data(LOD)ハンズオン 第2回

query  parameter  strings

入力変数  =      "hCp://ja.dbpedia.org/resource/東京都"  

パーセントエンコード前URL  =  "hCp://ja.dbpedia.org/sparql?default-­‐graph-­‐uri=hCp://ja.dbpedia.org&query=select  discnct  *  where  {  <入力変数>  ?p  ?o  .  }&format=text/html&cmeout=0&debug=on"  

2013-­‐05-­‐09 21

Page 22: SPARQLから入門するLinked Open Data(LOD)ハンズオン 第2回

プログラムで処理しやすい形で  結果をもらう

•  JSON  •  XML

2013-­‐05-­‐09 22

Page 23: SPARQLから入門するLinked Open Data(LOD)ハンズオン 第2回

結果をいつも同じ変数で処理したい

•  SPRQLでの変数名はこちらが決められる  –  さまざまなエンドポイントに、  

–  それぞれ異なるクエリを投げて、  

–  欲しい情報を、同じ変数で取り出すことができる。

2013-­‐05-­‐09 23

Page 24: SPARQLから入門するLinked Open Data(LOD)ハンズオン 第2回

LODアプリの仕組み例

入力      hCp://ja.dbpedia.org/resource/東京都  

クエリー  select  discnct  ?o  where  {  <入力>  ?p  ?o  .  }  

出力    ?o  

2013-­‐05-­‐09 24

Page 25: SPARQLから入門するLinked Open Data(LOD)ハンズオン 第2回

入力    

 hCp://ja.dbpedia.org/resource/香雪園  

クエリーのもと  

select  discnct  ?o  where  {      {          <入力>  ?p  <hCp://ja.dbpedia.org/resource/日本国指定名勝の一覧>  .          <hCp://ja.dbpedia.org/resource/日本国指定名勝の一覧>  ?q  ?o  .      }      UNION      {          ?o  ?r  <hCp://ja.dbpedia.org/resource/日本国指定名勝の一覧>  .          <hCp://ja.dbpedia.org/resource/日本国指定名勝の一覧>  ?t  <入力>  .      }  }  

出力  

 ?o  

2013-­‐05-­‐09 25

Page 26: SPARQLから入門するLinked Open Data(LOD)ハンズオン 第2回

入力    

石川啄木  

クエリーのもと  

PREFIX  dcterms:<hCp://purl.org/dc/terms/>  PREFIX  foaf:<hCp://xmlns.com/foaf/0.1/>  select  discnct  ?o  from  <hCp://purl.org/net/aozora/resources>  where  {      {      #  set  creator,  get  other  ctles      []  dcterms:creator  ?creator  ;          dcterms:ctle  [  rdf:value  ?o  ]  .      ?creator  <hCp://www.w3.org/2000/01/rdf-­‐schema#seeAlso>  <hCp://ja.dbpedia.org/resource/入力>  .      }      UNION      {      #  set  ctle,  get  creator      ?uri  dcterms:creator  ?creator  ;          dcterms:ctle  [  rdf:value  "入力"  ]  .      ?creator  <hCp://www.w3.org/2000/01/rdf-­‐schema#seeAlso>  ?o  .      }      UNION      {      #  set  ctle,  get  other  ctles  of  the  same  creator      ?uri  dcterms:creator  ?creator  ;          dcterms:ctle  [  rdf:value  "入力"  ]  .      ?ctle  dcterms:creator  ?creator  ;          dcterms:ctle  [  rdf:value  ?o  ]  .      }  }  LIMIT  250  

出力  

 ?o  

2013-­‐05-­‐09 26

Page 27: SPARQLから入門するLinked Open Data(LOD)ハンズオン 第2回

PINPOINT  REMINDER

LODアプリの例

2013-­‐05-­‐09 27

Page 28: SPARQLから入門するLinked Open Data(LOD)ハンズオン 第2回

Pinpoint  Reminder

LODアプリ、です。

2013-­‐05-­‐09 28

Page 29: SPARQLから入門するLinked Open Data(LOD)ハンズオン 第2回

PinQAで、「五稜郭」に興味を持った観光客に、  森町の「榎本軍鷲ノ木上陸地」

hCp://pinqa.com/spots/245

2013-­‐05-­‐09 29

Page 30: SPARQLから入門するLinked Open Data(LOD)ハンズオン 第2回

PinQAで「六義園」を見た人に、  「日本の名勝」つながりで、函館の「香雪園」を提示

hCp://pinqa.com/spots/13415

2013-­‐05-­‐09 30

Page 31: SPARQLから入門するLinked Open Data(LOD)ハンズオン 第2回

中島ノブユキのサイトを見た人に、  「八重の桜」つながりで、森町の「榎本軍鷲ノ木上陸跡地」

hCp://www.nobuyukinakajima.com/

2013-­‐05-­‐09 31

Page 32: SPARQLから入門するLinked Open Data(LOD)ハンズオン 第2回

処理の流れ

2013-­‐05-­‐09 32

選択  

ハブ  

"香雪園"

 "六義園" SPARQL

•  DBpedia  •  青空文庫

•  青空文庫 Linked  Open  Data  

•  ヨコハマ・アートLOD  •  PinQA  •  函館まちあるきルート情報  •  函館映画ロケ地情報  •  函館土木遺産情報

Webページ参照

SPARQL

結果

結果

 六義園

 香雪園  名勝  巣鴨

 香雪園  名勝  巣鴨

 (こうではない)

Page 33: SPARQLから入門するLinked Open Data(LOD)ハンズオン 第2回

処理の流れ

2013-­‐05-­‐09 33

選択  

ハブ    "六義園" SPARQL

•  DBpedia  •  青空文庫

•  青空文庫 Linked  Open  Data  

•  ヨコハマ・アートLOD  •  PinQA  •  函館まちあるきルート情報  •  函館映画ロケ地情報  •  函館土木遺産情報

Webページ参照

SPARQL

結果

結果

 六義園

 香雪園  名勝  巣鴨

 香雪園  名勝  巣鴨

 (こうではない)

知識処理っぽいところ

"香雪園"

Page 34: SPARQLから入門するLinked Open Data(LOD)ハンズオン 第2回

処理の流れ

2013-­‐05-­‐09 34

選択  

ハブ    "六義園" SPARQL

•  DBpedia  •  青空文庫

•  青空文庫 Linked  Open  Data  

•  ヨコハマ・アートLOD  •  PinQA  •  函館まちあるきルート情報  •  函館映画ロケ地情報  •  函館土木遺産情報

Webページ参照

SPARQL

結果

結果

 六義園

 香雪園  名勝  巣鴨

 香雪園  名勝  巣鴨

 (こうではない)

リンク処理っぽいところ

"香雪園"

Page 35: SPARQLから入門するLinked Open Data(LOD)ハンズオン 第2回

処理の流れ:  2段階

1.  入力:  タグなど  2.  ハブ(関連展開)  –  入力されたタグを、それに関連するリソース群に展開  

–  SPARQLなどを利用  

3.  マッチング:  SPARQLなど  –  ハブで展開されたリソース群と、思い出し対象との比較  

–  SPARQLなどを利用、RSSも読む  

4.  出力:  Webページ(へのURL)

2013-­‐05-­‐09 35

Page 36: SPARQLから入門するLinked Open Data(LOD)ハンズオン 第2回

システム構成

2013-­‐05-­‐09 36

登録情報  •  WebページのRSS  •  SPARQLエンドポイント    

[  選択処理  ]  

ハブ  •  WebページのRSS  •  SPARQLエンドポイント  

 [  連想処理  ]  

リマインド/推薦

問合せ ハブ  •  DBpedia  •  青空文庫LOD

推薦対象  

•  青空文庫  •  ヨコハマ・アート  •  PinQA  •  函館まちあるき  •  函館映画ロケ地  •  函館土木遺産

SPARQL  RSS

SPARQL  

Google  App  Engine  Python  •  etree(XML操作)  •  …(その他ライブラリー)

Google  Chrome  JavaScript  •  jQuery

Page 37: SPARQLから入門するLinked Open Data(LOD)ハンズオン 第2回

PINPOINT  REMINDERの  ハブを作ってみよう

2013-­‐05-­‐09 37

Page 38: SPARQLから入門するLinked Open Data(LOD)ハンズオン 第2回

ハブお試しページ

hCp://pinpoint-­‐reminder.appspot.com/remind-­‐try  リンクされてない隠しページです。

2013-­‐05-­‐09 38

Page 39: SPARQLから入門するLinked Open Data(LOD)ハンズオン 第2回

"%(term)s"などが、  入力"六義園"などと  置き換わることで、  クエリーが組み上がる。  

組み上がったクエリーで、エンドポイントに問い合わせる。

2013-­‐05-­‐09 39

Page 40: SPARQLから入門するLinked Open Data(LOD)ハンズオン 第2回

既存のハブを参考にして試す

2013-­‐05-­‐09 40

すでに登録されているハブを参考に試してみる  

%(hub)s変数は使えないので、具体的なIRIに置き換える  

{          <%(term_q)s>  ?p  <%(hub)s>  .          <%(hub)s>  ?q  ?o  .  }  ↓  {          <%(term_q)s>  ?p  <hCp://ja.dbpedia.org/resource/東京都>  .          <hCp://ja.dbpedia.org/resource/東京都>  ?q  ?o  .  }

Page 41: SPARQLから入門するLinked Open Data(LOD)ハンズオン 第2回

課題

2013-­‐05-­‐09 41

Page 42: SPARQLから入門するLinked Open Data(LOD)ハンズオン 第2回

「オダギリジョー」と「函館」を関連付けてみよう

•  課題:  –  オダギリジョーと函館の関係を示すSPARQLのクエリ  –  DBpedia  Japaneseに問い合わせる  

–  これらは何も返ってこない、直接の関係はないらしい…  SELECT  *  WHERE  {  <hCp://ja.dbpedia.org/resource/オダギリジョー>  ?q  <hCp://ja.dbpedia.org/resource/函館市>  }    

などなど  

–  では、どうすれば?  

2013-­‐05-­‐09 42

Page 43: SPARQLから入門するLinked Open Data(LOD)ハンズオン 第2回

なにかを間にはさめば…

•  ハンズオンで出た案:  「斎藤一」役でNHK大河ドラマ「新選組!」に出てたので…  select  discnct  ?o  where  {      {          <%(term_q)s>  ?p  <hCp://ja.dbpedia.org/resource/新選組!>  .          <hCp://ja.dbpedia.org/resource/新選組!>  ?q  ?o  .      }      UNION      {          ?o  ?r  <hCp://ja.dbpedia.org/resource/新選組!>  .          <hCp://ja.dbpedia.org/resource/新選組!>  ?t  <%(term_q)s>  .      }  

2013-­‐05-­‐09 43

Page 44: SPARQLから入門するLinked Open Data(LOD)ハンズオン 第2回

つづく

2013-­‐05-­‐09 44