SPARQLのクエリ学習とDBpediaを理解するため思いつきでクエリを作っていく。
今回はうまさぎっしりスタンプラリーのマッピングで出会った新潟のゆるキャラたちをDBpediaから取得してみる。
先に結論を行ってしまうと全然ちゃんと取得できなかったので新潟県のゆるキャラ一覧がほしいという目的を持った人はここでお別れとなります。。。
まずはDBpedia日本語版のトップページに例示されているクエリをそのまま実行してどのような結果が返ってくるか確認してみる。
<クエリ>
SELECT DISTINCT ?mascot ?name ?areaname
WHERE {
?areamascots skos:broader <http://ja.dbpedia.org/resource/Category:地域限定のマスコット> ;
rdfs:label ?areaname .
?mascot dbpedia-owl:wikiPageWikiLink ?areamascots ;
rdfs:label ?name.
}
※例示されているクエリではSELECTに?areanameを指定していないが今回は確認のために表示。
<結果>
クエリのタイトル通り、地域別にゆるキャラが取得できていそう。
次に地域だけでなく都道府県も取得するよう試みる。地域別のクエリで取得した地域別のゆるキャラを主語(?mascot)とする全ての述語(?p)、目的語(?o)を取得。そしてその目的語(?o)のうち述語に都道府県名を持っている目的語(?pref)を取得する。
<クエリ>
SELECT DISTINCT ?mascot ?name ?o ?pref
WHERE {
?areamascots skos:broader <http://ja.dbpedia.org/resource/Category:地域限定のマスコット> ;
rdfs:label ?areaname .
?mascot dbpedia-owl:wikiPageWikiLink ?areamascots ;
rdfs:label ?name.
?mascot ?p ?o .
?o prop-ja:都道府県名 ?pref .
}
このあたりはWikipediaのデータの問題なのでこのまま進むことにする。
新潟県のゆるキャラ
あとは都道府県を新潟県に絞り込んで新潟県のゆるキャラのみを取得する。先程の都道府県別のクエリから都道府県名のrdfs:labelを取得し、FILTERを使用して新潟県に絞り込む。
<クエリ>
SELECT DISTINCT ?mascot ?name ?o ?pref_n
WHERE {
?areamascots skos:broader <http://ja.dbpedia.org/resource/Category:地域限定のマスコット> ;
rdfs:label ?areaname .
?mascot dbpedia-owl:wikiPageWikiLink ?areamascots ;
rdfs:label ?name.
?mascot ?p ?o .
?o prop-ja:都道府県名 ?pref ;
rdfs:label ?pref_n .
FILTER CONTAINS(?pref_n,"新潟県") .
}
少ない...
しかもつば九郎とかくまモンとか混ざってる...
スタンプラリーのスタンプになっているキャラクターですら33あったからプラスで余計なデータが紛れ込んでくるかと思っていたらそもそもWikipediaに登録されていない様子。
人を取得する場合は出身地などを述語に指定すれば一意に都道府県を取得できるがゆるキャラの場合はそれに該当するような述語がなく苦戦。クエリ自体もまだ改善の余地がありそうな気がするのでそのうち再挑戦。