[SPARQLアドベントカレンダー]リクエストURLからSPARQLクエリを引っこ抜いてみる

SPARQL Advent Calendar 2015 – Qiita 8日目ですよー

とりあえず9日には日本に帰ってきているらしいので、この記事を予約投稿すれば気兼ねなくWordCamp USに参加できそうです。

2日でまとめてあげるにはネタ切れ感が半端ないので今回はJS・PHPなどのコードに埋め込まれたURLからSPARQLクエリを取り出してみます。

今回使うクエリ

[Polymer]DBpediaのデータをcore-ajaxで表示させてみる覚書」という記事にSPARQLクエリ付きのリクエストを投げているところがありましたので、これを使います。

記事内に書かれているコードはこんな風になってます。
[html]
<core-ajax url="https://ja.dbpedia.org/sparql?default-graph-uri=http%3A%2F%2Fja.dbpedia.org&query=PREFIX+dbpedia-owl%3A+%3Chttp%3A%2F%2Fdbpedia.org%2Fontology%2F%3EPREFIX+rdfs%3A+%3Chttp%3A%2F%2Fwww.w3.org%2F2000%2F01%2Frdf-schema%23%3EPREFIX+dcterms%3A%3Chttp%3A%2F%2Fpurl.org%2Fdc%2Fterms%2F%3Eselect+distinct+*+where+%7B%3Flink+dcterms%3Asubject+%3Chttp%3A%2F%2Fja.dbpedia.org%2Fresource%2FCategory%3A%E8%A5%BF%E5%9B%BD%E4%B8%89%E5%8D%81%E4%B8%89%E6%89%80%3E%3Brdfs%3Acomment+%3Fcont%3Bdbpedia-owl%3Athumbnail+%3Fthumb%3Bdbpedia-owl%3Aaddress+%3Faddress%3Brdfs%3Alabel+%3Fname.%0D%0A%7D&format=application%2Fsparql-results%2Bjson&timeout=0&debug=on" handleAs="json" auto response="{{cont}}"></core-ajax>
[/html]

URLだけ抜き出すとこうですね。
[html]
https://ja.dbpedia.org/sparql?default-graph-uri=http%3A%2F%2Fja.dbpedia.org&query=PREFIX+dbpedia-owl%3A+%3Chttp%3A%2F%2Fdbpedia.org%2Fontology%2F%3EPREFIX+rdfs%3A+%3Chttp%3A%2F%2Fwww.w3.org%2F2000%2F01%2Frdf-schema%23%3EPREFIX+dcterms%3A%3Chttp%3A%2F%2Fpurl.org%2Fdc%2Fterms%2F%3Eselect+distinct+*+where+%7B%3Flink+dcterms%3Asubject+%3Chttp%3A%2F%2Fja.dbpedia.org%2Fresource%2FCategory%3A%E8%A5%BF%E5%9B%BD%E4%B8%89%E5%8D%81%E4%B8%89%E6%89%80%3E%3Brdfs%3Acomment+%3Fcont%3Bdbpedia-owl%3Athumbnail+%3Fthumb%3Bdbpedia-owl%3Aaddress+%3Faddress%3Brdfs%3Alabel+%3Fname.%0D%0A%7D&format=application%2Fsparql-results%2Bjson&timeout=0&debug=on
[/html]

URLの中でSPARQLクエリはUTF-8にエンコードされてしまっているので、そのままでは読めません。読める人はすごい人だと思います。

デコードする

要はエンコードされているならデコードして元に戻せばいいんです。
自分がよく使うのは「Web便利ツール/URLエンコード・デコードフォーム – TAG index Webサイト」というサイトです。

ここに先ほどのURLを入れてデコードさせるとこうなります。

[html]
https://ja.dbpedia.org/sparql?default-graph-uri=https://ja.dbpedia.org&query=PREFIX dbpedia-owl: <https://dbpedia.org/ontology/>PREFIX rdfs: <https://www.w3.org/2000/01/rdf-schema#>PREFIX dcterms:<https://purl.org/dc/terms/>select distinct * where {?link dcterms:subject <https://ja.dbpedia.org/resource/Category:西国三十三所>;rdfs:comment ?cont;dbpedia-owl:thumbnail ?thumb;dbpedia-owl:address ?address;rdfs:label ?name.
}&format=application/sparql-results+json&timeout=0&debug=on
[/html]

SPARQLっぽいもの出てきましたね。

「query=」から「&format」の手前までがSPARQLクエリになっていますので、ここだけ抜き出して読みやすく整形してみましょう。

[sql]
PREFIX dbpedia-owl: <https://dbpedia.org/ontology/>
PREFIX rdfs: <https://www.w3.org/2000/01/rdf-schema#>
PREFIX dcterms:<https://purl.org/dc/terms/>

select distinct * where {
?link dcterms:subject <https://ja.dbpedia.org/resource/Category:西国三十三所>;
rdfs:comment ?cont;
dbpedia-owl:thumbnail ?thumb;
dbpedia-owl:address ?address;
rdfs:label ?name.
}
[/sql]

ちなみにこんな感じのデータが取れます。

と、言うことでSPARQL使ったアプリを見つけて「どんなクエリ書いてるのかなー?」と気になった場合はこんな感じでデコードしてみるといいですよ。

Comment