Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

大阪市オープンデータポータルAPI(SPARQL)勉強会

806 views

Published on

大阪市オープンデータポータルAPI(SPARQL)勉強会
2017年3月1日(水)@大阪イノベーションハブ

Published in: Technology
  • Be the first to comment

大阪市オープンデータポータルAPI(SPARQL)勉強会

  1. 1. 大阪市オープンデータポータル API(SPARQL)勉強会 主催:ODI Osaka,LODチャレンジ実行委員会関西支部, NPO法人 Linked Open Data Initiative 共催:大阪イノベーションハブ 協力:Code for Osaka 大阪市オープンデータポータルサイト https://data.city.osaka.lg.jp/ 2017年3月1日(水) @大阪イノベーションハブ
  2. 2. 自己紹介  オープンデータに関わる活動  人工知能学会・セマンティックウェブとオントロジー研究会 主査  LODチャレンジ実行委員会(2011~)関西支部長(副実行委員長)  「LOD(Linked Open Data)ハッカソン関西」などの運営  アーバンデータチャレンジ2016・大阪ブロック コーディネーター  特に,地元「関西・大阪」でのコミュニティを大きくしたい  委員:神戸市オープンデータ推進会議,大阪市市民活動推進審議会 研究成果として 公開中のソフト  古崎(こざき)晃司 @koujikozaki  本職: 大阪大学の研究者  専門: オントロジー工学(人工知能・知識工学) =“かしこい”コンピュータ(ソフトウェア)を作る →学問にとどまらず, 世の中で使われる技術を作りたい 大阪市オープンデータポータルAPI勉強会
  3. 3. 本日の予定 19:00〜 趣旨説明 19:10〜 大阪市オープンデータポータル APIを例としたSPARQL入門 20:00〜 ハンズオン :SPARQLクエリ(&可視化) 20:45~ 成果共有 21:00 終了 大阪市オープンデータポータルAPI勉強会
  4. 4. 開催趣旨 • 2017年3月5日(世界統一日は3月4日)に行われる 第8回LODハッカソン関西 in  インターナショナル・オープンデータ・デイ大阪2017 のプレイベント • 当日の利用が想定される「大阪市オープンデータ ポータルのAPI(SPARQLエンドポイント)」の使い方を 学ぶ →SPARQLはLinked Data/LOD(Linked Open Data)の 標準仕様 = 他のLOD(SPARQLエンドポイント)でも利用できる 技術を学ぶ 大阪市オープンデータポータルAPI勉強会
  5. 5. 第8回LODハッカソン関西 in インターナショナル・オープンデータ・デイ大阪2017 主催:ODI Osaka,Linked Open Dataチャレンジ実⾏委員会関⻄⽀部, NPO法⼈ Linked Open Data Initiative 共催:⼤阪イノベーションハブ 協⼒:Code for Osaka 詳細・イベント申込サイト: http://iodd2017osaka.peatix.com ⽇時:2017年3⽉5⽇(⽇) 会場:⼤阪イノベーションハブ (JR⼤阪駅より徒歩7分) 世界中の国や都市などで,オープン データを促進するために世界で同⽇ 開催(統⼀⽇は3/4) される「インター ナショナル・オープンデータ・デイ (IODD)」 の⼤阪会場です. ⼤阪会場では,⼤阪市や近隣の⾃治体が公開しているオープンデータを中⼼ に,オープンデータを5つ星のLODとして公開する「データソン」とLODを 利⽤したアプリを開発する「ハッカソン」のチームに分かれて活動します. ⼤阪市オープンデータポータルAPI勉強会
  6. 6. ⽇時:2017年3⽉11⽇(⼟)13:00 - 18:00 会場:東京⼤学本郷キャンパス⼯学部2号館 主催:LODチャレンジ2016実⾏委員会 Webサイト:http://lodc2016.peatix.com/⼤阪市オープンデータポータルAPI勉強会
  7. 7. 大阪市オープンデータポータル APIを例としたSPARQL入門 LODチャレンジ実行委員会/大阪大学 古崎 晃司 kozaki@ei.sanken.osaka-u.ac.jp 大阪市オープンデータポータル API(SPARQL)勉強会 2017/3/1@大阪イノベーションハブ
  8. 8. はじめに,質問  「LOD(Linked Open Data)」と いう言葉を聞いたことがある方?  LODの公開(RDFデータの公開) をしたことがある方?  SPARQLを書いたことがある方?  LODを使ったアプリを作ったこと がある方? 大阪市オープンデータポータルAPI勉強会
  9. 9. Linked Open Data (LOD) -Webの仕組みを用いた オープンデータの公開- =Linked Data + Open Data(オープンデータ) =Linked Dataとして公開されたOpen Data ※Linked Data: Webの仕組みを用いて相互に“リンクされた”データ 大阪市オープンデータポータルAPI勉強会
  10. 10. 5 ★ オープンデータ http://5stardata.info/ より オープン ライセンス (形式問わず) 機械可読な フォーマット オープンな フォーマット 大阪市オープンデータポータルAPI勉強会
  11. 11. 5★オープンデータにおけるLOD  ★★★★ (RDF) 物事を示すのにURL(IRI)を使いましょう,そうすることで 他の人々があなたのデータにリンクすることができます  ★★★★★ (LOD) あなたのデータのコンテキストを提供するために 他のデータへリンクしましょう →LOD(Linked Open Data) =Web上で相互にリンクされたOpen Data ※リンクする際には「Webの仕組み」を利用する  データ(物事)を示すのにURL(正確にはIRI)を用いる  データ間を(名前付き)Hyper-linkでリンクする http://5stardata.info/ja/ より引用 大阪市オープンデータポータルAPI勉強会
  12. 12. 既に公開・リンクされているLOD ~LODクラウド~ 2007/5/1 2007/10/82008/9/182009/7/14 2010/9/222011/9/19時点 Linking Open Data cloud diagram 2014, by Max Schmachtenberg, Christian Bizer, Anja Jentzsch and Richard Cyganiak. http://lod-cloud.net/ 1つの丸が個別に公開 されたDBを表す. 2014/08/30時点 公開したオープンデータが 他のオープンデータと「つながる」ことで「新たな価値」が生まれる DBpedia 大阪市オープンデータポータルAPI勉強会
  13. 13. LODクラウドの最新版 Linking Open Data cloud diagram 2017, by Andrejs Abele, John P. McCrae, Paul Buitelaar, Anja Jentzsch and Richard Cyganiak. http://lod-cloud.net/ 2017-02-20時点 大阪市オープンデータポータルAPI勉強会
  14. 14. Linked Data (RDF)の例 大阪府 大阪市 都道府県 223㎢ 2,687,287人 面積 人口 吹田市 豊中市 … バラ科 市の木 隣接自治体 隣接自治体 … http://ja.dbpedia.org/resource/大阪市 というURIから得られる情報 サクラ 科 Cherry blossom英名 リソース: URIで表される モノ・コト プロパティ: リソース間の関 係を表す リテラル :文字列 主語 述語 目的語 トリプル ※RDF(Linked Dataのデータ モデル)は,「トリプルの組み 合わせ」で表される (DBpedia Japaneseより) 目的語が他のリソースのとき,トリプル を辿って更なる情報が得られる ※実際のリソースとプロパティは,すべてURIで表される. 大阪市オープンデータポータルAPI勉強会
  15. 15. Linked Data (RDF)の例 http://ja.dbpe dia.org/resour ce/大阪府 http://ja.dbpe dia.org/resour ce/大阪市 http://ja.dbpedia.org/resource/都道府県 223㎢ 2,687,287人 http://ja.dbpedia.org/resource/面積 http://ja.dbpedia.org/resource/人口 http://ja.dbpe dia.org/resour ce/吹田市 http://ja.dbpe dia.org/resour ce/豊中市 … http://ja.dbpe dia.org/resour ce/バラ科 http://ja.dbpedia.org/resource/市の木 http://ja.dbpedia.org/resource/隣接自治体 http://ja.dbpedia.org/resource/隣接自治体 … http://ja.dbpedia.org/resource/大阪市 というURIから得られる情報 http://ja.dbpe dia.org/resour ce/サクラ http://ja.dbpedia.org/resource/科 Cherry blossomhttp://ja.dbpedia.org/resource/英名 (DBpedia Japaneseより) ※実際のリソースとプロパティは,すべてURIで表される. 大阪市オープンデータポータルAPI勉強会
  16. 16. RDFのシリアル化形式  RDFのシリアル化(serialize)  RDFは,リソースを主語,目的語,述語の形式で記述 するデータモデルであって,データ形式ではない.  RDFの形式に沿ってトリプルを特定の文法に従って ファイルに書き出す(シリアル化する)必要がある.  代表的なシリアル化形式  RDF/XML:計算機向け  RDFa:HTMLにRDFを埋め込む  Turtle:プレーンテキストで人間向けに読みやすい  N-Triples:1行単位で処理できるので処理しやすい  RDF/JSON:Web開発向け  JSON-LD:Linked Data用のJSON(Web開発向け) 大阪市オープンデータポータルAPI勉強会
  17. 17. Turtle・N-Triplesの表現例  Turtle @prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> @prefix foaf: <http://xmlns.com/foaf/0.1/> <http://www.ei.sanken.osaka-u.ac.jp/~kozaki/> rdf:type foaf:Person ; foaf:name “Kouji Kozaki” .  N-Triples <http://www.ei.sanken.osaka-u.ac.jp/~kozaki/> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://xmlns.com/foaf/0.1/Person>. <http://www.ei.sanken.osaka-u.ac.jp/~kozaki/> <http://xmlns.com/foaf/0.1/name> “Kouji Kozaki”. http://www.ei.sanken. osaka-u.ac.jp/~kozaki/ foaf:Person rdf:type foaf:name Kouji Kozaki 1行 1行 ヘッダ 大阪市オープンデータポータルAPI勉強会
  18. 18. 大阪市オープンデータポータル サイトのAPI (SPARQLエンドポイント) の概要 目標:どのようなAPIが提供されているかの 概要を理解し,まずは,触ってみる 1. APIの概要 2. サンプルベースの簡単な使い方 大阪市オープンデータポータルAPI勉強会
  19. 19. 大阪市 オープンデータポータルサイト 2016年3月17日 オープン https://data.city.osaka.lg.jp/ 一部のオープンデータを LODとして提供 SPARQLクエリによる アクセスが可能 大阪市オープンデータポータルAPI勉強会
  20. 20. APIの概要  SPARQLエンドポイント  https://data.city.osaka.lg.jp/sparql  WebブラウザでSPARQLクエリを入力しての検索  プログラムからのSPARQLクエリを用いたアクセス が可能  LOD化されているデータ(2017/3/1/7:00時点)  トリプル数:307,589  施設情報:13,965件  都島区の広報情報:238件  イベント情報:158件 大阪市オープンデータポータルAPI勉強会
  21. 21. 簡単な使い方:①クエリ例を選ぶ  https://data.city.osaka.lg.jp/api/ から「クエリ例」をコピーする 大阪市オープンデータポータルAPI勉強会
  22. 22. 簡単な使い方:②クエリを入力  SPARQLエンドポイント (https://data.city.osaka.lg. jp/sparql)の「Query Tex」 欄に,先に選択したクエリ例 を張り付ける.  「Run Query」で検索実行 大阪市オープンデータポータルAPI勉強会
  23. 23. 簡単な使い方:③検索結果 大阪市オープンデータポータルAPI勉強会
  24. 24. 簡単な使い方:④例の書き換え  クエリ例を少し書き換えていろいろ試してみる 例)施設(ヘリポート)情報を取得 PREFIX ic: <http://imi.ipa.go.jp/ns/core/rdf#> PREFIX dsv: <http://datashelf.jp/ns/dsv#> select distinct ?s ?label ?address ?lat ?long where { ?s a ic:施設型 ; rdfs:label ?label ; ic:住所 / ic:表記 ?address ; ic:種別 "防災関連施設 - 災害時用へリポート" ; ic:地理座標 / ic:緯度 ?lat ; ic:地理座標 / ic:緯度 ?long . } LIMIT 100 ここを変えると 「別の種類に施設」 の検索が出来そう... 大阪市オープンデータポータルAPI勉強会
  25. 25. 大阪市のオープンデータを 例としたSPARQLクエリの基本 目標:基本的なSPARQLクエリの書き方を理 解し,自分でクエリを書いてみる. 1. SPARQLクエリの基本的考え方 2. 事前に調べておくべき情報 3. 大阪市のオープンデータ(施設情報)を例とし たSPARQLハンズオン 大阪市オープンデータポータルAPI勉強会
  26. 26. SPARQLによるRDFの検索  SPARQL  RDFデータに対するクエリ言語  「指定したグラフ構造」に一致するトリプルを検索する  最も基本的な検索 select ?s ?p ?o where { ?s ?p ?o . } LIMIT 100 ←取得する数の制限 ←検索するグラフのパターン ←返す要素 この例では「任意のトリプルの組み合わせ」 このパターンを変 えることで,欲しい データを取得する 「.」(ピリオド)を忘れない * とすると全ての変数を返す 大阪市オープンデータポータルAPI勉強会
  27. 27. 大阪市の施設情報のデータ例  避難所のデータ例 :31252 a ic:施設型 ; rdfs:label "塩草小学校" ; ic:種別 "災害時避難所・一時避難場所" ; ic:名称 [ ic:表記 "塩草小学校" ] ; ic:住所 [ a ic:住所型 ; ic:区 "浪速区" ; ic:表記 "塩草1-4-31" ] ; ic:連絡先 [ ic:電話番号 "6561-3095" ] ; ic:地理座標 [ ic:緯度 "135.490601277778" ; ic:経度 "34.6613825277778" ] . ※以下,可視化にはhttp://www.kanzaki.com/works/2009/pub/graph-drawを利用 こんな形のグラフから 「指定したパターン(形)」 に一致するものを探す 大阪市オープンデータポータルAPI勉強会
  28. 28. IRIによるRDFデータの表現  先ほどのデータをIRIを用いて厳密に表現すると...  すべてのデータ(リソース)・関係(プロパティ)に 「IRIが与えられている」 →見やすくするために接頭語(プレフィックス)が用いられる  例) http://imi.ipa.go.jp/ns/core/rdf#施設型 → ic:施設型 大阪市オープンデータポータルAPI勉強会
  29. 29. SPARQLクエリを書く前に調べて おくべき情報  SPARQLエンドポイントの情報  APIにアクセスする為のURL  その他の仕様(アクセス制限など)  どのようなデータがあるのか?  データの種類(クラス:Class)  利用されている関係の種類 (プロパティ;Property)  データの具体例  RDFモデル(図)  使われているIRIについて  ベースIRI:  使われている語彙の接頭語(prefix) これらは, 「SPARQLクエリ」 を用いて調べるこ とも可 大阪市オープンデータポータルAPI勉強会
  30. 30. 大阪市【施設情報】の場合  SPARQLエンドポイントの情報  https://data.city.osaka.lg.jp/sparql  どのようなデータがあるのか?  データの種類(クラス:Class):  ic:施設型  使われているIRIについて  ベースIRI:  http://data.city.osaka.lg.jp/rdf/resource/  ※現状では「http://data.city.osaka.lg.jp/linkeddata/resource/」 のものも混在している様子?  使われている語彙の接頭語(prefix)  rdf http://www.w3.org/1999/02/22-rdf-syntax-ns#  rdfs http://www.w3.org/2000/01/rdf-schema#  xsd http://www.w3.org/2001/XMLSchema#  ic http://imi.ipa.go.jp/ns/core/rdf# https://data.city.osaka.lg.jp/api/ より,施設情報に使用されている情報のみ抜粋 大阪市オープンデータポータルAPI勉強会
  31. 31. 大阪市【施設情報】のプロパティ 属性 定義 値 rdfs:label RDFリソースのラベル 文字列 ic:名称 施設の名称を表す ic:名称型 ic:表記 名称や住所等の表記 文字列 ic:カナ表記 名称のカナ表記 文字列 ic:種別 施設の種別を表す文字列 文字列 ic:種別コード 施設の種別を表すコード ic:コード型 ic:地理座標 地理空間座標 ic:座標型 ic:緯度 施設の地理空間上の緯度を示す値(WGS84) 文字列 ic:経度 施設の地理空間上の経度を示す値(WGS84) 文字列 ic:住所 所在地の住所 ic:住所型 ic:区 所在地のうち、区を記述 文字列 ic:連絡先 連絡先について 連絡先型 ic:電話 電話番号 文字列 ic:FAX FAX番号 文字列 ic:Webサイト WebサイトのURL 文字列 ic:バリアフリー バリアフリーに関する記述 文字列 ic:説明 施設に関する説明 文字列 ※施設情報から,直接, 使われていない プロパティがるので注意. 大阪市オープンデータポータルAPI勉強会
  32. 32. 大阪市【施設情報】のデータ例 :31252 a ic:施設型 ; rdfs:label "塩草小学校" ; ic:種別 "災害時避難所・一時避難場所" ; ic:名称 [ ic:表記 "塩草小学校" ] ; ic:住所 [ a ic:住所型 ; ic:区 "浪速区" ; ic:表記 "塩草1-4-31" ] ; ic:連絡先 [ ic:電話番号 "6561-3095" ] ; ic:地理座標 [ ic:緯度 "135.490601277778" ; ic:経度 "34.6613825277778" ] . 行頭の“:”は「ベースIRI」を表す 大阪市オープンデータポータルAPI勉強会
  33. 33. 参考:プロパティの組み合わせ p p2 http://imi.ipa.go.jp/ns/core/rdf#地理座標 http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://imi.ipa.go.jp/ns/core/rdf#住所 http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://imi.ipa.go.jp/ns/core/rdf#名称 http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://imi.ipa.go.jp/ns/core/rdf#地理座標 http://imi.ipa.go.jp/ns/core/rdf#緯度 http://imi.ipa.go.jp/ns/core/rdf#住所 http://imi.ipa.go.jp/ns/core/rdf#区 http://imi.ipa.go.jp/ns/core/rdf#地理座標 http://imi.ipa.go.jp/ns/core/rdf#経度 http://imi.ipa.go.jp/ns/core/rdf#住所 http://imi.ipa.go.jp/ns/core/rdf#表記 http://imi.ipa.go.jp/ns/core/rdf#名称 http://imi.ipa.go.jp/ns/core/rdf#表記 http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://www.w3.org/2000/01/rdf-schema#label http://imi.ipa.go.jp/ns/core/rdf#種別 http://imi.ipa.go.jp/ns/core/rdf#備考 http://imi.ipa.go.jp/ns/core/rdf#連絡先 http://imi.ipa.go.jp/ns/core/rdf#連絡先 http://imi.ipa.go.jp/ns/core/rdf#電話番号 http://imi.ipa.go.jp/ns/core/rdf#連絡先 http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://imi.ipa.go.jp/ns/core/rdf#利用可能時間 http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://imi.ipa.go.jp/ns/core/rdf#連絡先 http://imi.ipa.go.jp/ns/core/rdf#Webサイト http://imi.ipa.go.jp/ns/core/rdf#連絡先 http://imi.ipa.go.jp/ns/core/rdf#FAX番号 http://imi.ipa.go.jp/ns/core/rdf#名称 http://imi.ipa.go.jp/ns/core/rdf#ic http://imi.ipa.go.jp/ns/core/rdf#種別コード http://imi.ipa.go.jp/ns/core/rdf#説明 http://imi.ipa.go.jp/ns/core/rdf#バリアフリー http://imi.ipa.go.jp/ns/core/rdf#利用可能時間 http://imi.ipa.go.jp/ns/core/rdf#説明 大阪市オープンデータポータルAPI勉強会
  34. 34. 大阪市のオープンデータを 例としたSPARQLクエリの基本 目標:基本的なSPARQLクエリの書き方を理 解し,自分でクエリを書いてみる. 1. SPARQLクエリの基本的考え方 2. 事前に調べておくべき情報 3. 大阪市のオープンデータ(施設情報)を例とし たSPARQLハンズオン 大阪市オープンデータポータルAPI勉強会 クエリメモ(サンプルのコピー&ペースト用) https://goo.gl/nbnzDy (“l”は小文字のL)
  35. 35. SPARQL Endpointの例 https://data.city.osaka.lg.jp/sparql ここに,クエリを入れる ※プログラムからのクエリ +結果取得も可能 大阪市オープンデータポータルAPI勉強会 このボタンで検索実行 出力形式の変更も可能
  36. 36. SPARQLの検索の基本例① 「大阪市役所を主語(Subject)に含む」トリプルの述語(?p)と目的 語(?o)を取得する select distinct ?p ?o where { <http://data.city.osaka.lg.jp/linkeddata/resource/116> ?p ?o . } LIMIT 100 大阪市役所のIRI 同じパターンは除外する ↓ 大阪市オープンデータポータルAPI勉強会 ↑検索結果の数の上限 欲しい情報を表す変数 (?+任意の文字列で表す) ↑ ピリオド(“.”) をつける
  37. 37. 検索結果 大阪市オープンデータポータルAPI勉強会 そもそも, 大阪市役所のIRIはどうやって知るの?
  38. 38. select distinct ?s where { ?s a <http://imi.ipa.go.jp/ns/core/rdf#施設型> . } SPARQLの検索の基本例② 「施設(ic:施設型)」の一覧を取得する. →述語が,rdfs:type(リソースのクラスを表す) 目的語が, 「施設(ic:施設型)」の主語(?s)を取得する PREFIX ic: <http://imi.ipa.go.jp/ns/core/rdf#> select distinct ?s where { ?s a ic:施設型 . } 目的語=施設型のIRI 大阪市オープンデータポータルAPI勉強会 ※接頭語(PREFIX)を用いた場合 ↑ ピリオド(“.”)をつけるrdfs:type の省略表現 PREFIXの定義 PREFIXを利用した省略表現 どちらのクエリも 同じ内容
  39. 39. 検索結果 大阪市オープンデータポータルAPI勉強会 この一覧から, 大阪市役所のIRI を探す方法は?
  40. 40. PREFIX ic: <http://imi.ipa.go.jp/ns/core/rdf#> PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> select distinct ?s where { ?s a ic:施設型 . ?s rdfs:label "大阪市役所" . } SPARQLの検索の基本例③ 述語ラベル(rdfs:label)の目的語が 「大阪市役所」と一致する 主語(?s)を取得する 目的語 大阪市オープンデータポータルAPI勉強会 ※各行毎に ピリオド(“.”)をつける 文字列の指定:「"(ダブルクォーテーション)」で囲む →条件を複数行書くことで「AND条件」での絞り込み検索となる 検索結果 正式名称が 分からないときは?
  41. 41. PREFIX ic: <http://imi.ipa.go.jp/ns/core/rdf#> PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> select distinct ?s ?l where { ?s a ic:施設型 . ?s rdfs:label ?l . FILTER( contains( ?l, "大阪" ) ) }LIMIT 100 SPARQLの検索の基本例④ 述語ラベル(rdfs:label)の目的語に 「大阪」とを含む 主語(?s)を取得する ラベルの目的語を?lで表す 大阪市オープンデータポータルAPI勉強会 絞り込み条件に, 「含む文字列(contains)を利用 →FILTERを使うと様々な「絞り込み」が可能に! ※どのような絞り込み条件が使えるかは,SPARQLの資料を参照
  42. 42. 検索結果 大阪市オープンデータポータルAPI勉強会 select distinct ?s ?l としたので, 主語( ?s )に加えて, ラベル( ?l )も結果として 表示されていることに注意 ?s 調べたい述語 ?l . という組を検索条件に追加 すると,それらを検索結果 として取得することが可能!
  43. 43. 練習問題(1)  基本例④のSPARQLクエリを改造して, “大阪”をラベルに含む施設の「IRI」,「ラベル」,「種別」, 「種別コード」を出力するSPARQLクエリを書け 大阪市オープンデータポータルAPI勉強会 追加部分
  44. 44. 練習問題(1)解答例  基本例④のSPARQLクエリを改造して, “大阪”をラベルに含む施設の「IRI」,「ラベル」,「種別」, 「種別コード」を出力するSPARQLクエリを書け 大阪市オープンデータポータルAPI勉強会 PREFIX ic: <http://imi.ipa.go.jp/ns/core/rdf#> PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> select distinct ?s ?l ?kind ?code where { ?s a ic:施設型 . ?s rdfs:label ?l . ?s ic:種別 ?kind . ?s ic:種別コード ?code . FILTER( contains( ?l, "大阪" ) ) }LIMIT 100 こちらへの追加を忘れない
  45. 45. 検索結果 大阪市オープンデータポータルAPI勉強会
  46. 46. SPARQLの省略表現①  主語が同じ時の省略表現 select distinct ?s ?l ?kind ?code where { ?s a ic:施設型 . ?s rdfs:label ?l . ?s ic:種別 ?kind . ?s ic:種別コード ?code . }LIMIT 100 select distinct ?s ?l ?kind ?code where { ?s a ic:施設型 ; rdfs:label ?l ; ic:種別 ?kind ; ic:種別コード ?code . }LIMIT 100 大阪市オープンデータポータルAPI勉強会 2行目以降の主語は省略し, 「.」の代わりに「;」で改行する
  47. 47. SPARQLの省略表現②  取得する結果の変数の省略 select distinct ?s ?l ?kind ?code where { ?s a ic:施設型 . ?s rdfs:label ?l . ?s ic:種別 ?kind . ?s ic:種別コード ?code . }LIMIT 100 select distinct * where { ?s a ic:施設型 ; rdfs:label ?l ; ic:種別 ?kind ; ic:種別コード ?code . }LIMIT 100 大阪市オープンデータポータルAPI勉強会 「*」を使うと, 条件で使った「すべての変数」 を結果として返す
  48. 48. 基本例⑤:プロパティのつながり  これまでの例では,主語に直接つながっているトリプル しか取得できない. 基本例①の検索結果 大阪市オープンデータポータルAPI勉強会
  49. 49. 基本例⑤:プロパティのつながり  これまでの例では,主語に直接つながっているトリプル しか取得できない. この部分を取得するには, 「目的語を新たな主語と するトリプル」 を取得すれば良い 大阪市オープンデータポータルAPI勉強会
  50. 50. 基本例⑤:プロパティのつながり 「施設型の一覧」のIRI,「ラベル」,「種別」に加え, ic:地理座標の目的語を主語とする緯度・経度を取得する PREFIX ic: <http://imi.ipa.go.jp/ns/core/rdf#> PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> select distinct * where { ?s a ic:施設型 ; rdfs:label ?l ; ic:種別 ?kind ; ic:地理座標 ?geo . ?geo ic:緯度 ?lat ; ic:経度 ?long . }LIMIT 100 「目的語を新たな主語 とするトリプル」を追加 大阪市オープンデータポータルAPI勉強会
  51. 51. 検索結果 大阪市オープンデータポータルAPI勉強会
  52. 52. SPARQLの省略表現③ PREFIX ic: <http://imi.ipa.go.jp/ns/core/rdf#> PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> select distinct * where { ?s a ic:施設型 ; rdfs:label ?l ; ic:種別 ?kind ; ic:地理座標 ?geo . ?geo ic:緯度 ?lat ; ic:経度 ?long . }LIMIT 100 「/」で目的語に 「次の述語と目的語」 を続けて書くことも可能 select distinct * where { ?s a ic:施設型 ; rdfs:label ?l ; ic:種別 ?kind ; ic:地理座標 / ic:緯度 ?lat ; ic:地理座標 / ic:経度 ?long . }LIMIT 100 大阪市オープンデータポータルAPI勉強会
  53. 53. 基本例⑥:必須でないトリプル  検索条件に書いたトリプルは「必須条件」となる  すべてのデータが値を持つとは限らない 「必須でない」トリプルの取得にはOPTIONALを使う 大阪市オープンデータポータルAPI勉強会 PREFIX ic: <http://imi.ipa.go.jp/ns/core/rdf#> PREFIX rdfs: <http://www.w3.org/2000/01/rdf- schema#> select distinct * where { ?s a ic:施設型 ; rdfs:label ?l . FILTER( contains( ?l, "大阪市" ) ) OPTIONAL{ ?s ic:備考 ?note . } }LIMIT 100 ic:備考は,すべてのデータ にあるとは限らないので, OPTIONALをつかう
  54. 54. 検索結果 大阪市オープンデータポータルAPI勉強会
  55. 55. 便利機能①:OERER BY  ORDER BYを使うと結果をソートできる 大阪市オープンデータポータルAPI勉強会 PREFIX ic: <http://imi.ipa.go.jp/ns/core/rdf#> PREFIX rdfs: <http://www.w3.org/2000/01/rdf- schema#> select distinct * where { ?s a ic:施設型 ; rdfs:label ?l ; ic:備考 ?note . FILTER( contains(?l,"大阪")) }ORDER BY (?l) LIMIT 100 ?l でソート ※ORDER BY DESC(?l) とすると降順にソート
  56. 56. 大阪市オープンデータポータルAPI勉強会
  57. 57. 便利機能②:COUNT  COUNTを使うと結果の「数」を数えることができる 大阪市オープンデータポータルAPI勉強会 PREFIX ic: <http://imi.ipa.go.jp/ns/core/rdf#> PREFIX rdfs: <http://www.w3.org/2000/01/rdf- schema#> select distinct (count(?s) AS ?c) where { ?s a ic:施設型 ; rdfs:label ?l . FILTER( contains(?l,"大阪")) } 大阪をラベルに含む施設の数を取得する 結果
  58. 58. 便利機能③:CGROUP BY 大阪市オープンデータポータルAPI勉強会 PREFIX ic: <http://imi.ipa.go.jp/ns/core/rdf#> PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> select ?ku (count(distinct ?s) AS ?c) where { ?s a ic:施設型 ; rdfs:label ?l ; ic:住所 /ic:区 ?ku. }GROUP BY (?ku)  GROUP BYを用いると, 取得したトリプルをグループ化できる. 施設を「区」ごとにグループ化し, 数をカウントする
  59. 59. 便利機能④:OFFSET  OFFSETを使うと,クエリ結果をn番目から取得で きる PREFIX dbpedia-ja: <http://ja.dbpedia.org/resource/> select distinct ?p ?o where { dbpedia-ja:東京都 ?p ?o . } LIMIT 10 OFFSET 10 10番目の結果から取得 大阪市オープンデータポータルAPI勉強会
  60. 60. SPARQLに関する参考資料  SPARQL 1.1の仕様書(W3C)  http://www.w3.org/TR/sparql11-overview/  LODハッカソン関西  http://wp.lodosaka.jp/tool/sparqlquery/  SPARQL入門 / SPARQL primer by fumi  https://speakerdeck.com/fumi/sparql-primer  SPARQLによる可視化 / sparql visualization by fumi  https://speakerdeck.com/fumi/sparql-visualization  SPARQLでマッシュアップ-LOD活用のための技術紹介 (by Hiroshi Ueda)  http://www.slideshare.net/uedayou/sparqllod 大阪市オープンデータポータルAPI勉強会
  61. 61. 演習:自由にクエリを書く  大阪市のオープンデータポータルを使って 自由にSPARQLクエリを書いてみる  書いた結果は,GoogleDocで共有する  試してみたいクエリ例  施設情報を「特定の条件」で取得し,できるだけ詳細な 情報と共に一覧する  条件:種類,場所,....など  施設情報の「区」毎に比較  イベント情報を使ってみる 大阪市オープンデータポータルAPI勉強会

×