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

6,020 views

Published on

Published in: Technology

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

  1. 1. SPARQLから入門する  Linked  Open  Data(LOD)ハンズオン  -­‐  Pinpoint  ReminderによるLODアプリ構築  -­‐ 山口琢(D3)@高橋修研究室  はこだて未来大  v1.0、2013-­‐04-­‐25 2013-­‐04-­‐25 1
  2. 2. このハンズオンの目的・狙い •  LODの利用方法・アプリを具体的にイメージできる •  LODデータを設計できる  参考:  山口の狙い  –  LODアプリの多様性:  どんなアプリが考えられるのか  –  LODアプリ開発環境への要求仕様 2013-­‐04-­‐25 2
  3. 3. 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
  4. 4. 用意するもの •  ネットにつながるPC  •  Webブラウザー:  Firefox、Chrome、IE、Opera、…  –  Chromeもあればベター、Pinpoint  Reminder拡張機能をインストールできるので。  •  今日は、そこまでいかない…  …未来大ではIEユーザーをあまり見かけないが、それは特殊な状況だということを覚えておこう。  •  テキスト編集ができるエディター  –  一括置換、エンコーディング、文字コードを扱えるとベター  2013-­‐04-­‐25 4
  5. 5. あると/できると/知ってると便利 •  パーセントエンコーディング(URLエンコード)を、エンコード/デコードするツール  •  ブラウザーのネットワーク要求・応答をモニターするツール  –  Firefox:  開発ツール、Firebug  –  Chrome:  Developer  Tools  •  JSONを整形(prey  print)するツール  (などなど…)  2013-­‐04-­‐25 5
  6. 6. パーセントエンコーディング  やってみよう •  パーセントエンコード/デコードできるツール  –  Webサイト  –  そのツールページのエンコーディングは?  •  Unicodeになってるツールを選ぶ。Shi^-­‐JISはNG。  •  Wikipediaで「函館」の項目を表示  –  ブラウザのURL欄は、こう見える  hp://ja.wikipedia.org/wiki/函館  –  でも、コピーしてテキストエディターに貼り付けると…  hp://ja.wikipedia.org/wiki/%E5%87%BD%E9%A4%A8  –  「%E5%87%BD%E9%A4%A8」は、「函館」をパーセントエンコードしたもの  •  ツールでデコードして、「函館」になることを確かめよう  2013-­‐04-­‐25 6
  7. 7. イントロ Linked  Open  Data(LOD)とは 2013-­‐04-­‐25 7
  8. 8. Linked  Open  Data(LOD) あるデータがあります。それは…  •  オープンデータ(Open  Data)だ。オープンデータとは?  •  インターフェースがWebに公開されている。  –  インターフェース  =  URL  +  問合せ(クエリ)言語。データを取得するには、URLに問い合わせる。  –  URL:  エンドポイント  –  問合せ内容を記述する言語:  SPARQL(スパークル)  •  「リンク」が設定されている(Linked)。  –  「リンクが設定されてるって、なにそれ?」  –  それを分かることがこのゼミの目標。  ハンズオン:  百聞は一見にしかず  –  SPARQLを使ってエンドポイントからLODにアクセス  –  「リンク」を体感  –  開発者向け、not  エンドユーザー向け  2013-­‐04-­‐25 8
  9. 9. 参考資料 セマンティック  HTML/XHTML  –  神崎正英さん  –  毎日コミュニケーションズ  –  未来大の情報ライブラリーにもある。 –  SPARQLは、後半のp.346から。「いきなり、ここから入ろう」というのが、今回のハンズオン。  2013-­‐04-­‐25 9
  10. 10. SPARQLでLODを使ってみよう 2013-­‐04-­‐25 10
  11. 11. エンドポイント 1.  DBpedia  Japanese  hp://ja.dbpedia.org/sparql  DBpedia  Japanese  by  DBpedia  Community  2.  函館○○情報  hp://210.226.0.93/sparql/ 函館まちあるきマップ  by  函館市;  はこだてフィルムコミッション  by  函館市;  函館近代化遺産ポータルサイト  by  函館高専、ノース技研  運営  by  はこだて未来大学 高度ICT演習観光系プロジェクト?  3.  DBpedia  hp://dbpedia.org/sparql  2013-­‐04-­‐25 11
  12. 12. SPARQLで「函館○○情報」を使ってみよう 2013-­‐04-­‐25 12
  13. 13. 函館○○情報 たどり着いてみよう  1.  LODチャレンジ2012  hp://lod.sfc.keio.ac.jp/challenge2012/index.html  2.  エントリー  /  データセット部門  3.  d055  函館まちあるきルート情報  4.  データセットのURL  hp://210.226.0.93/status/  5.  Execute  a  test  query  hp://210.226.0.93/test/ 2013-­‐04-­‐25 13
  14. 14. SPARQLで書かれた問合せ(クエリ) •  SPARQLで書かれた問合せ  PREFIX  rdf:  <hp://www.w3.org/1999/02/22-­‐rdf-­‐syntax-­‐ns#>  PREFIX  rdfs:  <hp://www.w3.org/2000/01/rdf-­‐schema#>    SELECT  *  WHERE  {      ?s  ?p  ?o  .  }  LIMIT  10  •  実行「Execute」してみる…!  –  ブラウザに表示される  –  or  ダウンロードが始まる  ←  テキストエディターで開く  2013-­‐04-­‐25 14
  15. 15. 問合せ結果 <?xml  version="1.0"?>  <sparql  xmlns="hp://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>hp://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>hp://schema.org/image</uri></binding>              <binding  name="o"><literal>hp://u.jimdo.com/www19/o/s8a796cc0310d2bed/img/i9a4c6cff5aae4279/1338284028/thumb/image.jpg</literal></binding>          </result>            …        </results>  </sparql>  2013-­‐04-­‐25 15
  16. 16. 解釈 「urn:日本最古のコンクリート電柱」の  「hp://purl.org/dc/elements/1.1/date」は  「1923」です。  –  urn:日本最古のコンクリート電柱  •  主語、Subject  –  hp://purl.org/dc/elements/1.1/date  •  述語、Predicate  •  Dublin  Coreという語彙での「日付」  –  1923  •  目的語、Object。これを目的語と呼ぶ。  •  1923  「urn:日本最古のコンクリート電柱」の
「日付」は
「1923」です。  2013-­‐04-­‐25 16
  17. 17. ?s  ?p  ?o  . •  変数  •  s、p、oの文字列は、何でもよい。順番・位置に意味がある。  2013-­‐04-­‐25 17
  18. 18. トライ! PREFIX  rdf:  <hp://www.w3.org/1999/02/22-­‐rdf-­‐syntax-­‐ns#>  PREFIX  rdfs:  <hp://www.w3.org/2000/01/rdf-­‐schema#>    SELECT  *  WHERE  {      ?s  ?p  ?A  .  }  LIMIT  10  2013-­‐04-­‐25 18 ?o  →  ?A
  19. 19. 結果 <?xml  version="1.0"?>  <sparql  xmlns="hp://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>hp://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>hp://schema.org/image</uri></binding>              <binding  name="A"><literal>hp://u.jimdo.com/www19/o/s8a796cc0310d2bed/img/i9a4c6cff5aae4279/1338284028/thumb/image.jpg</literal></binding>          </result>            …        </results>  </sparql>  2013-­‐04-­‐25 19
  20. 20. トライ! PREFIX  rdf:  <hp://www.w3.org/1999/02/22-­‐rdf-­‐syntax-­‐ns#>  PREFIX  rdfs:  <hp://www.w3.org/2000/01/rdf-­‐schema#>    SELECT  ?o  WHERE  {      ?s  ?p  ?o  .  }  LIMIT  10  2013-­‐04-­‐25 20 *  →  ?o
  21. 21. トライ! PREFIX  rdf:  <hp://www.w3.org/1999/02/22-­‐rdf-­‐syntax-­‐ns#>  PREFIX  rdfs:  <hp://www.w3.org/2000/01/rdf-­‐schema#>    SELECT  *  WHERE  {      <urn:日本最古のコンクリート電柱>  ?p  ?o  .  }  LIMIT  10  2013-­‐04-­‐25 21 ?s  →  urn:日本最古のコンクリート電柱
  22. 22. トライ! PREFIX  rdf:  <hp://www.w3.org/1999/02/22-­‐rdf-­‐syntax-­‐ns#>  PREFIX  rdfs:  <hp://www.w3.org/2000/01/rdf-­‐schema#>    SELECT  ?o  WHERE  {      ?s  <hp://schema.org/url>  ?o  .  }  LIMIT  10  2013-­‐04-­‐25 22 ?p  →  <hp://schema.org/url>
  23. 23. トライ! PREFIX  rdf:  <hp://www.w3.org/1999/02/22-­‐rdf-­‐syntax-­‐ns#>  PREFIX  rdfs:  <hp://www.w3.org/2000/01/rdf-­‐schema#>    SELECT  *  WHERE  {      ?s  ?p  "1923"  .  }  LIMIT  10  2013-­‐04-­‐25 23 ?o  →  "1923"
  24. 24. 文法 PREFIX  rdf:  <hp://www.w3.org/1999/02/22-­‐rdf-­‐syntax-­‐ns#>  PREFIX  rdfs:  <hp://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  取り出しなさい
  25. 25. 絞り込み PREFIX  rdf:  <hp://www.w3.org/1999/02/22-­‐rdf-­‐syntax-­‐ns#>  PREFIX  rdfs:  <hp://www.w3.org/2000/01/rdf-­‐schema#>    SELECT  *  WHERE  {      ?s  <hp://purl.org/dc/elements/1.1/date>  ?o  .      FILTER  (  "1923"  <=  ?o  )  }  LIMIT  10  2013-­‐04-­‐25 25 ?oが"1923"より大きい
  26. 26. トライ! 「函館○○情報」データセットから  「恵山山頂」よりも「北」にあるものをリストアップ 2013-­‐04-­‐25 26
  27. 27. 問合せ例  #1 1.  とにかく情報をたくさん取り出して、  2.  「恵山山頂」の情報を手作業で探し出して、  3.  「恵山山頂」緯度をゲットしてから、  4.  クエリを書く    2013-­‐04-­‐25 27
  28. 28. 問合せ例  #1  1.  とにかく情報をたくさん… •  クエリ  PREFIX  rdf:  <hp://www.w3.org/1999/02/22-­‐rdf-­‐syntax-­‐ns#>  PREFIX  rdfs:  <hp://www.w3.org/2000/01/rdf-­‐schema#>    SELECT  *  WHERE  {    ?s  ?p  ?o  .  }  LIMIT  500  2013-­‐04-­‐25 28
  29. 29. 問合せ例  #1  2.  「恵山山頂」の情報を… …      <result>              <binding  name="s"><uri>urn:新島橋_13</uri></binding>              <binding  name="p"><uri>hp://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>hp://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>hp://www.w3.org/2003/01/geo/wgs84_pos#lat</uri></binding>              <binding  name="o"><literal>41.7732320517</literal></binding>          </result>    …  2013-­‐04-­‐25 29
  30. 30. 問合せ例  #1  3.  「恵山山頂」緯度を… 「hp://www.w3.org/2003/01/geo/wgs84_pos#lat」が緯度  …  <result>              <binding  name="s"><uri>urn:新島橋_13</uri></binding>              <binding  name="p"><uri>hp://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>hp://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>hp://www.w3.org/2003/01/geo/wgs84_pos#lat</uri></binding>              <binding  name="o"><literal>41.7732320517</literal></binding>          </result>  …  2013-­‐04-­‐25 30
  31. 31. 問合せ例  #1  4.クエリを書く ?  2013-­‐04-­‐25 31
  32. 32. 問合せ例  #1  4.クエリを書く PREFIX  rdf:  <hp://www.w3.org/1999/02/22-­‐rdf-­‐syntax-­‐ns#>  PREFIX  rdfs:  <hp://www.w3.org/2000/01/rdf-­‐schema#>    SELECT  *  WHERE  {      ?s  <hp://www.w3.org/2003/01/geo/wgs84_pos#lat>  ?o  .      filter  (  "41.810507498395"  <  ?o  )  }  LIMIT  250  2013-­‐04-­‐25 32
  33. 33. 問合せ例  #1  3.  「恵山山頂」緯度を… ところで、    hp://www.w3.org/2003/01/geo/wgs84_pos#lat  が緯度  ↑  って、なぜ分かるの?  2013-­‐04-­‐25 33
  34. 34. 問合せ例  #1ができたら… 別の書き方を考えてください 2013-­‐04-­‐25 34
  35. 35. 問合せ例  #2 ?  2013-­‐04-­‐25 35
  36. 36. 問合せ例  #2 PREFIX  rdf:  <hp://www.w3.org/1999/02/22-­‐rdf-­‐syntax-­‐ns#>  PREFIX  rdfs:  <hp://www.w3.org/2000/01/rdf-­‐schema#>    SELECT  ?s  ?q  WHERE  {      <urn:恵山山頂_20>  <hp://www.w3.org/2003/01/geo/wgs84_pos#lat>  ?q  .      ?s  <hp://www.w3.org/2003/01/geo/wgs84_pos#lat>  ?q  .      filter  (?q  <  ?o)  }  LIMIT  250  2013-­‐04-­‐25 36
  37. 37. #1と#2の違い 地殻変動で恵山の緯度が変わった後…  •  #1  filter  (  "41.810507498395"  <  ?o  )  –  緯度の値がベタに書かれている。  –  クエリを書き直さなくてはならない。  •  #2  <urn:恵山山頂_20>  <hp://www.w3.org/2003/01/geo/wgs84_pos#lat>  ?q  .  filter  (?q  <  ?o)  –  緯度の値を「函館○○情報」から取得している。  –  「函館○○情報」が更新されていれば、  –  クエリを書き直さなくてよい。 2013-­‐04-­‐25 37
  38. 38. 問合せ例  #3 PREFIX  rdf:  <hp://www.w3.org/1999/02/22-­‐rdf-­‐syntax-­‐ns#>  PREFIX  rdfs:  <hp://www.w3.org/2000/01/rdf-­‐schema#>    SELECT  ?s  ?q  WHERE  {      ?e  <hp://www.w3.org/2003/01/geo/wgs84_pos#lat>  ?o  .      ?s  <hp://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
  39. 39. #1、#2と#3の違いは? ? 2013-­‐04-­‐25 39
  40. 40. SQL知ってる人  (^-­‐^)/ たいていは、  「SPARQLはSQLに似てます。…以上っ!」  と説明されます。 2013-­‐04-­‐25 40
  41. 41. 体験したこと… •  SPARQLを書いてみた。  •  SPARQLで、情報を取り出してみた。…悩んだ。  –  大丈夫、みんな悩んでます。  –  自分がLODデータを公開したら、世界の開発者が、自分のデータに対して、同じように悩むのです。  2013-­‐04-­‐25 41
  42. 42. つづく 2013-­‐04-­‐25 42

×