sparqlでマッシュアップ-lod活用のための技術紹介-

101
SPARQLでマッシュアップ -LOD活用のための技術紹介- 上田 洋 LODチャレンジJapan実行委員会 特定非営利活動法人リンクト・オープン・データ・イニシアティブ 4Linked Open Data ハッカソン関西 with LODC2014 × UDC2014 2014.12.7

Upload: hiroshi-ueda

Post on 06-Jul-2015

1.521 views

Category:

Technology


5 download

DESCRIPTION

第4回 Linked Open Data ハッカソン関西 with LODC2014 × UDC2014 2014.12.7

TRANSCRIPT

Page 1: SPARQLでマッシュアップ-LOD活用のための技術紹介-

SPARQLでマッシュアップ-LOD活用のための技術紹介-

上田洋

LODチャレンジJapan実行委員会

特定非営利活動法人リンクト・オープン・データ・イニシアティブ

第4回 Linked Open Data ハッカソン関西 with LODC2014 × UDC20142014.12.7

Page 2: SPARQLでマッシュアップ-LOD活用のための技術紹介-

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

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

• 関西支部支部長補佐

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

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

Page 3: SPARQLでマッシュアップ-LOD活用のための技術紹介-

SPARQL(SPARQL Protocol and RDF Query Language)

Page 4: SPARQLでマッシュアップ-LOD活用のための技術紹介-

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 5: SPARQLでマッシュアップ-LOD活用のための技術紹介-

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 6: SPARQLでマッシュアップ-LOD活用のための技術紹介-

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

http://lodc.jp

Page 7: SPARQLでマッシュアップ-LOD活用のための技術紹介-

http://lodc.jp/#dataset

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

Page 8: SPARQLでマッシュアップ-LOD活用のための技術紹介-
Page 9: SPARQLでマッシュアップ-LOD活用のための技術紹介-
Page 10: SPARQLでマッシュアップ-LOD活用のための技術紹介-

SPARQLエンドポイント提供サービス“SparqlEPCU”

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

Page 11: SPARQLでマッシュアップ-LOD活用のための技術紹介-

SparqlEPCU• 中部大学年岡研究室が開発・運営するWebサービス

• 自分のデータで簡単にSPARQLエンドポイント(SPARQLで検索可能なWeb API)が設置可能

• Linked Open DataチャレンジJapan 2012 アプリケーション部門最優秀賞受賞作品

http://lod.sfc.keio.ac.jp/blog/?p=1071

Page 12: SPARQLでマッシュアップ-LOD活用のための技術紹介-

Twitter/Facebookでログイン

Projectページで

「プロジェクトの作成」ボタンをクリック

プロジェクトID(半角英数)タイトルを入力して「作成」

「データ登録」タブからファイルをアップロード

(ttl,rdf/xml, nt対応)して「登録」

完成!ProjectAPI URLから

SPARQLが使えます!

1 2

3

4

Page 13: SPARQLでマッシュアップ-LOD活用のための技術紹介-

詳しくはこちらの資料を

http://www.slideshare.net/siramatu/sparqlmashup2

Page 14: SPARQLでマッシュアップ-LOD活用のための技術紹介-

LOD推奨形式RDFとは(Resource Description Framework)

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

主語(Subject)

目的語(Object)

述語(Predicate)

東京都 神奈川県隣の県

例えば…

Page 15: SPARQLでマッシュアップ-LOD活用のための技術紹介-

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

主語 述語 目的語

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: SPARQLでマッシュアップ-LOD活用のための技術紹介-

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: SPARQLでマッシュアップ-LOD活用のための技術紹介-
Page 18: SPARQLでマッシュアップ-LOD活用のための技術紹介-

今日一日でできるSPARQLアプリ

Page 19: SPARQLでマッシュアップ-LOD活用のための技術紹介-

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

•全てWebブラウザがあれば動作します• Webサーバは必要ありません!

Page 20: SPARQLでマッシュアップ-LOD活用のための技術紹介-

SPARQLでマッシュアップ

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

• クイズアプリ• SlickQuiz-SPARQL

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

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

• 地図で空白地域ビジュアライズアプリ• ○○危険地帯

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

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

Page 21: SPARQLでマッシュアップ-LOD活用のための技術紹介-

地図アプリ• leaflet-simple-sparql

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

Page 22: SPARQLでマッシュアップ-LOD活用のための技術紹介-

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

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

• index.htmlをブラウザで開く

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 23: SPARQLでマッシュアップ-LOD活用のための技術紹介-

クイズアプリ• SlickQuiz-SPARQL

• https://github.com/uedayou/SlickQuiz-SPARQL

Page 24: SPARQLでマッシュアップ-LOD活用のための技術紹介-

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

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

• index.htmlをブラウザで開くvar endpoint = "http://lodcu.cs.chubu.ac.jp/SparqlEPCU/api/yokohama_quiz";var query = (function () {/*

select distinct * where { ?uri<http://linkdata.org/property/rdf1s560i#question> ?question;

<http://linkdata.org/property/rdf1s560i#choice1> ?choise1;<http://linkdata.org/property/rdf1s560i#choice2> ?choise2;<http://linkdata.org/property/rdf1s560i#choice3> ?choise3;<http://linkdata.org/property/rdf1s560i#choice4> ?choise4;<http://linkdata.org/property/rdf1s560i#answer> ?answer_no;<http://linkdata.org/property/rdf1s560i#kaisetsu> ?kaisetsu.bind(concat('</p>解説:',str(?kaisetsu),'</p>') as ?correct)bind(concat('</p>解説:',str(?kaisetsu),'</p>') as ?incorrect) } ORDER BY

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

Page 25: SPARQLでマッシュアップ-LOD活用のための技術紹介-

SlickQuiz-SPARQL用のデータの作り方• データは簡単に作成できます。

• LinkData.org の「横浜検定問題・解答集」と同じようにデータを作るだけ• http://linkdata.org/work/rdf1s560i

データを作って「ご当地検定アプリ」作りませんか?

Page 26: SPARQLでマッシュアップ-LOD活用のための技術紹介-

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

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

Page 27: SPARQLでマッシュアップ-LOD活用のための技術紹介-

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

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

• index.htmlをブラウザで開く

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 28: SPARQLでマッシュアップ-LOD活用のための技術紹介-

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

• http://uedayou.net/SPARQLTimeliner/

Page 29: SPARQLでマッシュアップ-LOD活用のための技術紹介-

使い方:SPARQL Timeliner

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

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

Page 30: SPARQLでマッシュアップ-LOD活用のための技術紹介-

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

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

28905905

Page 31: SPARQLでマッシュアップ-LOD活用のための技術紹介-

トイレ危険地帯

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

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

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

Page 32: SPARQLでマッシュアップ-LOD活用のための技術紹介-

○○危険地帯

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

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

Page 33: SPARQLでマッシュアップ-LOD活用のための技術紹介-

大阪市版トイレ危険地帯

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

Page 34: SPARQLでマッシュアップ-LOD活用のための技術紹介-

○○危険地帯の使い方

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

2. ZIPファイルを解凍

3. config.js の書き換える

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

SPARQLを書きます

Page 35: SPARQLでマッシュアップ-LOD活用のための技術紹介-

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 36: SPARQLでマッシュアップ-LOD活用のための技術紹介-

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

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

Page 37: SPARQLでマッシュアップ-LOD活用のための技術紹介-

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

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

Page 38: SPARQLでマッシュアップ-LOD活用のための技術紹介-

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

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

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

• index.htmlをブラウザで開く// 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 39: SPARQLでマッシュアップ-LOD活用のための技術紹介-

使い方: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 40: SPARQLでマッシュアップ-LOD活用のための技術紹介-

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

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

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

Page 41: SPARQLでマッシュアップ-LOD活用のための技術紹介-

使い方: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-mashup/sgvizler-sample.html

Page 42: SPARQLでマッシュアップ-LOD活用のための技術紹介-

使い方: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 43: SPARQLでマッシュアップ-LOD活用のための技術紹介-

例で利用するデータ

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

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

• LODチャレンジJapan2014データセット部門応募作品

• LODチャレンジ2011-2013応募作品メタデータ

どちらもLODチャレンジ応募作品のSPARQLエンドポイント(試行版)

で検索できます

Page 44: SPARQLでマッシュアップ-LOD活用のための技術紹介-

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

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

Page 45: SPARQLでマッシュアップ-LOD活用のための技術紹介-

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

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

Page 46: SPARQLでマッシュアップ-LOD活用のための技術紹介-

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

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

Page 47: SPARQLでマッシュアップ-LOD活用のための技術紹介-

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

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

Page 48: SPARQLでマッシュアップ-LOD活用のための技術紹介-

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

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

Page 49: SPARQLでマッシュアップ-LOD活用のための技術紹介-

クエリの書き方(棒グラフ、円グラフの場合)• 「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 50: SPARQLでマッシュアップ-LOD活用のための技術紹介-

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

Page 51: SPARQLでマッシュアップ-LOD活用のための技術紹介-

LODチャレンジ応募作品の関連グラフ

http://uedayou.net/sparql-mashup/sgvizler/lodc-network.html

Page 52: SPARQLでマッシュアップ-LOD活用のための技術紹介-

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

select distinct ?title1 ?title2from <http://lod.sfc.keio.ac.jp/challenge/entries>where {?s <http://purl.org/dc/terms/relation> ?o.?s <http://purl.org/dc/terms/title> ?title1.?o <http://purl.org/dc/terms/title> ?title2.}

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

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

Page 53: SPARQLでマッシュアップ-LOD活用のための技術紹介-

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

Page 54: SPARQLでマッシュアップ-LOD活用のための技術紹介-

ハンズオンSPARQLの書き方

事前にブラウザに

http://uedayou.net/sparql-mashup/を開いておいてください

Page 55: SPARQLでマッシュアップ-LOD活用のための技術紹介-

URI(IRI)とリテラル

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

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

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

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

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

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

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

Page 56: SPARQLでマッシュアップ-LOD活用のための技術紹介-

主語 述語 目的語

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

“神奈川県”

RDFのデータベース

Page 57: SPARQLでマッシュアップ-LOD活用のための技術紹介-

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 58: SPARQLでマッシュアップ-LOD活用のための技術紹介-

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

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

SELECT ?s ?p ?o WHERE {

?s ?p ?o.}

Page 59: SPARQLでマッシュアップ-LOD活用のための技術紹介-

SELECT

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

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

SELECT ?s ?p ?o WHERE {

?s ?p ?o.}

Page 60: SPARQLでマッシュアップ-LOD活用のための技術紹介-

SELECT

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

SELECT * WHERE {

?s ?p ?o .}

SELECT ?s ?p ?o WHERE {

?s ?p ?o.}

=

Page 61: SPARQLでマッシュアップ-LOD活用のための技術紹介-

WHERE

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

SELECT ?s ?p ?o WHERE {

?s ?p ?o .}

Page 62: SPARQLでマッシュアップ-LOD活用のための技術紹介-

基本構造

• トリプルパターンを指定するために、3つの変数またはURI、リテラル(目的語のみ)を1セットで書く• 変数:?で始まる文字列、任意のURIまたはリテラルが入る

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

SELECT ?s ?p ?o WHERE {

?s ?p ?o .}

主語の指定

述語の指定

目的語の指定

必ずピリオドで終わる

Page 63: SPARQLでマッシュアップ-LOD活用のための技術紹介-

変数とトリプルパターン• 変数: ?s , ?p , ?o, ?label, ?comment …

• 「?」で始まる文字列

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

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

?id rdfs:label ?label.

トリプルパターン

id label

dbpedia:東京都

"東京都"

dbpedia:大阪府

“大阪府”

dbpedia:京都府

“京都府”

rdfs:labelは <http://www.w3.org/2000/01/ rdf-schema#label> というURIで目的語がラベルであることを意味する

Page 64: SPARQLでマッシュアップ-LOD活用のための技術紹介-

?id rdfs:comment ?comment.

トリプルパターン

rdfs:commentは <http://www.w3.org/2000/01/ rdf-schema#comment> というURIで目的語がコメントであることを意味する

Page 65: SPARQLでマッシュアップ-LOD活用のための技術紹介-

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

トリプルパターン

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

URIが同一のデータは同じ行にまとまって出力されます

Page 66: SPARQLでマッシュアップ-LOD活用のための技術紹介-

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

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

SELECT ?s ?p ?o WHERE {

?s ?p ?o.}

Page 67: SPARQLでマッシュアップ-LOD活用のための技術紹介-

?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 68: SPARQLでマッシュアップ-LOD活用のための技術紹介-

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

Page 69: SPARQLでマッシュアップ-LOD活用のための技術紹介-

(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 70: SPARQLでマッシュアップ-LOD活用のための技術紹介-

?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 71: SPARQLでマッシュアップ-LOD活用のための技術紹介-

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

Page 72: SPARQLでマッシュアップ-LOD活用のための技術紹介-

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

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

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

主語の指定

述語の指定

目的語の指定

Page 73: SPARQLでマッシュアップ-LOD活用のための技術紹介-

?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 74: SPARQLでマッシュアップ-LOD活用のための技術紹介-

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

Page 75: SPARQLでマッシュアップ-LOD活用のための技術紹介-

(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 76: SPARQLでマッシュアップ-LOD活用のための技術紹介-

主語 述語 目的語

<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 77: SPARQLでマッシュアップ-LOD活用のための技術紹介-

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

Page 78: SPARQLでマッシュアップ-LOD活用のための技術紹介-

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 79: SPARQLでマッシュアップ-LOD活用のための技術紹介-

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 80: SPARQLでマッシュアップ-LOD活用のための技術紹介-

(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 81: SPARQLでマッシュアップ-LOD活用のための技術紹介-

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

Page 82: SPARQLでマッシュアップ-LOD活用のための技術紹介-

(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 83: SPARQLでマッシュアップ-LOD活用のための技術紹介-

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

Page 84: SPARQLでマッシュアップ-LOD活用のための技術紹介-

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

DISTINCT 重複する検索結果を除外

LIMIT 検索結果の上限を設定

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

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

OPTIONAL OPTIONAL内は任意検索

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

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

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

CONCAT 文字列の結合が可能

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

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

COUNT 検索件数を表示

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

HAVING グループ化した変数の絞込みが可能各機能の詳しいの説明はSlideShareの資料を参照してください

Page 85: SPARQLでマッシュアップ-LOD活用のための技術紹介-

SPARQLの便利な検索機能

Page 86: SPARQLでマッシュアップ-LOD活用のための技術紹介-

DISTINCT

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

SELECT DISTINCT ?s ?p ?o WHERE {

?s ?p ?o.}

Page 87: SPARQLでマッシュアップ-LOD活用のための技術紹介-

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 88: SPARQLでマッシュアップ-LOD活用のための技術紹介-

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 89: SPARQLでマッシュアップ-LOD活用のための技術紹介-

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 90: SPARQLでマッシュアップ-LOD活用のための技術紹介-

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 91: SPARQLでマッシュアップ-LOD活用のための技術紹介-

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 92: SPARQLでマッシュアップ-LOD活用のための技術紹介-

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 93: SPARQLでマッシュアップ-LOD活用のための技術紹介-

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 94: SPARQLでマッシュアップ-LOD活用のための技術紹介-

REPLACE

•文字列の置き換えが可能

•書き方

REPLACE( 置換対象の変数 , 置換対象の文字列 , 置換後の文字列)

• BIND を使うと、置き換わった文字列を変数に設定できる

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( REPLACE( ?description , “京都” , “大阪” ) AS ?text )

}

Page 95: SPARQLでマッシュアップ-LOD活用のための技術紹介-

SUBSTR

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

•書き方

SUBSTR( 切出対象の変数 , 開始位置 , 切り出し文字数 )

• BIND を使うと、置き換わった文字列を変数に設定できる

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( SUBSTR( ?description , 10 , 5 ) AS ?text )

}

Page 96: SPARQLでマッシュアップ-LOD活用のための技術紹介-

COUNT

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

SELECT COUNT(*) WHERE {

?s ?p ?o .}

全トリプル数を計算

Page 97: SPARQLでマッシュアップ-LOD活用のための技術紹介-

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 98: SPARQLでマッシュアップ-LOD活用のための技術紹介-

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 99: SPARQLでマッシュアップ-LOD活用のための技術紹介-

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 100: SPARQLでマッシュアップ-LOD活用のための技術紹介-

データ型のキャスト

• 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 101: SPARQLでマッシュアップ-LOD活用のための技術紹介-

エンドポイントの結果(JSON)をプログラムで取得するには?

{ "head": { "vars": ["link", "title", "lat", "long" ] },"results": {

"bindings": [{ "link": { "type": "uri",

"value": "http://linkdata.org/resource/rdf1s933i#8542" },"title": { "type": "literal", "xml:lang": "ja",

"value": "福島消防署上福島出張所"},"lat": { "type": "typed-literal",

"datatype": "http://www.w3.org/2001/XMLSchema#float","value": "34.6936" },

"long": { "type": "typed-literal","datatype": "http://www.w3.org/2001/XMLSchema#float","value": "135.482" }

var results = json.results.bindings;for ( var i=0 ; i < results.length ; i++ ) {

var result = results[i];var title = result.title.value;

}

$results = $json[“results”][“bindings”];foreach ( $results as $result ) {

$title = $result[“title”][“value”];}

Javascript PHP