SPARQL advanced
山本
泰智 (@yayamamo)
ライフサイエンス統合データベースセンター
実践
SPARQL 5/17 @ 日本オラクル株式会社
山本
泰智
お題
プロパティパス
代入
(BIND/VALUES)
Federated Queries (SERVICE)
CONSTRUCT、ASK、DESCRIBE
(更新系)
実践
SPARQL 5/17 @ 日本オラクル株式会社
山本
泰智
始めに
データサンプルは
Turtle 形式で記述します
スペースの都合上、多くの
prefixを記述していなかったり、
元テキストからの変更を行ったりしています
オープンデータ時代の標準
WEB API SPAQL
実践
SPARQL 5/17 @ 日本オラクル株式会社
山本
泰智
プロパティパス(
p118)
SPARQLならではの強力な検索機能
述語のパターンを柔軟に表現可能
実践
SPARQL 5/17 @ 日本オラクル株式会社
山本
泰智
プロパティパス例
:taro foaf:knows / foaf:interest ?t .
?t ^foaf:interest :taro .
:taro foaf:interest ?t .
:taro foaf:interest | foaf:publications ?t .
:taro foaf:knows+ ?p .
実践
SPARQL 5/17 @ 日本オラクル株式会社
山本
泰智
プロパティパス例
2
?l
?t
p3
p2
p1
?t ^p3 / ^p2 / p1 ?l .
以上のような構造のグラフパターンのうち、
?tと?lの関係だけに焦点をあてて検索する
実践
SPARQL 5/17 @ 日本オラクル株式会社
山本
泰智
代入
: BINDとVALUES(p116)
クエリ中の変数に演算結果や定数値などを代入できる
BINDは一変数に対する一つの値の代入が可能
実践
SPARQL 5/17 @ 日本オラクル株式会社
山本
泰智
BIND
?p * (1 - ?discount) を ?price に代入
SELECT ?title ?price {
?x ns:price ?p .
?x ns:discount ?discount
BIND (?p * (1 - ?discount) AS ?price)
FILTER(?price < 20)
?x dc:title ?title .
}
実践
SPARQL 5/17 @ 日本オラクル株式会社
山本
泰智
VALUES
?book に :book1 と :book3 を順に代入する
SELECT ?book ?title ?price {
VALUES ?book { :book1 :book3 }
?book dc:title ?title ;
ns:price ?price . }
WHEREの外側でも書けるが、対応している実装は少ない
SELECT ?book ?title ?price {
?book dc:title ?title ;
ns:price ?price . }
VALUES (?book ?title)
{ (UNDEF "SPARQL Tutorial")
実践
SPARQL 5/17 @ 日本オラクル株式会社
山本
泰智
Federated Queries: SERVICE(p114)
一つの
SPARQLクエリで複数のSPARQLエンドポイントにク
エリを発行して結果をまとめて取得
従来はプログラムを組んで行う必要があった
分散データベース環境に適した仕組みといえる
実践
SPARQL 5/17 @ 日本オラクル株式会社
山本
泰智
サブクエリと
SERVICE
クエリの中にクエリ
(サブクエリ)を書ける
SERVICEキーワードで問合せ先エンドポイントを指定
SELECT ?p ?o
WHERE {
SERVICE <http://ja.DBpedia.org/sparql>
{ SELECT ?p ?o
WHERE { dbpedia:東京 ?p ?o .}
}
}
実践
SPARQL 5/17 @ 日本オラクル株式会社
山本
泰智
CONSTRUCT(p92)
検索結果とテンプレートに基づく新たな
RDFデータを生成
する
既存
RDFデータに対して、SPARQLが提供する様々な演算を
適用した結果を
RDFとして取得できる
SERVICEと併用することで複数データセットから必要な
データを収集して新たな
RDFデータセットを構築できる
実践
SPARQL 5/17 @ 日本オラクル株式会社
山本
泰智
CONSTRUCTで新たなトリプルを生成
SELECTの代わりにCONSTRUCTを用いて結果をトリプルに
CONSTRUCT {
:taro :knows ?who .
?who foaf:birthday ?birth_date .
}
WHERE {
:taro :likes ?who .
SERVICE <http://DBpedia.org/sparql>
{ SELECT ?who ?birth_date
WHERE {
?who dbpedia-owl:birthDate ?birth_date .
}}}
パターンとテンプレートが同じ場合は短縮表記が可能
実践
SPARQL 5/17 @ 日本オラクル株式会社
山本
泰智
ASK(p93)
パターンにマッチするトリプルの有無をみる
結果は真偽値
実践
SPARQL 5/17 @ 日本オラクル株式会社
山本
泰智
DESCRIBE(p93)
特定のリソースに関する情報を
RDFで取得する
対象リソースが主語か目的語のトリプル一覧が得られるこ
とが多い
リソース
IRIを参照解決可能(dereferenceable)にするた
め利用される
実践
SPARQL 5/17 @ 日本オラクル株式会社
山本
泰智
DESCRIBE例
DESCRIBE <http://ja.dbpedia.org/resource/東京都>
DESCRIBE ?who WHERE { :taro faof:knows ?who .}
実践
SPARQL 5/17 @ 日本オラクル株式会社
山本
泰智
参照解決(
dereferenceable)例
$ curl -stderr /dev/null -LH 'Accept: application/rdf+xml' 'http://ja.dbpedia.org/resource/%E6%9D%B1%E4%BA%AC%E9%83%BD' <?xml version="1.0" encoding="utf-8" ?> <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#" xmlns:owl="http://www.w3.org/2002/07/owl#" xmlns:prop-ja="http://ja.dbpedia.org/property/" xmlns:foaf="http://xmlns.com/foaf/0.1/" xmlns:prov="http://www.w3.org/ns/prov#" xmlns:dbpedia-owl="http://dbpedia.org/ontology/" > <rdf:Description rdf:about="http://ja.dbpedia.org/resource/Colorvariation"> <dbpedia-owl:wikiPageWikiLink rdf:resource="http://ja.dbpedia.org/resource/東京都" /> </rdf:Description> <rdf:Description rdf:about="http://ja.dbpedia.org/resource/KM-MARKIT"> <dbpedia-owl:wikiPageWikiLink rdf:resource="http://ja.dbpedia.org/resource/東京都" /> </rdf:Description> <rdf:Description rdf:about="http://ja.dbpedia.org/resource/Ryoko"> <dbpedia-owl:wikiPageWikiLink rdf:resource="http://ja.dbpedia.org/resource/東京都" /> </rdf:Description> <rdf:Description rdf:about="http://ja.dbpedia.org/resource/おかわりシスターズ"> <dbpedia-owl:wikiPageWikiLink rdf:resource="http://ja.dbpedia.org/resource/東京都" /> </rdf:Description> <rdf:Description rdf:about="http://ja.dbpedia.org/resource/たまらん坂"> <dbpedia-owl:wikiPageWikiLink rdf:resource="http://ja.dbpedia.org/resource/東京都" /> </rdf:Description> <rdf:Description rdf:about="http://ja.dbpedia.org/resource/ふぁみ魂家郎"> <dbpedia-owl:wikiPageWikiLink rdf:resource="http://ja.dbpedia.org/resource/東京都" /> </rdf:Description> ...