大阪市オープンデータポータル
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勉強会

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