SPARQL をざっくりと理解した話

技術の話神戸, alexaday2019, SPARQL

KoBuilder Challenge で開発したスキルは、SPARQL でデータを取得してくるものでした。

SPARQL を触ったことがなかった私は、しっかりと理解したわけではなく、ざっくりと理解して、クエリを書くことができました。

今回は、そんなざっくり理解をお助けする情報をご紹介出来たらなと思います。

ファーストステップ

参考にしたのはこちら。KOBE TODAYイベント情報の中の、神戸市Linked Open Data使用方法

ここにサンプルがあります!

PREFIX ic:

select distinct ?s ?name ?datef ?datet ?timef ?timet ?place where {
?s a ic:イベント型.
?s ic:名称/ic:表記 ?name .
?s ic:期間 [ ic:開始日 ?datef; ic:終了日 ?datet; ic:開始時間 ?timef; ic:終了時間 ?timet ] .
?s ic:開催場所/ic:名称/ic:表記 ?place .
FILTER (xsd:dateTime("2017-04-01T00:00:00") <= xsd:dateTime(?datet) && xsd:dateTime(?datet) < xsd:dateTime("2017-05-01T00:00:00")) } LIMIT 100

私はこれを修正して自分のクエリに仕上げました。

SPARQL を簡単に解説

SPARQLクエリ

今回作ったクエリの一例はこちら。

KOBE Today というサイトから、イベント情報を引っ張ってくるクエリです。

具体的には、

2019年1月12日~2019年1月13日に、中央区で開催されているイベントの中で、カテゴリが「学び」となっているイベント

を拾っています。

エリアとカテゴリはここでは具体的な値を入れてますが、実際のスキルでは変数にしていて、音声で拾ってきた情報を差し込んでいます。
開催日程は、今日の日付から考えて、例えば週末なら土日の日付を計算して入れています。

PREFIX

PREFIX ic: <http://imi.go.jp/ns/core/rdf#>
PREFIX dsv: <http://datashelf.jp/ns/dsv#>

いろんな変数の前に、「xsd:」だったり「ic:」だったりが付いています。
これ、実は単に省略してるだけなんです。

PREFIX に書かれたアドレスを引用しているイメージです。

なので、本当だったら、

?s a ic:イベント型.
?s ic:種別 ?category .
?s dsv:対象地域?area .

という箇所は、

?s a http://imi.go.jp/ns/core/rdf#イベント型.
?s http://imi.go.jp/ns/core/rdf#種別 ?category .
?s http://datashelf.jp/ns/dsv#対象地域 ?area .

と書かないといけないということ。
省略しないと、すごく読みにくくなっちゃいますね。。

だから PREFIX を活用しましょう、という理解。

ちなみに、「http://imi.go.jp/ns/core/rdf#イベント型」をクリックすると、元に飛べるので参考にしてください。

SELECT

これは、SQL とほぼ同じで、返却してもらう情報を指定している箇所ですね。

select distinct ?category ?area ?name ?place ?datef ?datet

カテゴリと、エリアと、名前(イベント名)と、開催場所と、日程を返してください、と定義しています。

変数の定義

先ほど、select のところで「?category」などど記述していましたが、これらは、「この変数はこんな名前にするよ!」と定義しなければいけません。それを定義しているのがコチラ。

?s ic:種別 ?category .
?s dsv:対象地域 ?area .
?s ic:名称/ic:表記 ?name .
?s ic:開催場所/ic:名称/ic:表記 ?place .
?s ic:期間 [ ic:開始日 ?datef; ic:終了日 ?datet ] .

「ic:種別」は「?category」という名前にするよ!

という宣言ですね。

FILTER

こちらは、取得するデータを条件絞り込みするためのものです。

FILTER((xsd:dateTime("2019-01-12T00:00:00") <= xsd:dateTime(?datet)
&& xsd:dateTime(?datef) <= xsd:dateTime("2019-01-12T00:00:00")
|| xsd:dateTime("2019-01-13T00:00:00") <= xsd:dateTime(?datet)
&& xsd:dateTime(?datef) <= xsd:dateTime("2019-01-13T00:00:00"))
&& regex(?category,"学び")
&& regex(?area,"中央") ) }

前の4行が開催日程の絞り込み。
後の2つがカテゴリとエリアの絞り込みです。

&& AND や || OR で繋げていけます。

LIMIT

最後にこちらは、データを最大何件返すかというものです。
今回は、10件だけを取ってくるようにしました。

ざっくり理解

ざっくり、分かりましたでしょうか?

変数定義や PREFIX は慣れないかもしれませんが、それ以外は、SQLに近しいもの。

神戸市のイベント以外にも文献検索システムなども SPARQL を利用しているようですので、ぜひ試してみてください^^

 

この記事が気に入ったら
いいね!しよう

最新情報をお届けします

Twitter でaoxaをフォローしよう!