lodを使ってみよう!

78
LODを使ってみよう! 上田 洋 特定非営利活動法人リンクト・オープン・データ・イニシアティブ 33WordBench大阪 「WordPress + LODで作るWebアプリケーションハッカソン」 2014.09.20

Upload: hiroshi-ueda

Post on 23-Dec-2014

1.635 views

Category:

Engineering


2 download

DESCRIPTION

第33回WordBench大阪 「WordPress + LODで作るWebアプリケーションハッカソン」 2014.09.20

TRANSCRIPT

Page 1: LODを使ってみよう!

LODを使ってみよう!

上田洋

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

第33回WordBench大阪 「WordPress + LODで作るWebアプリケーションハッカソン」

2014.09.20

Page 2: LODを使ってみよう!

自己紹介

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

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

• 関西支部支部長補佐

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

Page 3: LODを使ってみよう!

オープンデータとは?

Page 4: LODを使ってみよう!

これらを許可するライセンス(オープンライセンス)を持つデータ

オープンデータ

Open Definition

http://opendatahandbook.org/ja/what-is-open-data/

利用できる、そしてアクセスできるデータ全体を丸ごと使えないといけないし、再作成に必要以上のコストがかかっ

てはいけない。望ましいのは、インターネット経由でダウンロードできるようにすることだ。また、データは使いやすく変更可能な形式で存在しなければならない。

再利用と再配布ができる

データを提供するにあたって、再利用や再配布を許可しなければならない。また、他のデータセットと組み合わせて使うことも許可しなければならない。

誰でも使える

誰もが利用、再利用、再配布をできなければならない。データの使い道、人種、所属団体などによる差別をしてはいけない。たとえば「非営利目的での利用に限る」などという制限をすると商用での利用を制限してしまうし「教育目的での利用に限る」などの制限も許されない。

Page 5: LODを使ってみよう!

クリエイティブコモンズライセンスでのオープンライセンス

CC BY表示

CC0権利放棄

CC BY-SA表示-継承

CC BY-NC表示-非営利

CC BY-ND表示-改変禁止

CC BY-NC-ND表示-非営利-改変禁止

全ての権利を主張 CC BY-NC-SA表示-非営利-継承

Page 6: LODを使ってみよう!

http://fukuno.jig.jp/756

Page 7: LODを使ってみよう!

5つ星オープンデータ星が多いほど良いオープンデータ

オープンライセンスでデータ公開

構造化されたデータを公開

ソフトウェアに依存しないファイル形式で公開

他のデータとリンクするためのURIを使う

外部のデータとリンクをつける

LODLinked Open Data

http://5stardata.info/ja/

Page 8: LODを使ってみよう!

Linked Open Data(LOD)

とても良いオープンデータ

Page 9: LODを使ってみよう!

リンクして何が嬉しい?

Page 10: LODを使ってみよう!

World Wide Web(文書のWeb)

メリット:リンクによりたくさんのページ(情報)を簡単に発見できる

Page 11: LODを使ってみよう!

ID DATA

ID DATA

ID DATAID DATA

ID DATA

データのWeb=Linked Open Data(LOD)

メリット:リンクによりたくさんのデータを簡単に発見できるデータを分散して管理共通の標準フォーマットでデータが簡単に取得できる

同じデータ

データの別名

作者の連絡先

同じデータ

関連データ

データの作者

データの画像

Page 12: LODを使ってみよう!

LODクラウド(2007)

http://lod-cloud.net/versions/2007-05-01/lod-cloud.png

Page 13: LODを使ってみよう!

LODクラウド(2011)

http://lod-cloud.net/versions/2011-09-19/lod-cloud.png

Page 14: LODを使ってみよう!

LODクラウド(2014)

http://data.dws.informatik.uni-mannheim.de/lodcloud/2014/

Page 15: LODを使ってみよう!

日本のLODクラウド(2014)

http://linkedopendata.jp/?p=486

Page 16: LODを使ってみよう!

具体的にLinked Open Dataとは?

Page 17: LODを使ってみよう!

Linked Dataとは

• ティム・バーナーズ=リーのLinked Data4原則1. あらゆる「もの」の名前にURI(Uniform Resource Identifier)をつけましょう

2. HTTPプロトコルのURI(http://hoge.net/hoge)で、 「もの」についてのデータにアクセスできるようにしましょう

3. URIでアクセスしたデータは標準的なフォーマット(RDFを推奨)で提供しましょう

4. 他のデータを見つけやすくするために他のデータとURIでリンクしましょう

オープンライセンスで提供されるLinked Data

Linked Open Data(LOD)

http://www.w3.org/DesignIssues/LinkedData.html

Page 18: LODを使ってみよう!

RDFとは(Resource Description Framework)

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

主語(Subject)

目的語(Object)

述語(Predicate)

大阪府 和歌山県隣の県

例えば…

Page 19: LODを使ってみよう!

もっと詳しくLODを知りたい!

• 「Linked Data –Webをグローバルなデータ空間にする仕組み–」

• トム・ヒース他著武田英明監訳

• 3,200円(税別)

Page 20: LODを使ってみよう!

SPARQLとは?

Page 21: LODを使ってみよう!

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 22: LODを使ってみよう!

SPARQLで提供されるデータデータ種別 Web API

Wikipedia DBPediaWikipediaオントロジー

行政データ データシティ鯖江都道府県・市区町村コード情報Open Data METI大阪市オープンデータ(非公式)

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

博物館データ EuropeanaLODAC Museum

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

地理データ Linked Geo DataLODAC Location

気象データ 気象庁XML用API

生物種データ LODAC Species

この他にも多くのデータがSPARQLで提供されています。

Page 23: LODを使ってみよう!

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

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

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

Page 24: LODを使ってみよう!

SPARQLの検索結果取得JSONの場合• http://db.lodc.jp/sparql?query={UTF8でURLエンコードされたSPARQLクエリ}&format=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" }

},...

Page 25: LODを使ってみよう!

SPARQLの検索結果取得XMLの場合• http://db.lodc.jp/sparql?query={UTF8でURLエンコードされたSPARQLクエリ}&format=xml

<sparql xmlns="http://www.w3.org/2005/sparql-results#" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.w3.org/2001/sw/DataAccess/rf1/result2.xsd">

<head><variable name="link"/> <variable name="title"/> <variable name="lat"/> <variable name="long"/>

</head><results distinct="false" ordered="true">

<result><binding name="link"><uri>http://linkdata.org/resource/rdf1s933i#8542</uri></binding><binding name="title"><literal xml:lang="ja">福島消防署上福島出張所</literal></binding> <binding name="lat">

<literal datatype="http://www.w3.org/2001/XMLSchema#float">34.6936</literal></binding><binding name="long">

<literal datatype="http://www.w3.org/2001/XMLSchema#float">135.482</literal></binding>

</result>...

Page 26: LODを使ってみよう!

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

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

SPARQLクエリ

検索結果

Page 27: LODを使ってみよう!

SPARQLの書き方

Page 28: LODを使ってみよう!

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

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

• URI(IRI) : <http://ja.dbpedia.org/resource/東京都>• 「<」「>」で挟まれた文字列• 人・もの・出来事などを指し示すID• 指定したURIを同じURIを含むデータが検索される

• リテラル : “東京” , “100” , “2014-09-20” …• 「”」で挟まれた文字列• データそのもの(string, integer, float他)• 指定した文字列と同じ文字列を含むデータが検索される• 目的語以外は指定できない

Page 29: LODを使ってみよう!

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 30: LODを使ってみよう!

主語 述語 目的語

<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: LODを使ってみよう!

主語 述語 目的語

<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 32: LODを使ってみよう!

主語 述語 目的語

<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 33: LODを使ってみよう!

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 34: LODを使ってみよう!

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

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

SELECT ?s ?p ?o WHERE {

?s ?p ?o.}

Page 35: LODを使ってみよう!

SELECT

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

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

SELECT ?s ?p ?o WHERE {

?s ?p ?o.}

Page 36: LODを使ってみよう!

SELECT

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

SELECT * WHERE {

?s ?p ?o .}

SELECT ?s ?p ?o WHERE {

?s ?p ?o.}

=

Page 37: LODを使ってみよう!

DISTINCT

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

SELECT DISTINCT ?s ?p ?o WHERE {

?s ?p ?o.}

Page 38: LODを使ってみよう!

WHERE

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

SELECT ?s ?p ?o WHERE {

?s ?p ?o .}

Page 39: LODを使ってみよう!

基本構造

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

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

SELECT ?s ?p ?o WHERE {

?s ?p ?o .}

主語の指定

述語の指定

目的語の指定

必ずピリオドで終わる

Page 40: LODを使ってみよう!

?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 41: LODを使ってみよう!

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

Page 42: 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 43: LODを使ってみよう!

?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 44: LODを使ってみよう!

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

Page 45: LODを使ってみよう!

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

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

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

主語の指定

述語の指定

目的語の指定

Page 46: LODを使ってみよう!

?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 47: LODを使ってみよう!

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

Page 48: 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 49: LODを使ってみよう!

主語 述語 目的語

<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 50: LODを使ってみよう!

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

Page 51: 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 52: 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://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 53: LODを使ってみよう!

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 54: 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 55: LODを使ってみよう!

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

Page 56: LODを使ってみよう!

(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 57: LODを使ってみよう!

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

Page 58: LODを使ってみよう!

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

LIMIT 検索結果の上限を設定

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

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

OPTIONAL OPTIONAL内は任意検索

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

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

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

CONCAT 文字列の結合が可能

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

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

COUNT 検索件数を表示

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

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

各機能の詳しいの説明はSlideShareの資料を参照してください

Page 59: LODを使ってみよう!

LOD関連のイベントのお知らせ

Page 60: LODを使ってみよう!

LODチャレンジJapan2014開催決定!

•日本最大級のオープンデータコンテスト

•前年度の賞金総額150万円以上

• アプリ、データセット、アイデアなどを募集

• 10月1日よりエントリー受付開始

http://lod.sfc.keio.ac.jp/challenge2014/

Page 61: LODを使ってみよう!

LODチャレンジ2014キックオフ“オープンデータ・サミット”を開催

•国内オープンデータのキーパーソンによる講演会

• 9月27日慶應義塾大学三田キャンパスで開催

http://peatix.com/event/50519

Page 62: LODを使ってみよう!

大阪ではLODハッカソンを開催!

• 10月13日梅田のグランフロント大阪でハッカソンを開催

• LODをもう少し知りたい、今日の作ったものをもっと作りこみたい、LODチャレンジに応募したい方、参加お待ちしています!

https://www.facebook.com/events/274650762736519/

Page 63: LODを使ってみよう!

SPARQLの便利な検索機能

Page 64: 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 65: 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 66: 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 67: 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 68: 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 69: 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 70: 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 71: 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 72: 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 73: LODを使ってみよう!

COUNT

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

SELECT COUNT(*) WHERE {

?s ?p ?o .}

全トリプル数を計算

Page 74: 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 75: LODを使ってみよう!

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 76: LODを使ってみよう!

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

FROM

Page 77: 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 78: 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”];}