大阪市オープンデータポータル API(SPARQL)勉強会 主催:ODI Osaka,LODチャレンジ実行委員会関西支部, NPO法人 Linked Open Data Initiative 共催:大阪イノベーションハブ 協力:Code for Osaka 大阪市オープンデータポータルサイト https://data.city.osaka.lg.jp/ 2017年3月1日(水) @大阪イノベーションハブ
大阪市オープンデータポータル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チャレンジ実行委員会/大阪大学
古崎 晃司
大阪市オープンデータポータル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/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勉強会
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勉強会
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.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勉強会
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 ?owhere {
?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 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勉強会
大阪市のオープンデータを例とした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 ?owhere {
<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 ?owhere {
dbpedia-ja:東京都 ?p ?o . }LIMIT 10OFFSET 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勉強会