42
SPARQLから入門する Linked Open Data(LOD)ハンズオン Pinpoint ReminderによるLODアプリ構築 山口琢(D3)@高橋修研究室 はこだて未来大 v1.020130425 20130425 1

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

Embed Size (px)

DESCRIPTION

 

Citation preview

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

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

-­‐  Pinpoint  ReminderによるLODアプリ構築  -­‐

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

はこだて未来大  

v1.0、2013-­‐04-­‐25

2013-­‐04-­‐25 1

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

このハンズオンの目的・狙い

•  LODの利用方法・アプリを具体的にイメージできる

•  LODデータを設計できる  

参考:  山口の狙い  –  LODアプリの多様性:  どんなアプリが考えられるのか  

–  LODアプリ開発環境への要求仕様

2013-­‐04-­‐25 2

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

Agenda

1.  イントロ  -­‐  Linked  Open  Data(LOD)とは  -­‐  2.  SPARQLでLODを使ってみよう  ←  今日は、ここまでは是非  3.  Pinpoint  Reminder  -­‐  LODアプリの例  -­‐  4.  Pinpoint  Reminderのハブを作ってみよう  

次回、次々回、…があれば:  –  「はこだてMap+」の仕組み・設計  by  観光系の誰か  

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

–  適用分野の観点で、個別・詳細トピック  

•  開発ドキュメント管理:  要求  -­‐  仕様  -­‐  …  

•  地理情報:  地理的近さ、Geohash、…  

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

2013-­‐04-­‐25 3

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

用意するもの

•  ネットにつながるPC  •  Webブラウザー:  Firefox、Chrome、IE、Opera、…  

–  Chromeもあればベター、Pinpoint  Reminder拡張機能をインストールできるので。  •  今日は、そこまでいかない…  

…未来大ではIEユーザーをあまり見かけないが、それは特殊な状況だということを覚えておこう。  

•  テキスト編集ができるエディター  –  一括置換、エンコーディング、文字コードを扱えるとベター  

2013-­‐04-­‐25 4

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

あると/できると/知ってると便利

•  パーセントエンコーディング(URLエンコード)を、エンコード/デコードするツール  

•  ブラウザーのネットワーク要求・応答をモニターするツール  –  Firefox:  開発ツール、Firebug  

–  Chrome:  Developer  Tools  

•  JSONを整形(pre\y  print)するツール  (などなど…)  

2013-­‐04-­‐25 5

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

パーセントエンコーディング  やってみよう

•  パーセントエンコード/デコードできるツール  –  Webサイト  –  そのツールページのエンコーディングは?  

•  Unicodeになってるツールを選ぶ。Shi^-­‐JISはNG。  

•  Wikipediaで「函館」の項目を表示  –  ブラウザのURL欄は、こう見える  h\p://ja.wikipedia.org/wiki/函館  

–  でも、コピーしてテキストエディターに貼り付けると…  h\p://ja.wikipedia.org/wiki/%E5%87%BD%E9%A4%A8  

–  「%E5%87%BD%E9%A4%A8」は、「函館」をパーセントエンコードしたもの  •  ツールでデコードして、「函館」になることを確かめよう  

2013-­‐04-­‐25 6

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

イントロ

Linked  Open  Data(LOD)とは

2013-­‐04-­‐25 7

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

Linked  Open  Data(LOD) あるデータがあります。それは…  •  オープンデータ(Open  Data)だ。オープンデータとは?  •  インターフェースがWebに公開されている。  

–  インターフェース  =  URL  +  問合せ(クエリ)言語。データを取得するには、URLに問い合わせる。  

–  URL:  エンドポイント  

–  問合せ内容を記述する言語:  SPARQL(スパークル)  

•  「リンク」が設定されている(Linked)。  –  「リンクが設定されてるって、なにそれ?」  

–  それを分かることがこのゼミの目標。  

ハンズオン:  百聞は一見にしかず  –  SPARQLを使ってエンドポイントからLODにアクセス  

–  「リンク」を体感  

–  開発者向け、not  エンドユーザー向け  

2013-­‐04-­‐25 8

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

参考資料

セマンティック  HTML/XHTML  –  神崎正英さん  

–  毎日コミュニケーションズ  

–  未来大の情報ライブラリーにもある。

–  SPARQLは、後半のp.346から。「いきなり、ここから入ろう」というのが、今回のハンズオン。  

2013-­‐04-­‐25 9

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

SPARQLでLODを使ってみよう

2013-­‐04-­‐25 10

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

エンドポイント

1.  DBpedia  Japanese  h\p://ja.dbpedia.org/sparql  DBpedia  Japanese  by  DBpedia  Community  

2.  函館○○情報  h\p://210.226.0.93/sparql/

函館まちあるきマップ  by  函館市;  はこだてフィルムコミッション  by  函館市;  函館近代化遺産ポータルサイト  by  函館高専、ノース技研  

運営  by  はこだて未来大学 高度ICT演習観光系プロジェクト?  

3.  DBpedia  h\p://dbpedia.org/sparql  

2013-­‐04-­‐25 11

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

SPARQLで「函館○○情報」を使ってみよう

2013-­‐04-­‐25 12

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

函館○○情報

たどり着いてみよう  1.  LODチャレンジ2012  

h\p://lod.sfc.keio.ac.jp/challenge2012/index.html  

2.  エントリー  /  データセット部門  3.  d055  函館まちあるきルート情報  

4.  データセットのURL  h\p://210.226.0.93/status/  

5.  Execute  a  test  query  h\p://210.226.0.93/test/

2013-­‐04-­‐25 13

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

SPARQLで書かれた問合せ(クエリ)

•  SPARQLで書かれた問合せ  PREFIX  rdf:  <h\p://www.w3.org/1999/02/22-­‐rdf-­‐syntax-­‐ns#>  PREFIX  rdfs:  <h\p://www.w3.org/2000/01/rdf-­‐schema#>    SELECT  *  WHERE  {      ?s  ?p  ?o  .  }  LIMIT  10  

•  実行「Execute」してみる…!  –  ブラウザに表示される  

–  or  ダウンロードが始まる  ←  テキストエディターで開く  

2013-­‐04-­‐25 14

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

問合せ結果

<?xml  version="1.0"?>  <sparql  xmlns="h\p://www.w3.org/2005/sparql-­‐results#">      <head>          <variable  name="s"/>          <variable  name="p"/>          <variable  name="o"/>      </head>      <results>          <result>              <binding  name="s"><uri>urn:日本最古のコンクリート電柱</uri></binding>              <binding  name="p"><uri>h\p://purl.org/dc/elements/1.1/date</uri></binding>              <binding  name="o"><literal>1923</literal></binding>          </result>        <result>              <binding  name="s"><uri>urn:旧戸井線</uri></binding>              <binding  name="p"><uri>h\p://schema.org/image</uri></binding>              <binding  name="o"><literal>h\p://u.jimdo.com/www19/o/s8a796cc0310d2bed/img/i9a4c6cff5aae4279/1338284028/thumb/image.jpg</literal></binding>          </result>            …        </results>  </sparql>  

2013-­‐04-­‐25 15

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

解釈

「urn:日本最古のコンクリート電柱」の  「h\p://purl.org/dc/elements/1.1/date」は  「1923」です。  

–  urn:日本最古のコンクリート電柱  •  主語、Subject  

–  h\p://purl.org/dc/elements/1.1/date  •  述語、Predicate  

•  Dublin  Coreという語彙での「日付」  

–  1923  •  目的語、Object。これを目的語と呼ぶ。  

•  1923  

「urn:日本最古のコンクリート電柱」の「日付」は「1923」です。  

2013-­‐04-­‐25 16

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

?s  ?p  ?o  .

•  変数  

•  s、p、oの文字列は、何でもよい。順番・位置に意味がある。  

2013-­‐04-­‐25 17

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

トライ!

PREFIX  rdf:  <h\p://www.w3.org/1999/02/22-­‐rdf-­‐syntax-­‐ns#>  PREFIX  rdfs:  <h\p://www.w3.org/2000/01/rdf-­‐schema#>    SELECT  *  WHERE  {      ?s  ?p  ?A  .  }  LIMIT  10  

2013-­‐04-­‐25 18

?o  →  ?A

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

結果

<?xml  version="1.0"?>  <sparql  xmlns="h\p://www.w3.org/2005/sparql-­‐results#">      <head>          <variable  name="s"/>          <variable  name="p"/>          <variable  name="A"/>      </head>      <results>          <result>              <binding  name="s"><uri>urn:日本最古のコンクリート電柱</uri></binding>              <binding  name="p"><uri>h\p://purl.org/dc/elements/1.1/date</uri></binding>              <binding  name="A"><literal>1923</literal></binding>          </result>        <result>              <binding  name="s"><uri>urn:旧戸井線</uri></binding>              <binding  name="p"><uri>h\p://schema.org/image</uri></binding>              <binding  name="A"><literal>h\p://u.jimdo.com/www19/o/s8a796cc0310d2bed/img/i9a4c6cff5aae4279/1338284028/thumb/image.jpg</literal></binding>          </result>            …        </results>  </sparql>  

2013-­‐04-­‐25 19

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

トライ!

PREFIX  rdf:  <h\p://www.w3.org/1999/02/22-­‐rdf-­‐syntax-­‐ns#>  PREFIX  rdfs:  <h\p://www.w3.org/2000/01/rdf-­‐schema#>    SELECT  ?o  WHERE  {      ?s  ?p  ?o  .  }  LIMIT  10  

2013-­‐04-­‐25 20

*  →  ?o

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

トライ!

PREFIX  rdf:  <h\p://www.w3.org/1999/02/22-­‐rdf-­‐syntax-­‐ns#>  PREFIX  rdfs:  <h\p://www.w3.org/2000/01/rdf-­‐schema#>    SELECT  *  WHERE  {      <urn:日本最古のコンクリート電柱>  ?p  ?o  .  }  LIMIT  10  

2013-­‐04-­‐25 21

?s  →  urn:日本最古のコンクリート電柱

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

トライ!

PREFIX  rdf:  <h\p://www.w3.org/1999/02/22-­‐rdf-­‐syntax-­‐ns#>  PREFIX  rdfs:  <h\p://www.w3.org/2000/01/rdf-­‐schema#>    SELECT  ?o  WHERE  {      ?s  <h\p://schema.org/url>  ?o  .  }  LIMIT  10  

2013-­‐04-­‐25 22

?p  →  <h\p://schema.org/url>

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

トライ!

PREFIX  rdf:  <h\p://www.w3.org/1999/02/22-­‐rdf-­‐syntax-­‐ns#>  PREFIX  rdfs:  <h\p://www.w3.org/2000/01/rdf-­‐schema#>    SELECT  *  WHERE  {      ?s  ?p  "1923"  .  }  LIMIT  10  

2013-­‐04-­‐25 23

?o  →  "1923"

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

文法

PREFIX  rdf:  <h\p://www.w3.org/1999/02/22-­‐rdf-­‐syntax-­‐ns#>  PREFIX  rdfs:  <h\p://www.w3.org/2000/01/rdf-­‐schema#>    SELECT  ?s  WHERE  {      ?s  ?p  "1923"  .  }  LIMIT  10  

2013-­‐04-­‐25 24

WHERE  {  …  }  …というパターンに当てはまる  

?s(主語)、?p(述語)、?o(目的語)の組から

?s  変数?sを

SELECT  取り出しなさい

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

絞り込み

PREFIX  rdf:  <h\p://www.w3.org/1999/02/22-­‐rdf-­‐syntax-­‐ns#>  PREFIX  rdfs:  <h\p://www.w3.org/2000/01/rdf-­‐schema#>    SELECT  *  WHERE  {      ?s  <h\p://purl.org/dc/elements/1.1/date>  ?o  .      FILTER  (  "1923"  <=  ?o  )  }  LIMIT  10  

2013-­‐04-­‐25 25

?oが"1923"より大きい

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

トライ!

「函館○○情報」データセットから  「恵山山頂」よりも「北」にあるものをリストアップ

2013-­‐04-­‐25 26

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

問合せ例  #1

1.  とにかく情報をたくさん取り出して、  

2.  「恵山山頂」の情報を手作業で探し出して、  

3.  「恵山山頂」緯度をゲットしてから、  

4.  クエリを書く    

2013-­‐04-­‐25 27

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

問合せ例  #1  1.  とにかく情報をたくさん…

•  クエリ  PREFIX  rdf:  <h\p://www.w3.org/1999/02/22-­‐rdf-­‐syntax-­‐ns#>  PREFIX  rdfs:  <h\p://www.w3.org/2000/01/rdf-­‐schema#>    SELECT  *  WHERE  {    ?s  ?p  ?o  .  }  LIMIT  500  

2013-­‐04-­‐25 28

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

問合せ例  #1  2.  「恵山山頂」の情報を…

…      <result>              <binding  name="s"><uri>urn:新島橋_13</uri></binding>              <binding  name="p"><uri>h\p://www.w3.org/2003/01/geo/wgs84_pos#lat</uri></binding>              <binding  name="o"><literal>41.769647</literal></binding>          </result>          <result>              <binding  name="s"><uri>urn:恵山山頂_20</uri></binding>              <binding  name="p"><uri>h\p://www.w3.org/2003/01/geo/wgs84_pos#lat</uri></binding>              <binding  name="o"><literal>41.810507498395</literal></binding>          </result>          <result>              <binding  name="s"><uri>urn:函館漁港船入澗防波堤</uri></binding>              <binding  name="p"><uri>h\p://www.w3.org/2003/01/geo/wgs84_pos#lat</uri></binding>              <binding  name="o"><literal>41.7732320517</literal></binding>          </result>    …  

2013-­‐04-­‐25 29

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

問合せ例  #1  3.  「恵山山頂」緯度を…

「h\p://www.w3.org/2003/01/geo/wgs84_pos#lat」が緯度  

…  <result>              <binding  name="s"><uri>urn:新島橋_13</uri></binding>              <binding  name="p"><uri>h\p://www.w3.org/2003/01/geo/wgs84_pos#lat</uri></binding>              <binding  name="o"><literal>41.769647</literal></binding>          </result>          <result>              <binding  name="s"><uri>urn:恵山山頂_20</uri></binding>              <binding  name="p"><uri>h\p://www.w3.org/2003/01/geo/wgs84_pos#lat</uri></binding>              <binding  name="o"><literal>41.810507498395</literal></binding>          </result>          <result>              <binding  name="s"><uri>urn:函館漁港船入澗防波堤</uri></binding>              <binding  name="p"><uri>h\p://www.w3.org/2003/01/geo/wgs84_pos#lat</uri></binding>              <binding  name="o"><literal>41.7732320517</literal></binding>          </result>  …  

2013-­‐04-­‐25 30

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

問合せ例  #1  4.クエリを書く

?  

2013-­‐04-­‐25 31

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

問合せ例  #1  4.クエリを書く

PREFIX  rdf:  <h\p://www.w3.org/1999/02/22-­‐rdf-­‐syntax-­‐ns#>  PREFIX  rdfs:  <h\p://www.w3.org/2000/01/rdf-­‐schema#>    SELECT  *  WHERE  {      ?s  <h\p://www.w3.org/2003/01/geo/wgs84_pos#lat>  ?o  .      filter  (  "41.810507498395"  <  ?o  )  }  LIMIT  250  

2013-­‐04-­‐25 32

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

問合せ例  #1  3.  「恵山山頂」緯度を…

ところで、    

h\p://www.w3.org/2003/01/geo/wgs84_pos#lat  が緯度  

↑  

って、なぜ分かるの?  

2013-­‐04-­‐25 33

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

問合せ例  #1ができたら…

別の書き方を考えてください

2013-­‐04-­‐25 34

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

問合せ例  #2

?  

2013-­‐04-­‐25 35

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

問合せ例  #2

PREFIX  rdf:  <h\p://www.w3.org/1999/02/22-­‐rdf-­‐syntax-­‐ns#>  PREFIX  rdfs:  <h\p://www.w3.org/2000/01/rdf-­‐schema#>    SELECT  ?s  ?q  WHERE  {      <urn:恵山山頂_20>  <h\p://www.w3.org/2003/01/geo/wgs84_pos#lat>  ?q  .      ?s  <h\p://www.w3.org/2003/01/geo/wgs84_pos#lat>  ?q  .      filter  (?q  <  ?o)  }  LIMIT  250  

2013-­‐04-­‐25 36

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

#1と#2の違い

地殻変動で恵山の緯度が変わった後…  •  #1  

filter  (  "41.810507498395"  <  ?o  )  –  緯度の値がベタに書かれている。  –  クエリを書き直さなくてはならない。  

•  #2  <urn:恵山山頂_20>  <h\p://www.w3.org/2003/01/geo/wgs84_pos#lat>  ?q  .  filter  (?q  <  ?o)  –  緯度の値を「函館○○情報」から取得している。  –  「函館○○情報」が更新されていれば、  –  クエリを書き直さなくてよい。

2013-­‐04-­‐25 37

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

問合せ例  #3

PREFIX  rdf:  <h\p://www.w3.org/1999/02/22-­‐rdf-­‐syntax-­‐ns#>  PREFIX  rdfs:  <h\p://www.w3.org/2000/01/rdf-­‐schema#>    SELECT  ?s  ?q  WHERE  {      ?e  <h\p://www.w3.org/2003/01/geo/wgs84_pos#lat>  ?o  .      ?s  <h\p://www.w3.org/2003/01/geo/wgs84_pos#lat>  ?q  .      filter  (  ?o  <  ?q  )      filter  (  regex(str(?e),  "恵山山頂",  "i")  )  }  LIMIT  250  

 

PS:  –    "i"は不要  

–    disznct  ?s  ?qがベター  

…  

2013-­‐04-­‐25 38

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

#1、#2と#3の違いは?

?

2013-­‐04-­‐25 39

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

SQL知ってる人  (^-­‐^)/

たいていは、  「SPARQLはSQLに似てます。…以上っ!」  

と説明されます。

2013-­‐04-­‐25 40

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

体験したこと…

•  SPARQLを書いてみた。  •  SPARQLで、情報を取り出してみた。…悩んだ。  

–  大丈夫、みんな悩んでます。  

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

2013-­‐04-­‐25 41

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

つづく

2013-­‐04-­‐25 42