61
汎用Web APISPARQLでオープンデータ検索 @uedayou http://uedayou.net/ Kobe.R #13 + Open Data 2014.11.24

汎用Web API“SPARQL”でオープンデータ検索

Embed Size (px)

DESCRIPTION

Kobe.R #13 + Open Data/第13回 R言語勉強会@神戸 発表資料 2014年11月24日

Citation preview

Page 1: 汎用Web API“SPARQL”でオープンデータ検索

汎用Web API“SPARQL”でオープンデータ検索

@uedayou

http://uedayou.net/

Kobe.R #13 + Open Data2014.11.24

Page 2: 汎用Web API“SPARQL”でオープンデータ検索

オープンデータとの関わり

•特定非営利活動法人リンクト・オープン・データ・イニシアティブ• 2014年より理事

• 関西支部支部長補佐

• Linked Open Data チャレンジ Japan• 2014年度より実行委員

• オープンデータを利用するWebアプリを公開中• http://uedayou.net/

• ソースコード:https://github.com/uedayou

Page 3: 汎用Web API“SPARQL”でオープンデータ検索

•目的• リンクト・オープン・データ(LOD)の国内での普及促進

•理事長• 国立情報学研究所武田英明教授

•主な事業• LOD並びにオープンデータに関する調査研究事業

• 講座やシンポジウムの開催

• LOD並びにオープンデータへの取り組み支援

• オープンデータへの取り組み評価

Page 4: 汎用Web API“SPARQL”でオープンデータ検索

•主な実績• Open Data METI(平成24〜25年度 経済産業省)

• データカタログサイトの構築

• LODの設計

• アイディアソン、ヴィジュアライズソンの開催

• 都道府県・市区町村コード(平成25年度 独立行政法人統計センター)

• 自治体行政情報流通連携基盤実証事業(平成25年度総務省)

• LOD連続セミナー(自主事業)

Page 5: 汎用Web API“SPARQL”でオープンデータ検索

LOD連続セミナー(自主事業)

• 2014年5~7月まで計6回開催

•資料は LODI のWebサイトで公開中• http://linkedopendata.jp/?cat=17

Page 6: 汎用Web API“SPARQL”でオープンデータ検索

今日お話する内容

•汎用Web API“SPARQL”とは?

•SPARQLを使ってみよう!

•SPARQLでアプリを作ってみよう!

Page 7: 汎用Web API“SPARQL”でオープンデータ検索

汎用Web API“SPARQL”とは?

Page 8: 汎用Web API“SPARQL”でオープンデータ検索

SPARQL

• RDF(LOD)用の汎用クエリ言語

• RDF(LOD)用のデータベースからトリプル(3つ組)データを検索して、表形式でデータが取得できます

いろんなデータベースで使えます

扱いやすい!

PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>

SELECT * WHERE {?uri rdfs:label ?label .

}LIMIT 10

?uri ?label

http://ja.dbpedia.org/resource/岩手県 "岩手県"

http://ja.dbpedia.org/resource/石川県 "石川県"

http://ja.dbpedia.org/resource/愛媛県 "愛媛県"

http://ja.dbpedia.org/resource/岡山県 "岡山県"

Page 9: 汎用Web API“SPARQL”でオープンデータ検索

SPARQLで検索できるオープンデータが増えています

データ種別 Web API

Wikipedia DBPediaWikipediaオントロジー

行政データ データシティ鯖江都道府県・市区町村コード情報Open Data METI

イベントデータ ヨコハマ・アート・LOD

博物館データ EuropeanaLODAC MuseumThe British Museum

図書館データ The British National BibliographyWeb NDL Authorities

地理データ Linked Geo DataLODAC Location

気象データ 気象庁XML用API

生物種データ LODAC Species

この他にも多くのオープンデータがSPARQLで検索できます

Page 10: 汎用Web API“SPARQL”でオープンデータ検索

LODチャレンジもSPARQLで検索できるデータベースを公開中!

http://lodc.jp

Page 11: 汎用Web API“SPARQL”でオープンデータ検索

http://lodc.jp/#dataset

過去3年分+αのオープンライセンスのデータセットが検索可能

Page 12: 汎用Web API“SPARQL”でオープンデータ検索
Page 13: 汎用Web API“SPARQL”でオープンデータ検索
Page 14: 汎用Web API“SPARQL”でオープンデータ検索

RDFとは(Resource Description Framework)

• データを「主語」「述語」「目的語」を1つのセット(トリプル、三つ組み)として記述

主語(Subject)

目的語(Object)

述語(Predicate)

東京都 神奈川県隣の県

例えば…

Page 15: 汎用Web API“SPARQL”でオープンデータ検索

トリプルデータを表形式に変換

主語 述語 目的語

dbpedia:東京都

rdfs:label "東京都"

dbpedia:東京都

rdfs:comment “東京都(とうきょうと)は、日本の都道府県の一つである。"

dbpedia:大阪府

rdfs:label “大阪府”

dbpedia:大阪府

rdfs:comment "大阪府(おおさかふ)は、近畿

地方(関西地方)に属する日本の都道府県の一つ。"

dbpedia:京都府

rdfs:label “京都府”

dbpedia:京都府

rdfs:comment "京都府(きょうとふ)は、日本国・近畿地方の都道府県。"

id label comment

dbpedia:東京都

"東京都" “東京都(とうきょうと)は、日本の都道府県の一つである。"

dbpedia:大阪府

“大阪府” "大阪府(おおさかふ)は、近畿

地方(関西地方)に属する日本の都道府県の一つ。"

dbpedia:京都府

“京都府” "京都府(きょうとふ)は、日本国・近畿地方の都道府県。"

変換!

SPARQLなら簡単にできます!

Page 16: 汎用Web API“SPARQL”でオープンデータ検索

HTML・CSV・XML・JSONなどさまざまな形式で出力可能!

• formatパラメータを変更するだけ

JSON

http://db.lodc.jp/sparql?query=...&format=json

XML

http://db.lodc.jp/sparql?query=...&format=xml

CSV

http://db.lodc.jp/sparql?query=...&format=csv

“format”はSPARQLエンドポイントによって異なる場合があります

Page 17: 汎用Web API“SPARQL”でオープンデータ検索
Page 18: 汎用Web API“SPARQL”でオープンデータ検索

SPARQLを使ってみよう!

Page 19: 汎用Web API“SPARQL”でオープンデータ検索

URI(IRI)とリテラル

• URI(IRI) : <http://ja.dbpedia.org/resource/東京都>• 「<」「>」で挟まれた文字列

• 人・もの・出来事などを指し示すID

• 指定したURIを同じURIを含むデータが検索される

• リテラル : “東京” , “100” , “2014-09-20” …• 「”」で挟まれた文字列

• データそのもの(string, integer, float他)

• 指定した文字列と同じ文字列を含むデータが検索される

• 目的語以外は指定できない

Page 20: 汎用Web API“SPARQL”でオープンデータ検索

http://ja.dbpedia.org/resource/東京都

東京都

http://ja.dbpedia.org/resource/山梨県

http://ja.dbpedia.org/property/隣接都道府県

http://ja.dbpedia.org/resource/千葉県

http://ja.dbpedia.org/resource/埼玉県

山梨県

千葉県 埼玉県

http://ja.dbpedia.org/resource/神奈川県

神奈川県

http://ja.dbpedia.org/property/隣接都道府県

http://ja.dbpedia.org/property/隣接都道府県

http://www.w3.org/2000/01/rdf-schema#label

http://www.w3.org/2000/01/rdf-schema#label

http://www.w3.org/2000/01/rdf-schema#label

http://www.w3.org/2000/01/rdf-schema#label

http://www.w3.org/2000/01/rdf-schema#label

東京都と隣接県RDFグラフ

東京都(とうきょうと)は、日本の都道府県の一つである。

http://www.w3.org/2000/01/rdf-schema#comment

Page 21: 汎用Web API“SPARQL”でオープンデータ検索

主語 述語 目的語

<http://ja.dbpedia.org/resource /東京都>

<http://www.w3.org/2000/01/ rdf-schema#label>

"東京都"

<http://ja.dbpedia.org/resource/東京都>

<http://www.w3.org/2000/01/ rdf-schema#comment>

“東京都(とうきょうと)は、日本の都道府県の一つである。"

<http://ja.dbpedia.org/resource/東京都>

<http://ja.dbpedia.org/property/隣接都道府県>

<http://ja.dbpedia.org/resource/山梨県>

<http://ja.dbpedia.org/resource/東京都>

<http://ja.dbpedia.org/property/隣接都道府県>

<http://ja.dbpedia.org/resource/千葉県>

<http://ja.dbpedia.org/resource/東京都>

<http://ja.dbpedia.org/property/隣接都道府県>

<http://ja.dbpedia.org/resource/埼玉県>

<http://ja.dbpedia.org/resource/東京都>

<http://ja.dbpedia.org/property/隣接都道府県>

<http://ja.dbpedia.org/resource/神奈川県>

<http://ja.dbpedia.org/resource/山梨県>

<http://www.w3.org/2000/01/ rdf-schema#label>

“山梨県”

<http://ja.dbpedia.org/resource/千葉県>

<http://www.w3.org/2000/01/ rdf-schema#label>

“千葉県”

<http://ja.dbpedia.org/resource/埼玉県>

<http://www.w3.org/2000/01/ rdf-schema#label>

“埼玉県”

<http://ja.dbpedia.org/resource/神奈川県>

<http://www.w3.org/2000/01/ rdf-schema#label>

“神奈川県”

データベース上では…

Page 22: 汎用Web API“SPARQL”でオープンデータ検索

URIとリテラル主語 述語 目的語

<http://ja.dbpedia.org/resource /東京都>

<http://www.w3.org/2000/01/ rdf-schema#label>

"東京都"

<http://ja.dbpedia.org/resource/東京都>

<http://www.w3.org/2000/01/ rdf-schema#comment>

“東京都(とうきょうと)は、日本の都道府県の一つである。"

<http://ja.dbpedia.org/resource/東京都>

<http://ja.dbpedia.org/property/隣接都道府県>

<http://ja.dbpedia.org/resource/山梨県>

<http://ja.dbpedia.org/resource/東京都>

<http://ja.dbpedia.org/property/隣接都道府県>

<http://ja.dbpedia.org/resource/千葉県>

<http://ja.dbpedia.org/resource/東京都>

<http://ja.dbpedia.org/property/隣接都道府県>

<http://ja.dbpedia.org/resource/埼玉県>

<http://ja.dbpedia.org/resource/東京都>

<http://ja.dbpedia.org/property/隣接都道府県>

<http://ja.dbpedia.org/resource/神奈川県>

<http://ja.dbpedia.org/resource/山梨県>

<http://www.w3.org/2000/01/ rdf-schema#label>

“山梨県”

<http://ja.dbpedia.org/resource/千葉県>

<http://www.w3.org/2000/01/ rdf-schema#label>

“千葉県”

<http://ja.dbpedia.org/resource/埼玉県>

<http://www.w3.org/2000/01/ rdf-schema#label>

“埼玉県”

<http://ja.dbpedia.org/resource/神奈川県>

<http://www.w3.org/2000/01/ rdf-schema#label>

“神奈川県”

Page 23: 汎用Web API“SPARQL”でオープンデータ検索

主語 述語 目的語

<http://ja.dbpedia.org/resource /東京都>

<http://www.w3.org/2000/01/ rdf-schema#label>

"東京都"

<http://ja.dbpedia.org/resource/東京都>

<http://www.w3.org/2000/01/ rdf-schema#comment>

“東京都(とうきょうと)は、日本の都道府県の一つである。"

<http://ja.dbpedia.org/resource/東京都>

<http://ja.dbpedia.org/property/隣接都道府県>

<http://ja.dbpedia.org/resource/山梨県>

<http://ja.dbpedia.org/resource/東京都>

<http://ja.dbpedia.org/property/隣接都道府県>

<http://ja.dbpedia.org/resource/千葉県>

<http://ja.dbpedia.org/resource/東京都>

<http://ja.dbpedia.org/property/隣接都道府県>

<http://ja.dbpedia.org/resource/埼玉県>

<http://ja.dbpedia.org/resource/東京都>

<http://ja.dbpedia.org/property/隣接都道府県>

<http://ja.dbpedia.org/resource/神奈川県>

<http://ja.dbpedia.org/resource/山梨県>

<http://www.w3.org/2000/01/ rdf-schema#label>

“山梨県”

<http://ja.dbpedia.org/resource/千葉県>

<http://www.w3.org/2000/01/ rdf-schema#label>

“千葉県”

<http://ja.dbpedia.org/resource/埼玉県>

<http://www.w3.org/2000/01/ rdf-schema#label>

“埼玉県”

<http://ja.dbpedia.org/resource/神奈川県>

<http://www.w3.org/2000/01/ rdf-schema#label>

“神奈川県”

データベース上では…

Page 24: 汎用Web API“SPARQL”でオープンデータ検索

東京都 東京都(とうきょうと)は、日本の都道府県の一つである。

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://www.w3.org/2000/01/rdf-schema#label

http://www.w3.org/2000/01/rdf-schema#label

http://www.w3.org/2000/01/rdf-schema#label

http://www.w3.org/2000/01/rdf-schema#label

http://www.w3.org/2000/01/rdf-schema#label

東京都と隣接県RDFグラフ

http://ja.dbpedia.org/property/隣接都道府県

http://ja.dbpedia.org/property/隣接都道府県

http://ja.dbpedia.org/property/隣接都道府県

http://www.w3.org/2000/01/rdf-schema#comment

Page 25: 汎用Web API“SPARQL”でオープンデータ検索

(1) シンプルなSPARQLクエリ

•全てのトリプルデータを検索

SELECT ?s ?p ?o WHERE {

?s ?p ?o.}

Page 26: 汎用Web API“SPARQL”でオープンデータ検索

SELECT

• SELECT の後ろに続く変数(?で始まる文字列)に格納されたデータを表形式で取得

• 変数名は必ずWHERE文の中で指定したものを記述すること• 例では ?s 、 ?p 、 ?o

SELECT ?s ?p ?o WHERE {

?s ?p ?o.}

Page 27: 汎用Web API“SPARQL”でオープンデータ検索

SELECT

• アスタリスク「*」を指定すると、WHERE文の中の全ての変数を指定したことと同じになる• ?s、?p、?o が抽出される

SELECT * WHERE {

?s ?p ?o .}

SELECT ?s ?p ?o WHERE {

?s ?p ?o.}

=

Page 28: 汎用Web API“SPARQL”でオープンデータ検索

DISTINCT

• 「SELECT」と変数の間に「DISTINCT」を入れると指定した全ての変数で重複したパターンがあった場合、検索結果から除外される

SELECT DISTINCT ?s ?p ?o WHERE {

?s ?p ?o.}

Page 29: 汎用Web API“SPARQL”でオープンデータ検索

WHERE

• WHERE { } 内に検索したいトリプルパターンを書く

SELECT ?s ?p ?o WHERE {

?s ?p ?o .}

Page 30: 汎用Web API“SPARQL”でオープンデータ検索

基本構造

• トリプルデータを指定するために、3つの変数(?s, ?p, ?o)またはURI、リテラル(目的語のみ)を1セットで書く

• 1セットの終わりには必ずピリオド「.」をつける

SELECT ?s ?p ?o WHERE {

?s ?p ?o .}

主語の指定

述語の指定

目的語の指定

必ずピリオドで終わる

Page 31: 汎用Web API“SPARQL”でオープンデータ検索

?s ?p ?o

<http://ja.dbpedia.org/resource /東京都>

<http://www.w3.org/2000/01/ rdf-schema#label>

"東京都"

<http://ja.dbpedia.org/resource/東京都>

<http://www.w3.org/2000/01/ rdf-schema#comment>

“東京都(とうきょうと)は、日本の都道府県の一つである。"

<http://ja.dbpedia.org/resource/東京都>

<http://ja.dbpedia.org/property/隣接都道府県>

<http://ja.dbpedia.org/resource/山梨県>

<http://ja.dbpedia.org/resource/東京都>

<http://ja.dbpedia.org/property/隣接都道府県>

<http://ja.dbpedia.org/resource/千葉県>

<http://ja.dbpedia.org/resource/東京都>

<http://ja.dbpedia.org/property/隣接都道府県>

<http://ja.dbpedia.org/resource/埼玉県>

<http://ja.dbpedia.org/resource/東京都>

<http://ja.dbpedia.org/property/隣接都道府県>

<http://ja.dbpedia.org/resource/神奈川県>

<http://ja.dbpedia.org/resource/山梨県>

<http://www.w3.org/2000/01/ rdf-schema#label>

“山梨県”

<http://ja.dbpedia.org/resource/千葉県>

<http://www.w3.org/2000/01/ rdf-schema#label>

“千葉県”

<http://ja.dbpedia.org/resource/埼玉県>

<http://www.w3.org/2000/01/ rdf-schema#label>

“埼玉県”

<http://ja.dbpedia.org/resource/神奈川県>

<http://www.w3.org/2000/01/ rdf-schema#label>

“神奈川県”

検索対象

Page 32: 汎用Web API“SPARQL”でオープンデータ検索

http://uedayou.net/sparql-mashup/test-endpoint/

Page 33: 汎用Web API“SPARQL”でオープンデータ検索

変数•変数: ?s , ?p , ?o, ?label, ?comment …

• 「?」で始まる文字列

• パターンに当てはまるデータ全てが格納される

• 検索式内の同一変数は同じデータが入るという意味に

?id rdfs:label ?label.

トリプルパターン

id label

dbpedia:東京都

"東京都"

dbpedia:大阪府

“大阪府”

dbpedia:京都府

“京都府”

Page 34: 汎用Web API“SPARQL”でオープンデータ検索

?id rdfs:comment ?comment.

トリプルパターン

id comment

dbpedia:東京都

“東京都(とうきょうと)は、日本の都道府県の一つである。"

dbpedia:大阪府

"大阪府(おおさかふ)は、近畿

地方(関西地方)に属する日本の都道府県の一つ。"

dbpedia:京都府

"京都府(きょうとふ)は、日本国・近畿地方の都道府県。"

Page 35: 汎用Web API“SPARQL”でオープンデータ検索

?id rdfs:label ?label.?id rdfs:comment ?comment.

トリプルパターン

同じ名前の変数(?id)はAND検索を意味します

Page 36: 汎用Web API“SPARQL”でオープンデータ検索

(2) 述語が<http://www.w3.org/2000/01/rdf-schema#label>であるトリプルを取得

• <http://www.w3.org/2000/01/rdf-schema#label>はデータのラベル(名前)を示す場合によく利用されています。

• 省略形は「rdfs:label」

SELECT ?s ?o WHERE {

?s <http://www.w3.org/2000/01/rdf-schema#label> ?o .}

主語の指定

述語の指定

目的語の指定

Page 37: 汎用Web API“SPARQL”でオープンデータ検索

?s ?p ?o

<http://ja.dbpedia.org/resource /東京都>

<http://www.w3.org/2000/01/ rdf-schema#label>

"東京都"

<http://ja.dbpedia.org/resource/東京都>

<http://www.w3.org/2000/01/ rdf-schema#comment>

“東京都(とうきょうと)は、日本の都道府県の一つである。"

<http://ja.dbpedia.org/resource/東京都>

<http://ja.dbpedia.org/property/隣接都道府県>

<http://ja.dbpedia.org/resource/山梨県>

<http://ja.dbpedia.org/resource/東京都>

<http://ja.dbpedia.org/property/隣接都道府県>

<http://ja.dbpedia.org/resource/千葉県>

<http://ja.dbpedia.org/resource/東京都>

<http://ja.dbpedia.org/property/隣接都道府県>

<http://ja.dbpedia.org/resource/埼玉県>

<http://ja.dbpedia.org/resource/東京都>

<http://ja.dbpedia.org/property/隣接都道府県>

<http://ja.dbpedia.org/resource/神奈川県>

<http://ja.dbpedia.org/resource/山梨県>

<http://www.w3.org/2000/01/ rdf-schema#label>

“山梨県”

<http://ja.dbpedia.org/resource/千葉県>

<http://www.w3.org/2000/01/ rdf-schema#label>

“千葉県”

<http://ja.dbpedia.org/resource/埼玉県>

<http://www.w3.org/2000/01/ rdf-schema#label>

“埼玉県”

<http://ja.dbpedia.org/resource/神奈川県>

<http://www.w3.org/2000/01/ rdf-schema#label>

“神奈川県”

検索対象

Page 38: 汎用Web API“SPARQL”でオープンデータ検索

http://uedayou.net/sparql-mashup/test-endpoint/

Page 39: 汎用Web API“SPARQL”でオープンデータ検索

select distinct * where {<http://ja.dbpedia.org/resource/東京都> ?p ?o . }

(3)主語に<http://ja.dbpedia.org/resource/東京都>が指定されているトリプルを取得

• <http://ja.dbpedia.org/resource/東京都>に関するデータ(述語と目的語)全て検索

主語の指定

述語の指定

目的語の指定

Page 40: 汎用Web API“SPARQL”でオープンデータ検索

?s ?p ?o

<http://ja.dbpedia.org/resource /東京都>

<http://www.w3.org/2000/01/ rdf-schema#label>

"東京都"

<http://ja.dbpedia.org/resource/東京都>

<http://www.w3.org/2000/01/ rdf-schema#comment>

“東京都(とうきょうと)は、日本の都道府県の一つである。"

<http://ja.dbpedia.org/resource/東京都>

<http://ja.dbpedia.org/property/隣接都道府県>

<http://ja.dbpedia.org/resource/山梨県>

<http://ja.dbpedia.org/resource/東京都>

<http://ja.dbpedia.org/property/隣接都道府県>

<http://ja.dbpedia.org/resource/千葉県>

<http://ja.dbpedia.org/resource/東京都>

<http://ja.dbpedia.org/property/隣接都道府県>

<http://ja.dbpedia.org/resource/埼玉県>

<http://ja.dbpedia.org/resource/東京都>

<http://ja.dbpedia.org/property/隣接都道府県>

<http://ja.dbpedia.org/resource/神奈川県>

<http://ja.dbpedia.org/resource/山梨県>

<http://www.w3.org/2000/01/ rdf-schema#label>

“山梨県”

<http://ja.dbpedia.org/resource/千葉県>

<http://www.w3.org/2000/01/ rdf-schema#label>

“千葉県”

<http://ja.dbpedia.org/resource/埼玉県>

<http://www.w3.org/2000/01/ rdf-schema#label>

“埼玉県”

<http://ja.dbpedia.org/resource/神奈川県>

<http://www.w3.org/2000/01/ rdf-schema#label>

“神奈川県”

検索対象

Page 41: 汎用Web API“SPARQL”でオープンデータ検索

http://uedayou.net/sparql-mashup/test-endpoint/

Page 42: 汎用Web API“SPARQL”でオープンデータ検索

(4) 東京都に隣接する県の名前

1. 東京都のURIから隣接する都道府県を表す<http://ja.dbpedia.org/property/隣接都道府県>を述語として持つ目的語を検索する

2. さらに、検索された目的語を主語に指定して、そのrdfs:labelを検索する

•同じ変数(例えば ?pref)を異なるトリプルパターンで記述すると、同じURIを持つもののみ検索される(AND検索)

SELECT DISTINCT ?pref ?label WHERE {<http://ja.dbpedia.org/resource/東京都> <http://ja.dbpedia.org/property/隣接都道府県> ?pref. ?pref <http://www.w3.org/2000/01/rdf-schema#label> ?label.}

Page 43: 汎用Web API“SPARQL”でオープンデータ検索

主語 述語 目的語

<http://ja.dbpedia.org/resource /東京都>

<http://www.w3.org/2000/01/ rdf-schema#label>

"東京都"

<http://ja.dbpedia.org/resource/東京都>

<http://www.w3.org/2000/01/ rdf-schema#comment>

“東京都(とうきょうと)は、日本の都道府県の一つである。"

<http://ja.dbpedia.org/resource/東京都>

<http://ja.dbpedia.org/property/隣接都道府県>

<http://ja.dbpedia.org/resource/山梨県>

<http://ja.dbpedia.org/resource/東京都>

<http://ja.dbpedia.org/property/隣接都道府県>

<http://ja.dbpedia.org/resource/千葉県>

<http://ja.dbpedia.org/resource/東京都>

<http://ja.dbpedia.org/property/隣接都道府県>

<http://ja.dbpedia.org/resource/埼玉県>

<http://ja.dbpedia.org/resource/東京都>

<http://ja.dbpedia.org/property/隣接都道府県>

<http://ja.dbpedia.org/resource/神奈川県>

<http://ja.dbpedia.org/resource/山梨県>

<http://www.w3.org/2000/01/ rdf-schema#label>

“山梨県”

<http://ja.dbpedia.org/resource/千葉県>

<http://www.w3.org/2000/01/ rdf-schema#label>

“千葉県”

<http://ja.dbpedia.org/resource/埼玉県>

<http://www.w3.org/2000/01/ rdf-schema#label>

“埼玉県”

<http://ja.dbpedia.org/resource/神奈川県>

<http://www.w3.org/2000/01/ rdf-schema#label>

“神奈川県”

検索対象

?pref

?label

「?pref」と同じURIを主語に持つトリプル

を選択

Page 44: 汎用Web API“SPARQL”でオープンデータ検索

http://uedayou.net/sparql-mashup/test-endpoint/

Page 45: 汎用Web API“SPARQL”でオープンデータ検索

PREFIXによるURIの省略表記

• URI記述はPREFIXを利用することで省略表記が可能

• クエリ先頭行に以下のような形式で追加• PREFIX BINDNAME : <URI>

• 例:PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>

• PREFIX を指定するとURIを省略表記に• <http://www.w3.org/2000/01/rdf-schema#label>

• PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>

• rdfs:label

Page 46: 汎用Web API“SPARQL”でオープンデータ検索

PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>PREFIX dbpedia-ja: <http://ja.dbpedia.org/resource/> PREFIX prop-ja: <http://ja.dbpedia.org/property/>

主語 述語 目的語

<http://ja.dbpedia.org/resource/東京都>

<http://www.w3.org/2000/01/ rdf-schema#label>

"東京都"

<http://ja.dbpedia.org/resource/東京都>

<http://www.w3.org/2000/01/ rdf-schema#comment>

“東京都(とうきょうと)は、日本の都道府県の一つである。"

<http://ja.dbpedia.org/resource/東京都>

<http://ja.dbpedia.org/property/隣接都道府県>

<http://ja.dbpedia.org/resource/山梨県>

<http://ja.dbpedia.org/resource/東京都>

<http://ja.dbpedia.org/property/隣接都道府県>

<http://ja.dbpedia.org/resource/千葉県>

<http://ja.dbpedia.org/resource/東京都>

<http://ja.dbpedia.org/property/隣接都道府県>

<http://ja.dbpedia.org/resource/埼玉県>

<http://ja.dbpedia.org/resource/東京都>

<http://ja.dbpedia.org/property/隣接都道府県>

<http://ja.dbpedia.org/resource/神奈川県>

<http://ja.dbpedia.org/resource/山梨県>

<http://www.w3.org/2000/01/ rdf-schema#label>

“山梨県”

<http://ja.dbpedia.org/resource/千葉県>

<http://www.w3.org/2000/01/ rdf-schema#label>

“千葉県”

<http://ja.dbpedia.org/resource/埼玉県>

<http://www.w3.org/2000/01/ rdf-schema#label>

“埼玉県”

<http://ja.dbpedia.org/resource/神奈川県>

<http://www.w3.org/2000/01/ rdf-schema#label>

“神奈川県”

主語 述語 目的語

dbpedia-jp:東京都 rdfs:label "東京都"

dbpedia-jp:東京都 rdfs:comment “東京都(とうきょうと)は、日本の都道府県の一つである。"

dbpedia-jp:東京都 prop-ja:隣接都道府県 dbpedia-jp:山梨県

dbpedia-jp:東京都 prop-ja:隣接都道府県 dbpedia-jp:千葉県

dbpedia-jp:東京都 prop-ja:隣接都道府県 dbpedia-jp:埼玉県

dbpedia-jp:東京都 prop-ja:隣接都道府県 dbpedia-jp:神奈川県

dbpedia-jp:山梨県 rdfs:label “山梨県”

dbpedia-jp:千葉県 rdfs:label “千葉県”

dbpedia-jp:埼玉県 rdfs:label “埼玉県”

dbpedia-jp:神奈川県 rdfs:label “神奈川県”

Page 47: 汎用Web API“SPARQL”でオープンデータ検索

http://ja.dbpedia.org/resource/東京都

東京都

http://ja.dbpedia.org/resource/山梨県

http://ja.dbpedia.org/property/隣接都道府県

http://ja.dbpedia.org/resource/千葉県

http://ja.dbpedia.org/resource/埼玉県

山梨県

千葉県 埼玉県

http://ja.dbpedia.org/resource/神奈川県

神奈川県

http://ja.dbpedia.org/property/隣接都道府県

http://ja.dbpedia.org/property/隣接都道府県

http://www.w3.org/2000/01/rdf-schema#label

http://www.w3.org/2000/01/rdf-schema#label

http://www.w3.org/2000/01/rdf-schema#label

http://www.w3.org/2000/01/rdf-schema#label

http://www.w3.org/2000/01/rdf-schema#label

東京都と隣接県RDFグラフ

東京都(とうきょうと)は、日本の都道府県の一つである。

http://www.w3.org/2000/01/rdf-schema#comment

dbpedia-ja:東京都

東京都

dbpedia-ja:山梨県

prop-ja:隣接都道府県

dbpedia-ja:千葉県 dbpedia-ja:埼玉県

山梨県

千葉県 埼玉県

dbpedia-ja:神奈川県

神奈川県

rdfs:label

東京都と隣接県RDFグラフ

東京都(とうきょうと)は、日本の都道府県の一つである。

rdfs:comment

prop-ja:隣接都道府県

prop-ja:隣接都道府県

rdfs:label

rdfs:labelrdfs:label

rdfs:label

Page 48: 汎用Web API“SPARQL”でオープンデータ検索

(5) 「東京都に隣接する県の名前」のクエリを省略して書くと…

SELECT DISTINCT ?pref ?label WHERE {<http://ja.dbpedia.org/resource/東京都> <http://ja.dbpedia.org/property/隣接都道府県> ?pref. ?pref <http://www.w3.org/2000/01/rdf-schema#label> ?label.}

PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>PREFIX dbpedia-ja: <http://ja.dbpedia.org/resource/> PREFIX prop-ja: <http://ja.dbpedia.org/property/>

SELECT DISTINCT ?pref ?label WHERE {

dbpedia-ja:東京都 prop-ja:隣接都道府県 ?pref . ?pref rdfs:label ?label .

}

Page 49: 汎用Web API“SPARQL”でオープンデータ検索

http://uedayou.net/sparql-mashup/test-endpoint/

Page 50: 汎用Web API“SPARQL”でオープンデータ検索

(6) 同一主語の省略

•同じ主語から異なる複数の述語を指定する場合、目的語のあとのピリオド「.」をセミコロン「;」にすることで次のトリプルパターンの主語を省略できます

SELECT DISTINCT * WHERE {dbpedia-ja:東京都 rdfs:label ?label .dbpedia-ja:東京都 rdfs:comment ?comment .

}

SELECT DISTINCT * WHERE {dbpedia-ja:東京都 rdfs:label ?label ;

rdfs:comment ?comment . } 省略を終了するトリプルパターン

の最後は必ずピリオドにすること

主語を省略できる

Page 51: 汎用Web API“SPARQL”でオープンデータ検索

http://uedayou.net/sparql-mashup/test-endpoint/

Page 52: 汎用Web API“SPARQL”でオープンデータ検索

SPARQLの便利な検索機能検索句 機能

LIMIT 検索結果の上限を設定

OFFSET 検索結果の取得位置を指定

ORDER BY 検索結果の並び順を指定

OPTIONAL OPTIONAL内は任意検索

FILTER 検索結果のフィルタリングが可能

REGEX 正規表現による検索が可能

BIND 新たな変数への割り当てが可能

CONCAT 文字列の結合が可能

REPLACE 文字列の置き換えが可能(正規表現使用可)

SUBSTR 文字列の切り出しが可能

COUNT 検索件数を表示

GROUP BY 変数のグループ化が可能

HAVING グループ化した変数の絞込みが可能

Page 53: 汎用Web API“SPARQL”でオープンデータ検索

FROM

• トリプルデータには、その全体を現す名前(グラフ名)が指定されています

• FROMを使うとグラフ名ごとに検索が行えます

<http://lod.sfc.keio.ac.jp/challenge2014/show_status.php?id=d001> というグラフ名がついているトリプルデータを対象とする

PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>

SELECT DISTINCT ?uri ?label FROM <http://lod.sfc.keio.ac.jp/challenge2014/show_status.php?id=d001>WHERE {

?uri rdfs:label ?label .}

Page 54: 汎用Web API“SPARQL”でオープンデータ検索

http://lod.sfc.keio.ac.jp/challenge2013/show_status.php?id=d030

http://lod.sfc.keio.ac.jp/challenge2014/show_status.php?id=d001

グラフ名ごとに検索が可能 主語 述語 目的語

dbpedia-ja:大阪府 rdfs:label “大阪府"

dbpedia-ja:大阪府 prop-ja:隣接都道府県 dbpedia-ja:兵庫県

dbpedia-ja:大阪府 prop-ja:隣接都道府県 dbpedia-ja:和歌山県

dbpedia-ja:大阪府 prop-ja:隣接都道府県 dbpedia-ja:京都府

dbpedia-ja:大阪府 prop-ja:隣接都道府県 dbpedia-ja:奈良県

dbpedia-ja:兵庫県 rdfs:label “兵庫県”

dbpedia-ja:和歌山県 rdfs:label “和歌山県”

dbpedia-ja:京都府 rdfs:label “京都府”

dbpedia-ja:奈良県 rdfs:label “奈良県”

FROM

LODチャレンジエンドポイントでは、エントリーページのURLがグラフ名になっています

Page 55: 汎用Web API“SPARQL”でオープンデータ検索

SPARQLでアプリを作ってみよう!

Page 56: 汎用Web API“SPARQL”でオープンデータ検索

トイレ危険地帯

• Linked Open Data チャレンジ 2013 受賞作品

•鯖江市が公開するオープンデータのうち、公衆トイレの位置を利用してトイレのない地域をWebアプリでビジュアライズ

http://y4ashida.github.io/toilet/

Page 57: 汎用Web API“SPARQL”でオープンデータ検索

○○危険地帯

• トイレ危険地帯のソースコードを修正して、SPARQLでさまざまなデータで空白地域をビジュアライズできるようにしました

• https://github.com/uedayou/dangerzone-sparql

Page 58: 汎用Web API“SPARQL”でオープンデータ検索

大阪市版トイレ危険地帯

http://uedayou.github.io/dangerzone-sparql/

Page 59: 汎用Web API“SPARQL”でオープンデータ検索

○○危険地帯の使い方

1. 「Download ZIP」ボタンを押してソースコードをダウンロード

2. ZIPファイルを解凍

3. config.js の書き換える

4. Index.html をブラウザで開く

SPARQLを書きます

Page 60: 汎用Web API“SPARQL”でオープンデータ検索

config.js の書き方

// SPARQLエンドポイントを指定var endpoint = "http://db.lodc.jp/sparql";// SPARQLクエリを指定var query = (function () {/*SELECT DISTINCT *FROM <http://lod.sfc.keio.ac.jp/challenge2013/show_status.php?id=d030>WHERE{

?uri <http://lodosaka.hozo.jp/category_1> "公衆トイレ"@ja ;<http://www.w3.org/2003/01/geo/wgs84_pos#lat> ?latitude ;<http://www.w3.org/2003/01/geo/wgs84_pos#long> ?longitude .

}*/}).toString().match(/¥n([¥s¥S]*)¥n/)[1];// 中心位置を指定var initial_latitude =34.68206400648744;var initial_longitude =135.49816131591797;// ズーム率を指定var initial_zoom = 11;

SPARQLクエリ

SPARQLエンドポイント

Page 61: 汎用Web API“SPARQL”でオープンデータ検索

大阪市のいろんな危険地帯を作ってみよう!

// SPARQLエンドポイントを指定var endpoint = "http://db.lodc.jp/sparql";// SPARQLクエリを指定var query = (function () {/*SELECT DISTINCT *FROM <http://lod.sfc.keio.ac.jp/challenge2013/show_status.php?id=d030>WHERE{

?uri <http://lodosaka.hozo.jp/category_1> "公衆トイレ"@ja ;<http://www.w3.org/2003/01/geo/wgs84_pos#lat> ?latitude ;<http://www.w3.org/2003/01/geo/wgs84_pos#long> ?longitude .

}LIMIT 1000*/}).toString().match(/¥n([¥s¥S]*)¥n/)[1];// 中心位置を指定var initial_latitude =34.68206400648744;var initial_longitude =135.49816131591797;// ズーム率を指定var initial_zoom = 11;

ここのカテゴリを変えるといろんな危険地帯が作れます例:“学校・保育所”@ja“名所・旧跡”@ja“警察・消防”@ja“医療・福祉”@ja“公園・スポーツ”@ja“駅・バス停”@ja…