LoginSignup
79
66

More than 5 years have passed since last update.

よく使うSPARQLサンプル集

Last updated at Posted at 2014-04-16

SPARQL Endpointを目の前にしたときに、いったい何を問合せたらいいのだろう?という場合に使えるSPARQLをまとめてみました。

とりあえずトリプルが何件入ってるか知りたい
SELECT count(*) WHERE { ?s ?p ?o }

とりあえずどんなデータが入っているか見たい
SELECT * WHERE { GRAPH ?g { ?s ?p ?o }} LIMIT 500

グラフ毎の件数を集計して見たい
SELECT ?g count(?g) WHERE {GRAPH ?g {?s ?p ?o}} GROUP BY ?g

あるグラフ配下のデータだけを見たい(何のグラフがあるかは一つ上↑のSPAQLで)
SELECT * WHERE { GRAPH <あるグラフ> {?s ?p ?o }}

aomoriが含まれるデータを探したい(主語から探す)
SELECT * { GRAPH ?g { ?s ?p ?o . FILTER( contains(str(?s),'aomori') ) }}

titleが含まれるデータを探したい(述語から探す)
SELECT * { GRAPH ?g { ?s ?p ?o . FILTER( contains(str(?p),'title') ) }}

青森県が含まれるデータを探したい(目的語から探す)
SELECT * { GRAPH ?g { ?s ?p ?o . FILTER( contains(str(?o),'青森県') ) }}

グラフ完全一致でデータを探す
SELECT * { GRAPH <グラフ> {?s ?p ?o}}

主語完全一致でデータを探す
SELECT * { GRAPH ?g {<主語> ?p ?o}}

述語完全一致でデータを探す
SELECT * { GRAPH ?g {?s <述語> ?o}}

目的語完全一致でデータを探す
SELECT * { GRAPH ?g {?s ?p '目的語'}}

目的語完全一致でデータを探す(言語指定あり)
SELECT * { GRAPH ?g {?s ?p '目的語'@ja}}

以下のサイトでなどでお試しできます。(負荷にご注意)
DBpedia - SPARQL Endpoint
DBpedia japanese - SPARQL Endpoint

↓2014/8/6追加

述語の種類を列挙する。どんな述語(?p)があるのか。
SELECT DISTINCT ?p {?s ?p ?o} ORDER BY ?p

LEFT JOINみたいなことをする。 下記例ではtitleにtelとaddressを連結。
SELECT * {
GRAPH ?g {?s <title> ?title}
.OPTIONAL {?s <tel> ?tel}
.OPTIONAL {?s <address> ?address}
}

↓2014/10/22追加

GROUP CONCATする。1レコード中に複数出現する項目(tag)を1つにまとめて1レコードに。
SELECT ?title GROUP_CONCAT(?tag ; separator=' ') AS ?tags
{
?url <title> ?title
.?url <tag> ?tag
}
LIMIT 100

複数のGRAPHを指定してSELECTする。
SELECT *
FROM <GRAPH_SONO_1>
FROM <GRAPH_SONO_2>
FROM <GRAPH_SONO_3>
{ ?s ?p ?o }
LIMIT 100

79
66
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
79
66