99
SPARQLを利用した 逆マッシュアップ -プログラミングを必要としないアプリ作成方法- 上田 洋 日本図書館研究会 情報組織化研究グループ LOD勉強会 2014/08/30

SPARQLを利用した逆マッシュアップ-プログラミングを必要としないアプリ作成方法-

Embed Size (px)

DESCRIPTION

SPARQLを利用した逆マッシュアップ -プログラミングを必要としないアプリ作成方法- http://uedayou.net/sparql-examples/

Citation preview

Page 1: SPARQLを利用した逆マッシュアップ-プログラミングを必要としないアプリ作成方法-

SPARQLを利用した逆マッシュアップ

-プログラミングを必要としないアプリ作成方法-

上田洋

日本図書館研究会情報組織化研究グループ LOD勉強会

2014/08/30

Page 2: SPARQLを利用した逆マッシュアップ-プログラミングを必要としないアプリ作成方法-

紹介するSPARQLクエリ、エンドポイント、アプリはこちらから利用・取得できます

http://uedayou.net/sparql-examples/

Page 3: SPARQLを利用した逆マッシュアップ-プログラミングを必要としないアプリ作成方法-

自己紹介

•株式会社 ATR Creative • ソフトウェアエンジニア、スマートフォンアプリ開発を担当

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

• 関西支部支部長補佐

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

Page 4: SPARQLを利用した逆マッシュアップ-プログラミングを必要としないアプリ作成方法-

逆マッシュアップとは?

•既存のアプリ(プログラム)を再利用して、データを入れ替えて新たなアプリを簡単に作成

• プログラム作成が大変

• 既存データのAPIを利用

マッシュアップ

データAPI

データAPI

プログラムの作成

マッシュアップ

• プログラムは再利用

• 新データをAPI化して挿入

逆マッシュアップ

データAPI

データの作成API化

プログラム

逆マッシュアップ

簡単!

「逆マッシュアップの提唱」よりhttp://www.slideshare.net/tetsurotoyoda/ss-27381991

Page 5: SPARQLを利用した逆マッシュアップ-プログラミングを必要としないアプリ作成方法-

逆マッシュアップするために

• LinkData.org を利用する• 理化学研究所が開発した、データとアプリの作成・公開をひとつのサイトで行える「逆マッシュアップ支援ツール」

• 自前のサーバが不要• LinkData.org に登録されたデータとアプリが再利用可能

• SPARQLを利用する• SPARQLと呼ばれるクエリ言語で抽出したデータを、既存アプリに当てはめて作成

• SPARQLで高度なデータ加工・変換が可能なため、汎用性・自由度が高い

• 世界中のSPARQLエンドポイント(Web API)で公開されるデータも利用可能

Page 6: SPARQLを利用した逆マッシュアップ-プログラミングを必要としないアプリ作成方法-

SPARQLを利用した逆マッシュアップ

• SPARQLだけで作成できるWebアプリがいくつか公開中• 地図、カレンダー、データ検索、ビジュアライズなど

•利用できるSPARQLエンドポイント、データ量・種類が豊富• Wikipedia:DBpedia、DBpedia Japanese、日本語Wikipediaオントロジー

• 行政データ:データシティ鯖江、次世代統計利用システム都道府県・市区町村コード情報

• 文化芸術データ:Europeana、ヨコハマ・アート・LOD、 LODAC Museum

• 書誌・典拠データ:The British National Bibliography、Web NDL Authorities

• 地理データ:Linked Geo Data、LODAC Location

• 気象データ:気象庁XML用API

ほか

•作成データを手軽にSPARQLエンドポイントで公開できるサービスも• Sparql EPCU

Page 7: SPARQLを利用した逆マッシュアップ-プログラミングを必要としないアプリ作成方法-

1.SPARQLの使い方

Page 8: SPARQLを利用した逆マッシュアップ-プログラミングを必要としないアプリ作成方法-

SPARQLとは?

• SPARQL Protocol and RDF Query Language

• RDF用のクエリ言語

• RDFストア(データベース)に設置されるSPARQLエンドポイントからトリプルデータ検索・抽出が可能

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: SPARQLを利用した逆マッシュアップ-プログラミングを必要としないアプリ作成方法-

SPARQLでの検索方法• RDFストアに設置されたSPARQL検索ページ

•直接SPARQLエンドポイント(API)を直接利用• 例:http://ja.dbpedia.org/sparql?query={SPARQLクエリ}

• JSONやXML、CSVなどで取得可能

Page 10: SPARQLを利用した逆マッシュアップ-プログラミングを必要としないアプリ作成方法-

例:DBPedia Japaneseで東京都に関するデータを検索• http://ja.dbpedia.org/sparql を開いて「Run Query」を押すと検索できます

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

SPARQLクエリ

検索結果

Page 11: SPARQLを利用した逆マッシュアップ-プログラミングを必要としないアプリ作成方法-

2.SPARQLの書き方

Page 12: SPARQLを利用した逆マッシュアップ-プログラミングを必要としないアプリ作成方法-

変数とURI(IRI)とリテラル

•変数• 「?」で始まる文字列• 該当する全てのデータが格納される• 検索式内の同一変数は同じデータが入るという意味に

• URI(IRI)• 「<」「>」で挟まれた文字列• 指定したURIを同じURIを含むデータが検索される

• リテラル• 「”」で挟まれた文字列• 指定した文字列と同じ文字列を含むデータが検索される

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

Page 13: 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グラフ

Page 14: SPARQLを利用した逆マッシュアップ-プログラミングを必要としないアプリ作成方法-

主語 述語 目的語

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

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

"東京都"

<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 15: SPARQLを利用した逆マッシュアップ-プログラミングを必要としないアプリ作成方法-

主語 述語 目的語

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

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

"東京都"

<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>

“神奈川県”

URIとリテラル

Page 16: SPARQLを利用した逆マッシュアップ-プログラミングを必要としないアプリ作成方法-

主語 述語 目的語

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

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

"東京都"

<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 17: 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/隣接都道府県

Page 18: SPARQLを利用した逆マッシュアップ-プログラミングを必要としないアプリ作成方法-

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

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

SELECT ?s ?p ?o WHERE {

?s ?p ?o.}

Page 19: SPARQLを利用した逆マッシュアップ-プログラミングを必要としないアプリ作成方法-

SELECT

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

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

SELECT ?s ?p ?o WHERE {

?s ?p ?o.}

Page 20: SPARQLを利用した逆マッシュアップ-プログラミングを必要としないアプリ作成方法-

SELECT

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

SELECT * WHERE {

?s ?p ?o .}

SELECT ?s ?p ?o WHERE {

?s ?p ?o.}

=

Page 21: SPARQLを利用した逆マッシュアップ-プログラミングを必要としないアプリ作成方法-

DISTINCT

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

SELECT DISTINCT ?s ?p ?o WHERE {

?s ?p ?o.}

Page 22: SPARQLを利用した逆マッシュアップ-プログラミングを必要としないアプリ作成方法-

WHERE

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

SELECT ?s ?p ?o WHERE {

?s ?p ?o .}

Page 23: SPARQLを利用した逆マッシュアップ-プログラミングを必要としないアプリ作成方法-

基本構造

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

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

SELECT ?s ?p ?o WHERE {

?s ?p ?o .}

主語の指定

述語の指定

目的語の指定

必ずピリオドで終わる

Page 24: SPARQLを利用した逆マッシュアップ-プログラミングを必要としないアプリ作成方法-

?s ?p ?o

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

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

"東京都"

<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 25: SPARQLを利用した逆マッシュアップ-プログラミングを必要としないアプリ作成方法-

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

Page 26: 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 27: SPARQLを利用した逆マッシュアップ-プログラミングを必要としないアプリ作成方法-

?s ?p ?o

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

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

"東京都"

<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 28: SPARQLを利用した逆マッシュアップ-プログラミングを必要としないアプリ作成方法-

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

Page 29: SPARQLを利用した逆マッシュアップ-プログラミングを必要としないアプリ作成方法-

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

(3) DBpediaのデフォルトのクエリの意味

•主語に<http://ja.dbpedia.org/resource/東京都>が指定されているトリプルの述語と目的語のデータを全て検索

主語の指定

述語の指定

目的語の指定

Page 30: SPARQLを利用した逆マッシュアップ-プログラミングを必要としないアプリ作成方法-

?s ?p ?o

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

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

"東京都"

<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 31: SPARQLを利用した逆マッシュアップ-プログラミングを必要としないアプリ作成方法-

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

Page 32: 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 33: SPARQLを利用した逆マッシュアップ-プログラミングを必要としないアプリ作成方法-

主語 述語 目的語

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

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

"東京都"

<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 34: SPARQLを利用した逆マッシュアップ-プログラミングを必要としないアプリ作成方法-

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

Page 35: 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 36: 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://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-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 “神奈川県”

Page 37: 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グラフ

dbpedia-ja:東京都

東京都

dbpedia-ja:山梨県

prop-ja:隣接都道府県

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

山梨県

千葉県 埼玉県

dbpedia-ja:神奈川県

神奈川県

prop-ja:隣接都道府県

prop-ja:隣接都道府県

rdfs:label

東京都と隣接県RDFグラフ

rdfs:label

rdfs:labelrdfs:label

rdfs:label

Page 38: 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 39: SPARQLを利用した逆マッシュアップ-プログラミングを必要としないアプリ作成方法-

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

Page 40: SPARQLを利用した逆マッシュアップ-プログラミングを必要としないアプリ作成方法-

(6) 同一主語の省略

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

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

}

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

prop-ja:隣接都道府県 ?pref . } 省略を終了するトリプルパターン

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

主語を省略できる

Page 41: SPARQLを利用した逆マッシュアップ-プログラミングを必要としないアプリ作成方法-

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

Page 42: SPARQLを利用した逆マッシュアップ-プログラミングを必要としないアプリ作成方法-

よく使われそうな述語(プロパティ)意味 プロパティ

ラベル名前タイトル

rdfs:label <http://www.w3.org/2000/01/rdf-schema#label>dc:title <http://purl.org/dc/elements/1.1/title>dcterms:title <http://purl.org/dc/terms/title>schema:name <http://schema.org/name>foaf:name <http://xmlns.com/foaf/0.1/name>

作者著者

dc:creator<http://purl.org/dc/elements/1.1/creator>dcterms:creator<http://purl.org/dc/terms/creator>

作成日 dc:created<http://purl.org/dc/elements/1.1/created>dcterms:created<http://purl.org/dc/terms/created>

更新日 dc:modified<http://purl.org/dc/elements/1.1/modified>dcterms:modified<http://purl.org/dc/terms/modified>

開始時間

schema:startDate <http://schema.org/startDate>cal:dtstart <http://www.w3.org/2002/12/cal/icaltzd#dtstart>

終了時間

schema:endDate <http://schema.org/endDate>ical:dtend <http://www.w3.org/2002/12/cal/icaltzd#dtend>

Page 43: SPARQLを利用した逆マッシュアップ-プログラミングを必要としないアプリ作成方法-

意味 プロパティ

緯度 geo:lat<http://www.w3.org/2003/01/geo/wgs84_pos#lat>

経度 geo:long<http://www.w3.org/2003/01/geo/wgs84_pos#long>

説明内容

dc:description<http://purl.org/dc/elements/1.1/description>dcterms:description <<http://purl.org/dc/terms/description>schema:description <http://schema.org/description>

データタイプ

rdf:type(※SPARQLでは「a」と省略できる)<http://www.w3.org/1999/02/22-rdf-syntax-ns#type>

Webページ

foaf:homepage <http://xmlns.com/foaf/0.1/homepage>schema:url <http://schema.org/url>

メールアドレス

vCard:email <http://www.w3.org/2006/vcard/ns#email>foaf:mbox <http://xmlns.com/foaf/0.1/mbox>

画像 schema:image <http://schema.org/image>foaf:Image <http://xmlns.com/foaf/0.1/Image>

住所 schema:address <http://schema.org/address>vCard:adr <http://www.w3.org/2006/vcard/ns#adr>

電話番号

schema:telephone <http://schema.org/telephone>vCard:tel <http://www.w3.org/2006/vcard/ns#tel>foaf:phone <http://xmlns.com/foaf/0.1/phone>

Page 44: SPARQLを利用した逆マッシュアップ-プログラミングを必要としないアプリ作成方法-

LIMIT

•検索結果の上限を設定

• WHERE{}の後ろに記述

• 「LIMIT 10」で最大10件取得

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

SELECT DISTINCT ?uri ?label WHERE {

?uri rdfs:label ?label .}LIMIT 10

Page 45: SPARQLを利用した逆マッシュアップ-プログラミングを必要としないアプリ作成方法-

OFFSET

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

• WHERE{}の後ろに記述

• 「OFFSET 100」は100番目から取得

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

SELECT DISTINCT ?uri ?label WHERE {

?uri rdfs:label ?label .}LIMIT 10OFFSET 100

Page 46: SPARQLを利用した逆マッシュアップ-プログラミングを必要としないアプリ作成方法-

ORDER BY / ORDER BY DESC

•検索結果の並び順を指定

• WHERE{}の後ろに記述

• 「ORDER BY ?created」で作成日昇順にソート

• 「ORDER BY DESC(?created)」なら作成日降順

• LIMIT、OFFSETがあれば、その前に挿入

PREFIX dc: <http://purl.org/dc/elements/1.1/>

SELECT DISTINCT ?uri ?created WHERE {

?uri dc:created ?created.}ORDER BY ?createdLIMIT 10OFFSET 100

PREFIX dc: <http://purl.org/dc/elements/1.1/>

SELECT DISTINCT ?uri ?created WHERE {

?uri dc:created ?created.}ORDER BY DESC(?created)LIMIT 10OFFSET 100

Page 47: SPARQLを利用した逆マッシュアップ-プログラミングを必要としないアプリ作成方法-

OPTIONAL

• OPTIONAL{ … } 内のグラフパターンはパターンに一致しなくても、OPTIONAL外のパターンに一致すれば検索される

• WHERE{ … } 内に記述

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

SELECT DISTINCT ?uri ?label ?description WHERE {

?uri rdfs:label ?label .OPTIONAL {

?uri dc:description ?description.}

}

Page 48: SPARQLを利用した逆マッシュアップ-プログラミングを必要としないアプリ作成方法-

FILTER

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

• WHERE{ … } 内に記述

• dcterms:issuedが 2000(年)以上のものを検索

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

SELECT DISTINCT ?uri ?label ?issued WHERE {

?uri rdfs:label ?label ;dcterms:issued ?issued .

FILTER ( ?issued >= 2000 )}

Page 49: SPARQLを利用した逆マッシュアップ-プログラミングを必要としないアプリ作成方法-

REGEX

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

• FILTER と組み合わせて利用する

• WHERE{ … } 内に記述

•書き方• REGEX( 検索対象の変数 , 正規表現 )

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

SELECT DISTINCT ?uri ?label WHERE {

?uri rdfs:label ?label .FILTER ( REGEX ( ?label, “^東京.*$” ) )

}

?labelを「東京」で前方一致検索

Page 50: SPARQLを利用した逆マッシュアップ-プログラミングを必要としないアプリ作成方法-

BIND / CONCAT

• BIND:指定した変数・データを別の名前の変数に割り当てが可能• BIND( [割り当てるデータ] AS [変数] )

• CONCAT:変数や文字列同士の結合が可能、値はリテラルに• CONCAT( [変数or文字列] , [変数or文字列] , … )

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

SELECT DISTINCT ?uri ?label ?description ?text WHERE {

?uri rdfs:label ?label ;dc:description ?description .BIND( CONCAT( “<h1>” , ?label , “</h1><p>” , ?description , “</p>” ) AS ?text )

}

?text は 「<h1>[?labelのデータ]</h1><p>[?descriptionのデータ]</p>」 になる

Page 51: SPARQLを利用した逆マッシュアップ-プログラミングを必要としないアプリ作成方法-

COUNT

•変数のデータ総数を計算

SELECT COUNT(*) WHERE {

?s ?p ?o .}

全トリプル数を計算

Page 52: SPARQLを利用した逆マッシュアップ-プログラミングを必要としないアプリ作成方法-

GROUP BY / HAVING• GROUP BY:指定の変数でデータを集約(グループ化)する

• HAVING:グループ化されたデータの絞込み

PREFIX dc: <http://purl.org/dc/elements/1.1/>

SELECT ?creator ( COUNT( ?uri ) AS ?count ) WHERE {

?uri dc:creator ?creator .}GROUP BY ?creatorORDER BY DESC(?count)HAVING( COUNT(?uri) >= 5 )

COUNT(?uri)の結果が?countに

?creator(作者)で集約

異なる主語が5つ以上ある作者のみ対象

Page 53: SPARQLを利用した逆マッシュアップ-プログラミングを必要としないアプリ作成方法-

FROM

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

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

<http://hoge.jp/defaultgraph> というグラフ名がついているトリプルデータを対象とする

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

SELECT DISTINCT ?uri ?label FROM <http://hoge.jp/graph/01>WHERE {

?uri rdfs:label ?label .}

Page 54: SPARQLを利用した逆マッシュアップ-プログラミングを必要としないアプリ作成方法-

http://hoge.jp/graph/02

http://hoge.jp/graph/01

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

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 “奈良県”

Page 55: SPARQLを利用した逆マッシュアップ-プログラミングを必要としないアプリ作成方法-

データ型のキャスト

• str(?data)• データを文字列に変換

• URI(?data)• データをURIに変換

• xsd:integer(?data)• データを整数値型に変換

• xsd:float(?data) / xsd:double(?data)• データを浮動小数点型に変換

• xsd:dateTime(?data)• データをdateTime型に変換

※ PREFIX xsd: <http://www.w3.org/2001/XMLSchema#> があることが前提

Page 56: SPARQLを利用した逆マッシュアップ-プログラミングを必要としないアプリ作成方法-

複数の人や物を含むフィールドを分割するメリット(1)•検索精度が向上

• 「上田洋」で検索した場合

「上田洋@@@村上晴美@@@辰巳昭治」

「上田洋一」

• 分割すると…

「上田洋」

「村上晴美」

「辰巳昭治」

「上田洋一」

別名が検索される恐れ

完全一致検索のため別名が検索されることはない

Page 57: SPARQLを利用した逆マッシュアップ-プログラミングを必要としないアプリ作成方法-

複数の人や物を含むフィールドを分割するメリット(2)• URIが付与でき、他のデータとつなげられる

ex:武田英明

武田英明dbpedia-ja:武田英明

ndl:武田英明

kasm:武田英明

Wikipedia

Web NDLAuthorities

自身のWebサイト

• 最低限のデータだけを管理して、そのほかのデータは外部に任せられる(データの分散管理)

Linked Open Data のメリット

Page 58: SPARQLを利用した逆マッシュアップ-プログラミングを必要としないアプリ作成方法-

3.SPARQLクエリの例

Page 59: SPARQLを利用した逆マッシュアップ-プログラミングを必要としないアプリ作成方法-

DBpedia Japaneseより

• エンドポイント:http://ja.dbpedia.org/sparql

•鉄道駅の駅名と位置データ(緯度・経度)を取得

PREFIX geo: <http://www.w3.org/2003/01/geo/wgs84_pos#>PREFIX dbpedia-owl: <http://dbpedia.org/ontology/>PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>

select * where {?link a dbpedia-owl:Station; rdfs:label ?title;geo:lat ?lat;geo:long ?long.

}

Page 60: SPARQLを利用した逆マッシュアップ-プログラミングを必要としないアプリ作成方法-

LODチャレンジJapan応募作品のSPARQLエンドポイント試行版より• エンドポイント:http://db.lodc.jp/sparql

•応募作品のグラフURIとタイトル一覧を100件取得

• http://lodc.jp/ にいくつかクエリ例があります

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

SELECT ?id ?title FROM <http://lod.sfc.keio.ac.jp/challenge/entries>WHERE {

?s dcterms:title ?title;rdfs:seeAlso ?id.

}LIMIT 100

Page 61: SPARQLを利用した逆マッシュアップ-プログラミングを必要としないアプリ作成方法-

青空文庫LODより• エンドポイント:http://mdlab.slis.tsukuba.ac.jp/sparql

• 1600年以前に生まれた作者の作品

• http://mdlab.slis.tsukuba.ac.jp/lodc2012/aozoralod/aozoralod_search.htmlにクエリ例がいくつかあります

PREFIX xsd:<http://www.w3.org/2001/XMLSchema#>PREFIX rdf:<http://www.w3.org/1999/02/22-rdf-syntax-ns#>PREFIX rdag2:<http://RDVocab.info/ElementsGr2/>PREFIX dcterms:<http://purl.org/dc/terms/>

select distinct *from <http://purl.org/net/aozora/resources>where{

?title_uri dcterms:creator ?creator_uri;dcterms:title [rdf:value ?title].?creator_uri rdag2:dateOfBirth ?date.filter(?date < "1800-12-31"^^xsd:date)

}

Page 62: SPARQLを利用した逆マッシュアップ-プログラミングを必要としないアプリ作成方法-

京都国際マンガミュージアム書誌情報LODより• エンドポイント:http://mdlab.slis.tsukuba.ac.jp/sparql

• マンガ著作とそのマンガ家を表示するSPARQL文

• http://mdlab.slis.tsukuba.ac.jp/lodc2012/kmm/example.html にクエリ例がいくつかあります

PREFIX rda:<http://rdvocab.info/Elements#>PREFIX rdaG2:<http://rdvocab.info/ElementsGr2#>PREFIX rdf:<http://www.w3.org/1999/02/22-rdf-syntax-ns#>PREFIX kmm:<http://mdlab.tsukuba.ac.jp/lodc2012/kmm/>PREFIX frbrer:<http://iflastandards.info/ns/fr/frbr/frbrer#>

select distinct ?mangalabel ?creator ?namefrom <http://purl.org/net/mdlab/kmm>where {?manga rda:titleProper ?mangalabel;

rdf:type kmm:Wmanga;frbrer:isCreatedByPerson ?creator.

?creator rdaG2:preferredNameForThePerson ?name.}ORDER BY ?manga

Page 63: SPARQLを利用した逆マッシュアップ-プログラミングを必要としないアプリ作成方法-

LODAC Museumより• エンドポイント:http://lod.ac/sparql

•横浜美術館が所蔵している日本画の作品

• http://lod.ac/wiki/SPARQLスニペットにクエリ例がたくさんあります

PREFIX dc: <http://purl.org/dc/terms/>PREFIX dc11: <http://purl.org/dc/elements/1.1/>PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>PREFIX lodac: <http://lod.ac/ns/lodac#>PREFIX lodacid: <http://lod.ac/id/>

SELECT ?work ?title ?creator ?created ?genre ?material ?sizeWHERE {

lodacid:3172 lodac:isProviderOf ?work .?work rdfs:label ?title;dc:references ?workRef .?workRef lodac:genre "日本画"@ja;dc11:creator ?creator;dc:medium ?material;dc:extent ?size .OPTIONAL{ ?workRef dc:created ?created . }

}LIMIT 100

Page 64: SPARQLを利用した逆マッシュアップ-プログラミングを必要としないアプリ作成方法-

Web NDL Authoritiesより• エンドポイント: http://id.ndl.go.jp/auth/ndla?query=

• API:http://id.ndl.go.jp/auth/ndla

• 「夏目漱石」の典拠情報URI、名称実体URI、生年、没年、標目、標目カナヨミを調べる

PREFIX skos: <http://www.w3.org/2004/02/skos/core#>PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>PREFIX rda: <http://RDVocab.info/ElementsGr2/>PREFIX foaf: <http://xmlns.com/foaf/0.1/>PREFIX xl: <http://www.w3.org/2008/05/skos-xl#>PREFIX ndl: <http://ndl.go.jp/dcndl/terms/>

SELECT * WHERE {?uri1 foaf:primaryTopic ?uri2.?uri1 xl:prefLabel [ xl:literalForm ?heading; ndl:transcription ?yomi ].?uri2 rda:dateOfBirth ?birth.?uri2 rda:dateOfDeath ?death.?uri2 foaf:name "夏目漱石".FILTER (lang(?yomi) = 'ja-Kana').

}

Page 65: SPARQLを利用した逆マッシュアップ-プログラミングを必要としないアプリ作成方法-

Europeanaより

• エンドポイント: http://europeana.ontotext.com/sparql

• Europeanaにコンテンツを提供する機関

• http://europeana.ontotext.com/sparql にたくさんクエリ例があります

PREFIX edm: <http://www.europeana.eu/schemas/edm/>

SELECT DISTINCT ?DataProviderWHERE {

?Aggregation edm:dataProvider ?DataProvider .}

Page 66: SPARQLを利用した逆マッシュアップ-プログラミングを必要としないアプリ作成方法-

The British National Bibliographyより• エンドポイント: http://bnb.data.bl.uk/flint-sparql

• API: http://bnb.data.bl.uk/sparql

• ISBN「9780729408745」の本を検索

• http://bnb.data.bl.uk/flint-sparqlにいくつかクエリ例があります

PREFIX bibo: <http://purl.org/ontology/bibo/>PREFIX blt: <http://www.bl.uk/schemas/bibliographic/blterms#>PREFIX dct: <http://purl.org/dc/terms/>

SELECT ?book ?bnb ?title WHERE {?book bibo:isbn13 "9780729408745";

blt:bnb ?bnb;dct:title ?title.

}

Page 67: SPARQLを利用した逆マッシュアップ-プログラミングを必要としないアプリ作成方法-

4.SPARQLで逆マッシュアップ

Page 68: SPARQLを利用した逆マッシュアップ-プログラミングを必要としないアプリ作成方法-

SPARQLで逆マッシュアップ• SPARQLクエリを書くだけでプログラミングなしにいろんなアプリが作れます。

Page 69: SPARQLを利用した逆マッシュアップ-プログラミングを必要としないアプリ作成方法-

SPARQLで逆マッシュアップ

•地図アプリ• leaflet-simple-sparql

• カレンダーアプリ• fullcalendar-sparql-js

•地図とタイムラインビジュアライズアプリ• SPARQL Timeliner

•書籍検索アプリ• booksearch-sparql-js

• データビジュアライズツール• sgvizler

Page 70: SPARQLを利用した逆マッシュアップ-プログラミングを必要としないアプリ作成方法-

地図アプリ• leaflet-simple-sparql

• https://github.com/uedayou/leaflet-simple-sparql

Page 71: SPARQLを利用した逆マッシュアップ-プログラミングを必要としないアプリ作成方法-

使い方:leaflet-simple-sparql• githubのページから「Download ZIP」ボタンを押して、ソースコード一式をダウンロード

• 解凍して「config.js」にエンドポイントとクエリを記述する

• Webサーバに置く

var endpoint = "http://ja.dbpedia.org/sparql";var query = (function () {/* PREFIX geo: <http://www.w3.org/2003/01/geo/wgs84_pos#> PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> select * where {

?link rdfs:label ?title; geo:lat ?lat; geo:long ?long.

} limit 1000 */}).toString().match(/¥n([¥s¥S]*)¥n/)[1];

Page 72: SPARQLを利用した逆マッシュアップ-プログラミングを必要としないアプリ作成方法-

カレンダーアプリ• fullcalendar-sparql-js

• https://github.com/uedayou/fullcalendar-sparql-js

Page 73: SPARQLを利用した逆マッシュアップ-プログラミングを必要としないアプリ作成方法-

使い方:fullcalendar-sparql-js• githubのページから「Download ZIP」ボタンを押して、ソースコード一式をダウンロード

• 解凍して「config.js」にエンドポイントとクエリを記述する

• Webサーバに置く

var endpoint = "http://archive.yafjp.org/test/inspection.php";var query = (function () {/*PREFIX dc: <http://purl.org/dc/elements/1.1/> PREFIX schema: <http://schema.org/> PREFIX event: <http://fp.yafjp.org/terms/event#> SELECT * WHERE{

?uri a event:Event;schema:name ?title;schema:startDate ?start;schema:endDate ?end;dc:description ?description.

} */}).toString().match(/¥n([¥s¥S]*)¥n/)[1];

Page 74: SPARQLを利用した逆マッシュアップ-プログラミングを必要としないアプリ作成方法-

地図とタイムラインのビジュアライズアプリ• SPARQL Timeliner

• http://uedayou.net/SPARQLTimeliner/

Page 75: SPARQLを利用した逆マッシュアップ-プログラミングを必要としないアプリ作成方法-

使い方:SPARQL Timeliner

エンドポイントのURLを入力クエリを入力

• http://uedayou.net/SPARQLTimelinerを開いてエンドポイントURLとクエリを入力して「Load>>」ボタンをクリック

Page 76: SPARQLを利用した逆マッシュアップ-プログラミングを必要としないアプリ作成方法-

使い方:SPARQL Timeliner• 以下のルールに従ってクエリを作成してください

• 詳しい使い方は以下の資料にまとめています• http://www.slideshare.net/uedayou/sparql-timeliner-

28905905

Page 77: SPARQLを利用した逆マッシュアップ-プログラミングを必要としないアプリ作成方法-

書籍検索アプリ• booksearch-sparql-js

• https://github.com/uedayou/booksearch-sparql-js

Page 78: SPARQLを利用した逆マッシュアップ-プログラミングを必要としないアプリ作成方法-

使い方:booksearch-sparql-js• githubのページから「Download ZIP」ボタンを押して、ソースコード一式をダウンロード

• 解凍して「config.js」にエンドポイントとクエリを記述する• ?uriに書籍URI、?title に書籍タイトル、?description に詳細情報が入るようにクエリを記述してください。

• {% QUERY %} が検索文字列に置き換えられます。

• Webサーバに置く// SPARQLエンドポイントURLvar endpoint = "http://lodcu.cs.chubu.ac.jp/SparqlEPCU/api/kyotobook_list";// SPARQLクエリ(検索用) var list_query = (function () {/*select distinct ?uri ?title ?description where {

?uri <http://linkdata.org/property/rdf1s1294i#title> ?title;<http://linkdata.org/property/rdf1s1294i#Summary> ?description.

filter(regex(str(?title), '.*?{% QUERY %}.*?'))} */}).toString().match(/¥n([¥s¥S]*)¥n/)[1];

Page 79: SPARQLを利用した逆マッシュアップ-プログラミングを必要としないアプリ作成方法-

使い方:booksearch-sparql-js• config.js の prop_labelsにURIとそのラベルを設定しておくと、詳細表示の際にURIをラベルに置き換わります。

var prop_labels = {"http://purl.org/dc/terms/title":"タイトル","http://purl.org/dc/elements/1.1/creator":"著者",…

Page 80: SPARQLを利用した逆マッシュアップ-プログラミングを必要としないアプリ作成方法-

データビジュアライズツール• sgvizler

• http://dev.data2000.no/sgvizler/

• ※今回はバージョン0.5を使います

Page 81: SPARQLを利用した逆マッシュアップ-プログラミングを必要としないアプリ作成方法-

使い方:sgvizler• 以下のコードをHTMLファイルに貼り付けて保存してブラウザで開くだけ

<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script><script type="text/javascript" src="https://www.google.com/jsapi"></script><script type="text/javascript" id="sgvzlr_script" src="http://sgvizler.googlecode.com/svn/release/0.5/sgvizler.js"></script><script type="text/javascript"><!-- $(document).ready(sgvizler.go()); --></script><div id=“sgvizler-sample”data-sgvizler-endpoint

="http://lodcu.cs.chubu.ac.jp/SparqlEPCU/api/kyotobook_list"data-sgvizler-query=“SELECT ?year (count(?uri) AS ?noOfUri)WHERE {

?uri <http://linkdata.org/property/rdf1s1294i#Year> ?year.} GROUP BY ?yearORDER BY DESC(?noOfUri)“

data-sgvizler-chart="gBarChart"data-sgvizler-loglevel="2"data-sgvizler-chart-options="title=Number of instances"style="width:2000px; height:2500px;"></div>

• 以下で雛形コードをダウンロードできます

• http://uedayou.net/sparql-examples/sgvizer-example.html

Page 82: SPARQLを利用した逆マッシュアップ-プログラミングを必要としないアプリ作成方法-

使い方:sgvizler

<div id=“sgvizler-sample”data-sgvizler-endpoint= "http://lodcu.cs.chubu.ac.jp/SparqlEPCU/api/kyotobook_list"data-sgvizler-query=“SELECT ?year (count(?uri) AS ?noOfUri)WHERE {

?uri <http://linkdata.org/property/rdf1s1294i#Year> ?year.} GROUP BY ?yearORDER BY DESC(?noOfUri)“

data-sgvizler-chart="gBarChart"data-sgvizler-loglevel="2"data-sgvizler-chart-options=“title=出版年別ランキング"style="width:800px; height:500px;"></div>

クエリを記述

グラフの種類を指定

エンドポイントを指定

グラフタイトルを記述

Idを指定

Page 83: SPARQLを利用した逆マッシュアップ-プログラミングを必要としないアプリ作成方法-

例で利用するデータ

•京都が出てくる本のデータ• 京都岡崎にある図書館で働く司書の方々が中心のグループ「ししょまろはん」が作成・公開する京都が舞台の小説やマンガ・ライトノベル等のデータ• http://libmaro.kyoto.jp/

• 作品の舞台となった京都府内の位置データや司書さんのおすすめ度もデータ化される

• データ:http://linkdata.org/work/rdf1s1294i• エンドポイント(非公式):

http://lodcu.cs.chubu.ac.jp/SparqlEPCU/project.jsp?projectID=kyotobook_list

• DBpedia• Wikipediaのデータ• エンドポイント:http://ja.dbpedia.org/sparql

Page 84: SPARQLを利用した逆マッシュアップ-プログラミングを必要としないアプリ作成方法-

京都が出てくる本のデータ:出版年ランキング

http://uedayou.net/sparql-examples/sgvizler/kyoto-issued-ranking.html

Page 85: SPARQLを利用した逆マッシュアップ-プログラミングを必要としないアプリ作成方法-

京都が出てくる本のデータ:著者トップ10

http://uedayou.net/sparql-examples/sgvizler/kyoto-author-top10.html

Page 86: SPARQLを利用した逆マッシュアップ-プログラミングを必要としないアプリ作成方法-

京都が出てくる本のデータ:おすすめ度ランキング

http://uedayou.net/sparql-examples/sgvizler/kyoto-recommend-ranking.html

Page 87: SPARQLを利用した逆マッシュアップ-プログラミングを必要としないアプリ作成方法-

京都が出てくる本のデータ:出版社別ランキング

http://uedayou.net/sparql-examples/sgvizler/kyoto-publisher-ranking.html

Page 88: SPARQLを利用した逆マッシュアップ-プログラミングを必要としないアプリ作成方法-

京都が出てくる本のデータ:カテゴリ別ランキング

http://uedayou.net/sparql-examples/sgvizler/kyoto-category-ranking.html

Page 89: SPARQLを利用した逆マッシュアップ-プログラミングを必要としないアプリ作成方法-

クエリの書き方(棒グラフ、円グラフの場合)• 「data-sgvizler-chart」には以下を指定

• 円グラフ:「gPieChart」

• 縦棒グラフ:「gColumnChart」

• 横棒グラフ:「gBarChart」

• GROUP BY を使ってデータをグループ化する

• COUNTで出現回数を計算

PREFIX dcterms: <http://purl.org/dc/terms/>

SELECT ?year (COUNT(?uri) AS ?noOfUri)WHERE {

?uri dcterms:issued ?year.}GROUP BY ?yearORDER BY DESC(?noOfUri)

Page 90: SPARQLを利用した逆マッシュアップ-プログラミングを必要としないアプリ作成方法-

クエリの書き方(棒グラフ、円グラフの場合)•実際のデータは…

Page 91: SPARQLを利用した逆マッシュアップ-プログラミングを必要としないアプリ作成方法-

DBpedia:隣接都道府県グラフ

http://uedayou.net/sparql-examples/sgvizler/dbpedia-pref-neighbor.html

Page 92: SPARQLを利用した逆マッシュアップ-プログラミングを必要としないアプリ作成方法-

クエリの書き方(無指向グラフの場合)

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

SELECT DISTINCT ?alabel ?blabel WHERE {?s <http://ja.dbpedia.org/property/隣接都道府県> ?o.?s rdfs:label ?alabel.?o rdfs:label ?blabel.

}

•無指向グラフの場合• 「data-sgvizler-chart」には「gForceGraph」を指定

• SELECTで二つのラベルが入るようにクエリを記述

Page 93: SPARQLを利用した逆マッシュアップ-プログラミングを必要としないアプリ作成方法-

クエリの書き方(無指向グラフの場合)•実際のデータは…

Page 94: SPARQLを利用した逆マッシュアップ-プログラミングを必要としないアプリ作成方法-

SPARQLについて• RDF用クエリ言語SPARQL

• http://www.asahi-net.or.jp/~ax2s-kmtn/internet/rdf/rdf-sparql-query.html

• SPARQL 1.1クエリ言語• http://www.asahi-net.or.jp/~ax2s-kmtn/internet/rdf/REC-

sparql11-query-20130321.html

• LOD連続講義第5回「LODの作り方・使い方」• http://www.slideshare.net/fuyukoitomatsumura/lod5lod

• SPARQLを使い込む• http://www.slideshare.net/yayamamo/5linked-

datayayamamo

• SPARQLで集合論の実装 | クリナ• http://clina.jp/blog/sparql-set-theory

Page 95: SPARQLを利用した逆マッシュアップ-プログラミングを必要としないアプリ作成方法-

SPARQLエンドポイント(1)• DBpedia

• http://dbpedia.org/sparql

• DBpedia Japanese• http://ja.dbpedia.org/sparql

• 日本語Wikipediaオントロジー• http://www.wikipediaontology.org/query/

• データシティ鯖江• http://sparql.odp.jig.jp/sparql.html

• 次世代統計利用システム都道府県・市区町村コード情報• http://statdb.nstac.go.jp/lod/sparql

• Europeana• http://europeana.ontotext.com/sparql

• ヨコハマ・アート・LOD• http://archive.yafjp.org/test/inspection.php

• LODAC Museum• http://lod.ac/sparql

• Web NDL Authorities• http://id.ndl.go.jp/auth/ndla?query=

Page 96: SPARQLを利用した逆マッシュアップ-プログラミングを必要としないアプリ作成方法-

SPARQLエンドポイント(2)• 青空文庫LOD/京都国際マンガミュージアム書誌情報LOD エンドポイント• http://mdlab.slis.tsukuba.ac.jp/sparql

• 青空文庫LOD• http://mdlab.slis.tsukuba.ac.jp/lodc2012/aozoralod/

• 京都国際マンガミュージアム書誌情報LOD• http://mdlab.slis.tsukuba.ac.jp/lodc2012/kmm/

• The British National Bibliography• http://bnb.data.bl.uk/flint-sparql• http://bnb.data.bl.uk/sparql

• Linked Geo Data• http://linkedgeodata.org/sparql

• 気象庁防災情報XML• http://api.aitc.jp/ds/

• LODチャレンジJapan応募作品のエンドポイント試行版• http://db.lodc.jp/sparql

• SparqlEPCU• http://lodcu.cs.chubu.ac.jp/SparqlEPCU/

• SPARQLエンドポイント一覧(the Datahub)• http://datahub.io/ja/dataset?res_format=api%2Fsparql

Page 97: SPARQLを利用した逆マッシュアップ-プログラミングを必要としないアプリ作成方法-

SPARQLを利用するアプリ(1)• leaflet-simple-sparql

• https://github.com/uedayou/leaflet-simple-sparql

• fullcalendar-sparql-js• https://github.com/uedayou/fullcalendar-sparql-js

• SPARQL Timeliner• http://uedayou.net/SPARQLTimeliner/

• お手軽LOD可視化ツール SPARQL Timeliner• http://www.slideshare.net/uedayou/linked-open-

datasparql-timeliner

• SPARQL Timeliner使い方• http://www.slideshare.net/uedayou/sparql-timeliner-

28905905

• booksearch-sparql-js• https://github.com/uedayou/leaflet-simple-sparql

Page 98: SPARQLを利用した逆マッシュアップ-プログラミングを必要としないアプリ作成方法-

SPARQLを利用するアプリ(2)• sgvizler

• http://dev.data2000.no/sgvizler/

• Sgvizler/0.5/DesigningQueries• http://dev.data2000.no/sgvizler/wiki/Sgvizler/0.5/Designin

gQueries

• sgvizler(LODI加藤さんの解説資料)• http://www.slideshare.net/fumihiro/sgvizler

• Sgvizlerによる気象庁提供データの可視化• http://www1.u-netsurf.ne.jp/~s-

koba84/lod/jmaXmlSgvizler.html

Page 99: SPARQLを利用した逆マッシュアップ-プログラミングを必要としないアプリ作成方法-

その他• LinkData

• http://linkdata.org/

•逆マッシュアップの提唱• http://www.slideshare.net/tetsurotoyoda/ss-27381991

• ししょまろはんラボ• http://libmaro.kyoto.jp/

•京都が出てくる本のデータ• http://linkdata.org/work/rdf1s1294i

•京都が出てくる本のデータ非公式SPARQLエンドポイント• http://lodcu.cs.chubu.ac.jp/SparqlEPCU/project.jsp?projectID=

kyotobook_list

• http://lodcu.cs.chubu.ac.jp/SparqlEPCU/api/kyotobook_list (API)