大阪市オープンデータポータル
API(SPARQL)勉強会
主催:ODI Osaka,LODチャレンジ実行委員会関西支部,
NPO法人 Linked Open Data Initiative
共催:大阪イノベーションハブ 協力:Code for Osaka
大阪市オープンデータポータルサイト
https://data.city.osaka.lg.jp/
2017年3月1日(水)
@大阪イノベーションハブ
自己紹介
 オープンデータに関わる活動
 人工知能学会・セマンティックウェブとオントロジー研究会 主査
 LODチャレンジ実行委員会(2011~)関西支部長(副実行委員長)
 「LOD(Linked Open Data)ハッカソン関西」などの運営
 アーバンデータチャレンジ2016・大阪ブロック コーディネーター
 特に,地元「関西・大阪」でのコミュニティを大きくしたい
 委員:神戸市オープンデータ推進会議,大阪市市民活動推進審議会
研究成果として
公開中のソフト
 古崎(こざき)晃司
@koujikozaki
 本職: 大阪大学の研究者
 専門: オントロジー工学(人工知能・知識工学)
=“かしこい”コンピュータ(ソフトウェア)を作る
→学問にとどまらず,
世の中で使われる技術を作りたい
大阪市オープンデータポータルAPI勉強会
本日の予定
19:00〜 趣旨説明
19:10〜 大阪市オープンデータポータル
APIを例としたSPARQL入門
20:00〜 ハンズオン
:SPARQLクエリ(&可視化)
20:45~ 成果共有
21:00 終了
大阪市オープンデータポータルAPI勉強会
開催趣旨
• 2017年3月5日(世界統一日は3月4日)に行われる
第8回LODハッカソン関西 in 
インターナショナル・オープンデータ・デイ大阪2017
のプレイベント
• 当日の利用が想定される「大阪市オープンデータ
ポータルのAPI(SPARQLエンドポイント)」の使い方を
学ぶ
→SPARQLはLinked Data/LOD(Linked Open Data)の
標準仕様
= 他のLOD(SPARQLエンドポイント)でも利用できる
技術を学ぶ
大阪市オープンデータポータルAPI勉強会
第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勉強会
⽇時:2017年3⽉11⽇(⼟)13:00 - 18:00
会場:東京⼤学本郷キャンパス⼯学部2号館
主催:LODチャレンジ2016実⾏委員会
Webサイト:http://lodc2016.peatix.com/⼤阪市オープンデータポータルAPI勉強会
大阪市オープンデータポータル
APIを例としたSPARQL入門
LODチャレンジ実行委員会/大阪大学
古崎 晃司
kozaki@ei.sanken.osaka-u.ac.jp
大阪市オープンデータポータル
API(SPARQL)勉強会
2017/3/1@大阪イノベーションハブ
はじめに,質問
 「LOD(Linked Open Data)」と
いう言葉を聞いたことがある方?
 LODの公開(RDFデータの公開)
をしたことがある方?
 SPARQLを書いたことがある方?
 LODを使ったアプリを作ったこと
がある方?
大阪市オープンデータポータルAPI勉強会
Linked Open Data (LOD)
-Webの仕組みを用いた
オープンデータの公開-
=Linked Data + Open Data(オープンデータ)
=Linked Dataとして公開されたOpen Data
※Linked Data:
Webの仕組みを用いて相互に“リンクされた”データ
大阪市オープンデータポータルAPI勉強会
5 ★ オープンデータ
http://5stardata.info/ より
オープン
ライセンス
(形式問わず)
機械可読な
フォーマット
オープンな
フォーマット
大阪市オープンデータポータルAPI勉強会
5★オープンデータにおけるLOD
 ★★★★ (RDF)
物事を示すのにURL(IRI)を使いましょう,そうすることで
他の人々があなたのデータにリンクすることができます
 ★★★★★ (LOD)
あなたのデータのコンテキストを提供するために
他のデータへリンクしましょう
→LOD(Linked Open Data)
=Web上で相互にリンクされたOpen Data
※リンクする際には「Webの仕組み」を利用する
 データ(物事)を示すのにURL(正確にはIRI)を用いる
 データ間を(名前付き)Hyper-linkでリンクする
http://5stardata.info/ja/ より引用
大阪市オープンデータポータルAPI勉強会
既に公開・リンクされている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勉強会
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勉強会
Linked Data (RDF)の例
大阪府
大阪市
都道府県
223㎢
2,687,287人
面積
人口
吹田市
豊中市
…
バラ科
市の木
隣接自治体
隣接自治体
…
http://ja.dbpedia.org/resource/大阪市 というURIから得られる情報
サクラ
科
Cherry blossom英名
リソース:
URIで表される
モノ・コト
プロパティ:
リソース間の関
係を表す
リテラル
:文字列
主語 述語 目的語
トリプル
※RDF(Linked Dataのデータ
モデル)は,「トリプルの組み
合わせ」で表される
(DBpedia Japaneseより)
目的語が他のリソースのとき,トリプル
を辿って更なる情報が得られる
※実際のリソースとプロパティは,すべてURIで表される.
大阪市オープンデータポータルAPI勉強会
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勉強会
RDFのシリアル化形式
 RDFのシリアル化(serialize)
 RDFは,リソースを主語,目的語,述語の形式で記述
するデータモデルであって,データ形式ではない.
 RDFの形式に沿ってトリプルを特定の文法に従って
ファイルに書き出す(シリアル化する)必要がある.
 代表的なシリアル化形式
 RDF/XML:計算機向け
 RDFa:HTMLにRDFを埋め込む
 Turtle:プレーンテキストで人間向けに読みやすい
 N-Triples:1行単位で処理できるので処理しやすい
 RDF/JSON:Web開発向け
 JSON-LD:Linked Data用のJSON(Web開発向け)
大阪市オープンデータポータルAPI勉強会
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勉強会
大阪市オープンデータポータル
サイトのAPI (SPARQLエンドポイント)
の概要
目標:どのようなAPIが提供されているかの
概要を理解し,まずは,触ってみる
1. APIの概要
2. サンプルベースの簡単な使い方
大阪市オープンデータポータルAPI勉強会
大阪市
オープンデータポータルサイト
2016年3月17日
オープン
https://data.city.osaka.lg.jp/
一部のオープンデータを
LODとして提供
SPARQLクエリによる
アクセスが可能
大阪市オープンデータポータルAPI勉強会
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勉強会
簡単な使い方:①クエリ例を選ぶ
 https://data.city.osaka.lg.jp/api/
から「クエリ例」をコピーする
大阪市オープンデータポータルAPI勉強会
簡単な使い方:②クエリを入力
 SPARQLエンドポイント
(https://data.city.osaka.lg.
jp/sparql)の「Query Tex」
欄に,先に選択したクエリ例
を張り付ける.
 「Run Query」で検索実行
大阪市オープンデータポータルAPI勉強会
簡単な使い方:③検索結果
大阪市オープンデータポータルAPI勉強会
簡単な使い方:④例の書き換え
 クエリ例を少し書き換えていろいろ試してみる
例)施設(ヘリポート)情報を取得
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勉強会
大阪市のオープンデータを
例としたSPARQLクエリの基本
目標:基本的なSPARQLクエリの書き方を理
解し,自分でクエリを書いてみる.
1. SPARQLクエリの基本的考え方
2. 事前に調べておくべき情報
3. 大阪市のオープンデータ(施設情報)を例とし
たSPARQLハンズオン
大阪市オープンデータポータルAPI勉強会
SPARQLによるRDFの検索
 SPARQL
 RDFデータに対するクエリ言語
 「指定したグラフ構造」に一致するトリプルを検索する
 最も基本的な検索
select ?s ?p ?o
where {
?s ?p ?o .
}
LIMIT 100 ←取得する数の制限
←検索するグラフのパターン
←返す要素
この例では「任意のトリプルの組み合わせ」
このパターンを変
えることで,欲しい
データを取得する
「.」(ピリオド)を忘れない
* とすると全ての変数を返す
大阪市オープンデータポータルAPI勉強会
大阪市の施設情報のデータ例
 避難所のデータ例
: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勉強会
IRIによるRDFデータの表現
 先ほどのデータをIRIを用いて厳密に表現すると...
 すべてのデータ(リソース)・関係(プロパティ)に
「IRIが与えられている」
→見やすくするために接頭語(プレフィックス)が用いられる
 例) http://imi.ipa.go.jp/ns/core/rdf#施設型
→ ic:施設型
大阪市オープンデータポータルAPI勉強会
SPARQLクエリを書く前に調べて
おくべき情報
 SPARQLエンドポイントの情報
 APIにアクセスする為のURL
 その他の仕様(アクセス制限など)
 どのようなデータがあるのか?
 データの種類(クラス:Class)
 利用されている関係の種類
(プロパティ;Property)
 データの具体例
 RDFモデル(図)
 使われているIRIについて
 ベースIRI:
 使われている語彙の接頭語(prefix)
これらは,
「SPARQLクエリ」
を用いて調べるこ
とも可
大阪市オープンデータポータルAPI勉強会
大阪市【施設情報】の場合
 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勉強会
大阪市【施設情報】のプロパティ
属性 定義 値
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勉強会
大阪市【施設情報】のデータ例
: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勉強会
参考:プロパティの組み合わせ
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勉強会
大阪市のオープンデータを
例としたSPARQLクエリの基本
目標:基本的なSPARQLクエリの書き方を理
解し,自分でクエリを書いてみる.
1. SPARQLクエリの基本的考え方
2. 事前に調べておくべき情報
3. 大阪市のオープンデータ(施設情報)を例とし
たSPARQLハンズオン
大阪市オープンデータポータルAPI勉強会
クエリメモ(サンプルのコピー&ペースト用)
https://goo.gl/nbnzDy (“l”は小文字のL)
SPARQL Endpointの例
https://data.city.osaka.lg.jp/sparql
ここに,クエリを入れる
※プログラムからのクエリ
+結果取得も可能
大阪市オープンデータポータルAPI勉強会
このボタンで検索実行
出力形式の変更も可能
SPARQLの検索の基本例①
「大阪市役所を主語(Subject)に含む」トリプルの述語(?p)と目的
語(?o)を取得する
select distinct ?p ?o
where {
<http://data.city.osaka.lg.jp/linkeddata/resource/116> ?p ?o .
}
LIMIT 100 大阪市役所のIRI
同じパターンは除外する
↓
大阪市オープンデータポータルAPI勉強会
↑検索結果の数の上限
欲しい情報を表す変数
(?+任意の文字列で表す)
↑
ピリオド(“.”)
をつける
検索結果
大阪市オープンデータポータルAPI勉強会
そもそも,
大阪市役所のIRIはどうやって知るの?
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を利用した省略表現
どちらのクエリも
同じ内容
検索結果
大阪市オープンデータポータルAPI勉強会
この一覧から,
大阪市役所のIRI
を探す方法は?
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条件」での絞り込み検索となる
検索結果
正式名称が
分からないときは?
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の資料を参照
検索結果
大阪市オープンデータポータルAPI勉強会
select distinct ?s ?l
としたので,
主語( ?s )に加えて,
ラベル( ?l )も結果として
表示されていることに注意
?s 調べたい述語 ?l .
という組を検索条件に追加
すると,それらを検索結果
として取得することが可能!
練習問題(1)
 基本例④のSPARQLクエリを改造して,
“大阪”をラベルに含む施設の「IRI」,「ラベル」,「種別」,
「種別コード」を出力するSPARQLクエリを書け
大阪市オープンデータポータルAPI勉強会
追加部分
練習問題(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
こちらへの追加を忘れない
検索結果
大阪市オープンデータポータルAPI勉強会
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行目以降の主語は省略し,
「.」の代わりに「;」で改行する
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勉強会
「*」を使うと,
条件で使った「すべての変数」
を結果として返す
基本例⑤:プロパティのつながり
 これまでの例では,主語に直接つながっているトリプル
しか取得できない.
基本例①の検索結果
大阪市オープンデータポータルAPI勉強会
基本例⑤:プロパティのつながり
 これまでの例では,主語に直接つながっているトリプル
しか取得できない.
この部分を取得するには,
「目的語を新たな主語と
するトリプル」
を取得すれば良い
大阪市オープンデータポータルAPI勉強会
基本例⑤:プロパティのつながり
「施設型の一覧」の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勉強会
検索結果
大阪市オープンデータポータルAPI勉強会
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勉強会
基本例⑥:必須でないトリプル
 検索条件に書いたトリプルは「必須条件」となる
 すべてのデータが値を持つとは限らない
「必須でない」トリプルの取得には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をつかう
検索結果
大阪市オープンデータポータルAPI勉強会
便利機能①: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)
とすると降順にソート
大阪市オープンデータポータルAPI勉強会
便利機能②: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,"大阪"))
}
大阪をラベルに含む施設の数を取得する
結果
便利機能③: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を用いると,
取得したトリプルをグループ化できる.
施設を「区」ごとにグループ化し,
数をカウントする
便利機能④: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勉強会
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勉強会
演習:自由にクエリを書く
 大阪市のオープンデータポータルを使って
自由にSPARQLクエリを書いてみる
 書いた結果は,GoogleDocで共有する
 試してみたいクエリ例
 施設情報を「特定の条件」で取得し,できるだけ詳細な
情報と共に一覧する
 条件:種類,場所,....など
 施設情報の「区」毎に比較
 イベント情報を使ってみる
大阪市オープンデータポータルAPI勉強会

More Related Content

PDF
SPARQLを利用した逆マッシュアップ-プログラミングを必要としないアプリ作成方法-
PPTX
オープンデータをLOD化するデータソン in 高槻
PPTX
SPARQLによるLODの検索@第4回LODとオントロジー勉強会-
PDF
オープンデータと Linked Open Data(LOD)@神戸R
PDF
SPARQLでオープンデータ活用!
PDF
Linked Open Data(LOD)を用いた オープンデータの活用事例と今後の展望
PDF
汎用Web API“SPARQL”でオープンデータ検索
PDF
Linked Open Data(LOD)の基本理念から考える, ハッカソンのヒント
SPARQLを利用した逆マッシュアップ-プログラミングを必要としないアプリ作成方法-
オープンデータをLOD化するデータソン in 高槻
SPARQLによるLODの検索@第4回LODとオントロジー勉強会-
オープンデータと Linked Open Data(LOD)@神戸R
SPARQLでオープンデータ活用!
Linked Open Data(LOD)を用いた オープンデータの活用事例と今後の展望
汎用Web API“SPARQL”でオープンデータ検索
Linked Open Data(LOD)の基本理念から考える, ハッカソンのヒント

What's hot (20)

PDF
Linked Open Data (LOD)の基礎講座
PDF
関西地域でのオープンデータ活動の 広がりと今後の展望 -LOD(Linked Open Data)普及活動を通して-
PDF
オープンデータ/Linked Open Data お手軽可視化ツールの紹介~SPARQLでマッシュアップ~
PPTX
CSVファイルをLODとして公開するデータソン
PDF
SPARQLとMashup環境 (年岡先生)
PDF
お手軽Linked Open Data可視化ツールSPARQL Timeliner
PPTX
オープンデータについて(Code for Osaka第3回定例会)
PDF
Wikidataを編集してみよう!
PDF
LODを始めるにあたって「最初に試すとよい」ツールの紹介
PDF
LODを使ってみよう!
PDF
SPARQLから入門するLinked Open Data(LOD)ハンズオン 第1回
PPTX
PDF
Linked Open Data(LOD)の基本理念と基盤となる技術
PDF
SPARQLでマッシュアップ -LOD活用のための技術紹介-
PDF
SPARQL Timelinerの使い方
PDF
Linked Open Data勉強会2020 前編:LODの基礎・作成・公開
PDF
オープンデータ公開プラットフォームとしてのWordPressへの期待
PDF
SPARQLアプリケーション開発
PDF
LOD連続講義 第5回「LODの作り方・使い方」
PDF
LOD技術の概要と LinkData.orgを用いたLOD公開
Linked Open Data (LOD)の基礎講座
関西地域でのオープンデータ活動の 広がりと今後の展望 -LOD(Linked Open Data)普及活動を通して-
オープンデータ/Linked Open Data お手軽可視化ツールの紹介~SPARQLでマッシュアップ~
CSVファイルをLODとして公開するデータソン
SPARQLとMashup環境 (年岡先生)
お手軽Linked Open Data可視化ツールSPARQL Timeliner
オープンデータについて(Code for Osaka第3回定例会)
Wikidataを編集してみよう!
LODを始めるにあたって「最初に試すとよい」ツールの紹介
LODを使ってみよう!
SPARQLから入門するLinked Open Data(LOD)ハンズオン 第1回
Linked Open Data(LOD)の基本理念と基盤となる技術
SPARQLでマッシュアップ -LOD活用のための技術紹介-
SPARQL Timelinerの使い方
Linked Open Data勉強会2020 前編:LODの基礎・作成・公開
オープンデータ公開プラットフォームとしてのWordPressへの期待
SPARQLアプリケーション開発
LOD連続講義 第5回「LODの作り方・使い方」
LOD技術の概要と LinkData.orgを用いたLOD公開
Ad

Viewers also liked (17)

PDF
Wikidata Edit-a-thon -Wikidataを編集してみよう!-
PDF
UDC2015ファイナル・ステージ「大阪ブロックの活動紹介」
PDF
PUSH大阪&PUSH広報~自治体広報情報を用いた 地域課題分析基盤に向けて~
PPTX
LODで広がる オープンデータ活用の可能性
PPTX
LODとは何?(基礎編)
PDF
LODとメディア ニューヨークタイムズ最新事情
PPTX
オープンデータとは(北海道内自治体向け)
PPTX
セマンティックWebとオントロジー:現状と将来展望
PDF
オントロジー工学に基づく 知識の体系化と利用
PDF
オープンデータなんかでよく使うTurtle形式なんだけどXMLと違ってどう便利なの?
PDF
QR BASED CARD-LESS ATM TRANSACTIONS
PDF
Menu final
PPTX
Prezentacja miejscowość
PDF
OFFLINE CONTEXT AWARE COMPUTING FOR PROVIDING USER SPECIFIC RESULTS
PDF
What makes good strategy? By Alex Wood, strategy director, DT
PDF
LOD (Linked Open Data) の動向と今後の展望
PPT
Animales del desierto 2
Wikidata Edit-a-thon -Wikidataを編集してみよう!-
UDC2015ファイナル・ステージ「大阪ブロックの活動紹介」
PUSH大阪&PUSH広報~自治体広報情報を用いた 地域課題分析基盤に向けて~
LODで広がる オープンデータ活用の可能性
LODとは何?(基礎編)
LODとメディア ニューヨークタイムズ最新事情
オープンデータとは(北海道内自治体向け)
セマンティックWebとオントロジー:現状と将来展望
オントロジー工学に基づく 知識の体系化と利用
オープンデータなんかでよく使うTurtle形式なんだけどXMLと違ってどう便利なの?
QR BASED CARD-LESS ATM TRANSACTIONS
Menu final
Prezentacja miejscowość
OFFLINE CONTEXT AWARE COMPUTING FOR PROVIDING USER SPECIFIC RESULTS
What makes good strategy? By Alex Wood, strategy director, DT
LOD (Linked Open Data) の動向と今後の展望
Animales del desierto 2
Ad

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

PDF
Linked Open Data(LOD)の基本的な使い方
PDF
オープンデータのメリットと“大阪”での活用事例
PDF
Linked Open Data勉強会2020 後編:SPARQLの簡単な使い方、SPARQLを使った簡単なアプリ開発
PDF
SparqlEPCUが提供するlod開発プラットフォーム
PDF
SPARQLから入門するLinked Open Data(LOD)ハンズオン 第2回
PPTX
統計データのLOD化とデータ間の関係の表現
PDF
公共データをオープンデータ公開することによる効果
PPTX
Linked Dataの基本原則 -LODを公開するときに知っておきたい基本技術-
PDF
ナレッジグラフ/LOD利用技術の入門(前編)
PDF
オープンデータと Linked Open Data(LOD)
PDF
Use open data with sparql
PDF
SPARQLとMashup環境
PDF
Rから利用するオープンデータAPI
PPTX
Silkについて
PDF
LODを使ったサイトとプラグインを作ってみた話[WordBenchOsaka]
PPTX
LODの紹介@第1回 Firefox OS x HTML5 x LOD WEBイノベーションハッカソン
PDF
Osaka (&Kansai)おもろい事例??連発
PPT
実社会で進められているサービスとLOD
PDF
#経済学のための実践的データ分析 9. オープンデータを使ってみよう
PDF
オープンデータの広がりと今後の課題ー関西での活動を中心にー
Linked Open Data(LOD)の基本的な使い方
オープンデータのメリットと“大阪”での活用事例
Linked Open Data勉強会2020 後編:SPARQLの簡単な使い方、SPARQLを使った簡単なアプリ開発
SparqlEPCUが提供するlod開発プラットフォーム
SPARQLから入門するLinked Open Data(LOD)ハンズオン 第2回
統計データのLOD化とデータ間の関係の表現
公共データをオープンデータ公開することによる効果
Linked Dataの基本原則 -LODを公開するときに知っておきたい基本技術-
ナレッジグラフ/LOD利用技術の入門(前編)
オープンデータと Linked Open Data(LOD)
Use open data with sparql
SPARQLとMashup環境
Rから利用するオープンデータAPI
Silkについて
LODを使ったサイトとプラグインを作ってみた話[WordBenchOsaka]
LODの紹介@第1回 Firefox OS x HTML5 x LOD WEBイノベーションハッカソン
Osaka (&Kansai)おもろい事例??連発
実社会で進められているサービスとLOD
#経済学のための実践的データ分析 9. オープンデータを使ってみよう
オープンデータの広がりと今後の課題ー関西での活動を中心にー

More from Kouji Kozaki (12)

PDF
オントロジー工学に基づくセマンティック技術(1)オントロジー工学入門
PDF
オントロジー工学に基づくセマンティック技術(2)ナレッジグラフ入門
PDF
オープンデータを「世界」に発信するウィキデータ・ソン【IODD2019大阪】
PDF
オントロジーとは?
PDF
オープンデータとLOD~オープンデータって何?~
PDF
オントロジー研究20年の歩みと今後の展望
PDF
WikidataとOSM
PDF
Linked Open Data(LOD)を使うと“うれしい”3つの理由
PDF
書誌データのLOD化: データソン的デモンストレーション
PDF
Linked Dataとオントロジーによるセマンティック技術の実際
PDF
Open Data & Linked Open Data
PDF
オープンデータとWordPress
オントロジー工学に基づくセマンティック技術(1)オントロジー工学入門
オントロジー工学に基づくセマンティック技術(2)ナレッジグラフ入門
オープンデータを「世界」に発信するウィキデータ・ソン【IODD2019大阪】
オントロジーとは?
オープンデータとLOD~オープンデータって何?~
オントロジー研究20年の歩みと今後の展望
WikidataとOSM
Linked Open Data(LOD)を使うと“うれしい”3つの理由
書誌データのLOD化: データソン的デモンストレーション
Linked Dataとオントロジーによるセマンティック技術の実際
Open Data & Linked Open Data
オープンデータとWordPress

Recently uploaded (7)

PDF
Geminiの出力崩壊 本レポートは、Googleの大規模言語モデル「Gemini 2.5」が、特定の画像と短文入力に対して、誤った地名を推定し、最終的に...
PDF
Working as an OSS Developer at Ruby Association Activity Report 2025
PPTX
生成AIとモデルベース開発:実はとても相性が良いことを説明します。まあそうだろうなと思われる方はご覧ください。
PDF
翔泳社 「C++ ゼロからはじめるプログラミング」対応 C++学習教材(三谷純)
PDF
20250826_Devinで切り拓く沖縄ITの未来_AI駆動開発勉強会 沖縄支部 第2回
PDF
ココロ分解帳|感情をやさしく分解し自分と他者を理解するためのモバイルノートアプリ
Geminiの出力崩壊 本レポートは、Googleの大規模言語モデル「Gemini 2.5」が、特定の画像と短文入力に対して、誤った地名を推定し、最終的に...
Working as an OSS Developer at Ruby Association Activity Report 2025
生成AIとモデルベース開発:実はとても相性が良いことを説明します。まあそうだろうなと思われる方はご覧ください。
翔泳社 「C++ ゼロからはじめるプログラミング」対応 C++学習教材(三谷純)
20250826_Devinで切り拓く沖縄ITの未来_AI駆動開発勉強会 沖縄支部 第2回
ココロ分解帳|感情をやさしく分解し自分と他者を理解するためのモバイルノートアプリ

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