Top Banner
大阪市オープンデータポータル API(SPARQL)勉強会 主催:ODI OsakaLODチャレンジ実行委員会関西支部, NPO法人 Linked Open Data Initiative 共催:大阪イノベーションハブ 協力:Code for Osaka 大阪市オープンデータポータルサイト https://data.city.osaka.lg.jp/ 2017年3月1日(水) @大阪イノベーションハブ
61

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

Mar 19, 2017

Download

Technology

Kouji Kozaki
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: 大阪市オープンデータポータルAPI(SPARQL)勉強会

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

主催:ODI Osaka,LODチャレンジ実行委員会関西支部,NPO法人 Linked Open Data Initiative

共催:大阪イノベーションハブ 協力:Code for Osaka

大阪市オープンデータポータルサイト

https://data.city.osaka.lg.jp/

2017年3月1日(水)@大阪イノベーションハブ

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

自己紹介

オープンデータに関わる活動 人工知能学会・セマンティックウェブとオントロジー研究会 主査 LODチャレンジ実行委員会(2011~)関西支部長(副実行委員長)

「LOD(Linked Open Data)ハッカソン関西」などの運営 アーバンデータチャレンジ2016・大阪ブロック コーディネーター

特に,地元「関西・大阪」でのコミュニティを大きくしたい 委員:神戸市オープンデータ推進会議,大阪市市民活動推進審議会

研究成果として公開中のソフト

古崎(こざき)晃司@koujikozaki 本職: 大阪大学の研究者

専門: オントロジー工学(人工知能・知識工学)=“かしこい”コンピュータ(ソフトウェア)を作る→学問にとどまらず,世の中で使われる技術を作りたい

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

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

本日の予定

19:00〜趣旨説明

19:10〜大阪市オープンデータポータルAPIを例としたSPARQL入門

20:00〜ハンズオン:SPARQLクエリ(&可視化)

20:45~成果共有

21:00 終了

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

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

開催趣旨

• 2017年3月5日(世界統一日は3月4日)に行われる第8回LODハッカソン関西 in インターナショナル・オープンデータ・デイ大阪2017のプレイベント

• 当日の利用が想定される「大阪市オープンデータポータルのAPI(SPARQLエンドポイント)」の使い方を学ぶ

→SPARQLはLinked Data/LOD(Linked Open Data)の標準仕様

= 他のLOD(SPARQLエンドポイント)でも利用できる技術を学ぶ

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

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

第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勉強会

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

⽇時:2017年3⽉11⽇(⼟)13:00 - 18:00会場:東京⼤学本郷キャンパス⼯学部2号館主催:LODチャレンジ2016実⾏委員会Webサイト:http://lodc2016.peatix.com/⼤阪市オープンデータポータルAPI勉強会

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

大阪市オープンデータポータル

APIを例としたSPARQL入門

LODチャレンジ実行委員会/大阪大学

古崎 晃司

[email protected]

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

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

はじめに,質問

「LOD(Linked Open Data)」という言葉を聞いたことがある方?

LODの公開(RDFデータの公開)をしたことがある方?

SPARQLを書いたことがある方?

LODを使ったアプリを作ったことがある方?

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

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

Linked Open Data (LOD)-Webの仕組みを用いた

オープンデータの公開-

=Linked Data + Open Data(オープンデータ)

=Linked Dataとして公開されたOpen Data※Linked Data:Webの仕組みを用いて相互に“リンクされた”データ

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

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

5 ★ オープンデータ

http://5stardata.info/ より

オープンライセンス(形式問わず)

機械可読なフォーマット

オープンなフォーマット

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

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

5★オープンデータにおけるLOD

★★★★ (RDF)物事を示すのにURL(IRI)を使いましょう,そうすることで他の人々があなたのデータにリンクすることができます

★★★★★ (LOD)あなたのデータのコンテキストを提供するために他のデータへリンクしましょう

→LOD(Linked Open Data)=Web上で相互にリンクされたOpen Data

※リンクする際には「Webの仕組み」を利用する データ(物事)を示すのにURL(正確にはIRI)を用いる

データ間を(名前付き)Hyper-linkでリンクする

http://5stardata.info/ja/ より引用

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

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

既に公開・リンクされているLOD~LODクラウド~

2007/5/12007/10/82008/9/182009/7/14

2010/9/222011/9/19時点

Linking Open Data cloud diagram 2014, by Max Schmachtenberg, Christian Bizer, Anja Jentzschand Richard Cyganiak. http://lod-cloud.net/

1つの丸が個別に公開されたDBを表す.

2014/08/30時点

公開したオープンデータが他のオープンデータと「つながる」ことで「新たな価値」が生まれる

DBpedia

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

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

LODクラウドの最新版

Linking Open Data cloud diagram 2017, by Andrejs Abele, John P. McCrae, Paul Buitelaar, AnjaJentzsch and Richard Cyganiak. http://lod-cloud.net/

2017-02-20時点

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

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

Linked Data (RDF)の例

大阪府

大阪市

都道府県 223㎢

2,687,287人面積

人口

吹田市

豊中市

…バラ科

市の木

隣接自治体

隣接自治体

http://ja.dbpedia.org/resource/大阪市 というURIから得られる情報

サクラ

Cherry blossom英名

リソース:URIで表されるモノ・コト

プロパティ:

リソース間の関係を表す

リテラル:文字列

主語 述語 目的語

トリプル※RDF(Linked Dataのデータモデル)は,「トリプルの組み合わせ」で表される

(DBpedia Japaneseより)

目的語が他のリソースのとき,トリプルを辿って更なる情報が得られる

※実際のリソースとプロパティは,すべてURIで表される.大阪市オープンデータポータルAPI勉強会

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

Linked Data (RDF)の例

http://ja.dbpedia.org/resource/大阪府

http://ja.dbpedia.org/resource/大阪市

http://ja.dbpedia.org/resource/都道府県 223㎢

2,687,287人http://ja.dbpedia.org/resource/面積

http://ja.dbpedia.org/resource/人口

http://ja.dbpedia.org/resource/吹田市

http://ja.dbpedia.org/resource/豊中市

… http://ja.dbpedia.org/resource/バラ科

http://ja.dbpedia.org/resource/市の木

http://ja.dbpedia.org/resource/隣接自治体

http://ja.dbpedia.org/resource/隣接自治体

http://ja.dbpedia.org/resource/大阪市 というURIから得られる情報

http://ja.dbpedia.org/resource/サクラ

http://ja.dbpedia.org/resource/科

Cherry blossomhttp://ja.dbpedia.org/resource/英名

(DBpedia Japaneseより)

※実際のリソースとプロパティは,すべてURIで表される.大阪市オープンデータポータルAPI勉強会

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

RDFのシリアル化形式

RDFのシリアル化(serialize) RDFは,リソースを主語,目的語,述語の形式で記述するデータモデルであって,データ形式ではない.

RDFの形式に沿ってトリプルを特定の文法に従ってファイルに書き出す(シリアル化する)必要がある.

代表的なシリアル化形式 RDF/XML:計算機向け

RDFa:HTMLにRDFを埋め込む

Turtle:プレーンテキストで人間向けに読みやすい

N-Triples:1行単位で処理できるので処理しやすい

RDF/JSON:Web開発向け

JSON-LD:Linked Data用のJSON(Web開発向け)

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

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

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勉強会

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

大阪市オープンデータポータルサイトのAPI (SPARQLエンドポイント)の概要

目標:どのようなAPIが提供されているかの概要を理解し,まずは,触ってみる

1. APIの概要

2. サンプルベースの簡単な使い方

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

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

大阪市オープンデータポータルサイト

2016年3月17日オープン

https://data.city.osaka.lg.jp/

一部のオープンデータをLODとして提供SPARQLクエリによるアクセスが可能

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

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

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勉強会

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

簡単な使い方:①クエリ例を選ぶ

https://data.city.osaka.lg.jp/api/から「クエリ例」をコピーする

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

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

簡単な使い方:②クエリを入力

SPARQLエンドポイント(https://data.city.osaka.lg.jp/sparql)の「Query Tex」欄に,先に選択したクエリ例を張り付ける.

「Run Query」で検索実行

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

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

簡単な使い方:③検索結果

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

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

簡単な使い方:④例の書き換え

クエリ例を少し書き換えていろいろ試してみる

例)施設(ヘリポート)情報を取得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勉強会

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

大阪市のオープンデータを例としたSPARQLクエリの基本

目標:基本的なSPARQLクエリの書き方を理解し,自分でクエリを書いてみる.

1. SPARQLクエリの基本的考え方

2. 事前に調べておくべき情報

3. 大阪市のオープンデータ(施設情報)を例としたSPARQLハンズオン

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

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

SPARQLによるRDFの検索

SPARQL RDFデータに対するクエリ言語

「指定したグラフ構造」に一致するトリプルを検索する

最も基本的な検索

select ?s ?p ?owhere {

?s ?p ?o . }LIMIT 100 ←取得する数の制限

←検索するグラフのパターン

←返す要素

この例では「任意のトリプルの組み合わせ」

このパターンを変えることで,欲しいデータを取得する

「.」(ピリオド)を忘れない

* とすると全ての変数を返す

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

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

大阪市の施設情報のデータ例 避難所のデータ例

: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勉強会

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

IRIによるRDFデータの表現

先ほどのデータをIRIを用いて厳密に表現すると...

すべてのデータ(リソース)・関係(プロパティ)に「IRIが与えられている」

→見やすくするために接頭語(プレフィックス)が用いられる

例) http://imi.ipa.go.jp/ns/core/rdf#施設型→ ic:施設型

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

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

SPARQLクエリを書く前に調べておくべき情報

SPARQLエンドポイントの情報 APIにアクセスする為のURL その他の仕様(アクセス制限など)

どのようなデータがあるのか? データの種類(クラス:Class) 利用されている関係の種類(プロパティ;Property)

データの具体例

RDFモデル(図)

使われているIRIについて ベースIRI: 使われている語彙の接頭語(prefix)

これらは,「SPARQLクエリ」を用いて調べることも可

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

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

大阪市【施設情報】の場合

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勉強会

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

大阪市【施設情報】のプロパティ属性 定義 値

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勉強会

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

大阪市【施設情報】のデータ例

: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勉強会

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

参考:プロパティの組み合わせp p2http://imi.ipa.go.jp/ns/core/rdf#地理座標 http://www.w3.org/1999/02/22-rdf-syntax-ns#typehttp://imi.ipa.go.jp/ns/core/rdf#住所 http://www.w3.org/1999/02/22-rdf-syntax-ns#typehttp://imi.ipa.go.jp/ns/core/rdf#名称 http://www.w3.org/1999/02/22-rdf-syntax-ns#typehttp://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#typehttp://www.w3.org/2000/01/rdf-schema#labelhttp://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#typehttp://imi.ipa.go.jp/ns/core/rdf#利用可能時間 http://www.w3.org/1999/02/22-rdf-syntax-ns#typehttp://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#ichttp://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勉強会

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

大阪市のオープンデータを例としたSPARQLクエリの基本

目標:基本的なSPARQLクエリの書き方を理解し,自分でクエリを書いてみる.

1. SPARQLクエリの基本的考え方

2. 事前に調べておくべき情報

3. 大阪市のオープンデータ(施設情報)を例としたSPARQLハンズオン

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

クエリメモ(サンプルのコピー&ペースト用)https://goo.gl/nbnzDy (“l”は小文字のL)

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

SPARQL Endpointの例

https://data.city.osaka.lg.jp/sparql

ここに,クエリを入れる※プログラムからのクエリ+結果取得も可能

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

このボタンで検索実行

出力形式の変更も可能

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

SPARQLの検索の基本例①

「大阪市役所を主語(Subject)に含む」トリプルの述語(?p)と目的語(?o)を取得する

select distinct ?p ?owhere {

<http://data.city.osaka.lg.jp/linkeddata/resource/116> ?p ?o .}LIMIT 100 大阪市役所のIRI

同じパターンは除外する↓

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

↑検索結果の数の上限

欲しい情報を表す変数(?+任意の文字列で表す)

↑ピリオド(“.”)をつける

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

検索結果

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

そもそも,大阪市役所のIRIはどうやって知るの?

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

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を利用した省略表現

どちらのクエリも同じ内容

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

検索結果

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

この一覧から,大阪市役所のIRIを探す方法は?

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

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条件」での絞り込み検索となる

検索結果正式名称が分からないときは?

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

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の資料を参照

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

検索結果

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

select distinct ?s ?lとしたので,主語( ?s )に加えて,ラベル( ?l )も結果として表示されていることに注意

?s 調べたい述語 ?l .という組を検索条件に追加すると,それらを検索結果として取得することが可能!

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

練習問題(1)

基本例④のSPARQLクエリを改造して,“大阪”をラベルに含む施設の「IRI」,「ラベル」,「種別」,「種別コード」を出力するSPARQLクエリを書け

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

追加部分

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

練習問題(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

こちらへの追加を忘れない

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

検索結果

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

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

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行目以降の主語は省略し,「.」の代わりに「;」で改行する

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

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勉強会

「*」を使うと,条件で使った「すべての変数」を結果として返す

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

基本例⑤:プロパティのつながり

これまでの例では,主語に直接つながっているトリプルしか取得できない.

基本例①の検索結果

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

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

基本例⑤:プロパティのつながり

これまでの例では,主語に直接つながっているトリプルしか取得できない.

この部分を取得するには,「目的語を新たな主語とするトリプル」を取得すれば良い

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

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

基本例⑤:プロパティのつながり

「施設型の一覧」の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勉強会

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

検索結果

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

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

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勉強会

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

基本例⑥:必須でないトリプル

検索条件に書いたトリプルは「必須条件」となる

すべてのデータが値を持つとは限らない「必須でない」トリプルの取得には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をつかう

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

検索結果

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

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

便利機能①: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)とすると降順にソート

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

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

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

便利機能②: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,"大阪"))}

大阪をラベルに含む施設の数を取得する

結果

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

便利機能③: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を用いると,取得したトリプルをグループ化できる.

施設を「区」ごとにグループ化し,数をカウントする

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

便利機能④:OFFSET

OFFSETを使うと,クエリ結果をn番目から取得できる

PREFIX dbpedia-ja: <http://ja.dbpedia.org/resource/>select distinct ?p ?owhere {

dbpedia-ja:東京都 ?p ?o . }LIMIT 10OFFSET 10

10番目の結果から取得

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

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

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勉強会

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

演習:自由にクエリを書く

大阪市のオープンデータポータルを使って自由にSPARQLクエリを書いてみる

書いた結果は,GoogleDocで共有する

試してみたいクエリ例

施設情報を「特定の条件」で取得し,できるだけ詳細な情報と共に一覧する 条件:種類,場所,....など

施設情報の「区」毎に比較

イベント情報を使ってみる

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