dbpedia.orgの内容をopenstreetmapに表示する実験.
本当はリアルタイムでdbpedia.org endpointに問い合わせられるといいのだけど,
何となく負荷が気になるので
今回は問い合わせ結果をSPARQL Result XML Formatに保存し,
それをopenstreetmapに表示する.
まずはdbpedia.orgへの問い合わせ.
SPARQLクエリは以下のとおり.
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX wgs84_pos: <http://www.w3.org/2003/01/geo/wgs84_pos#>
PREFIX dbpedia-owl: <http://dbpedia.org/ontology/>
PREFIX yago: <http://dbpedia.org/class/yago/>
select ?lat ?lon ?title ?description ?icon ?iconSize ?iconOffset where{
?s rdf:type yago:PrefecturesOfJapan .
?s rdfs:label ?title .
?s dbpedia-owl:abstract ?description .
?s wgs84_pos:lat ?lat .
?s wgs84_pos:long ?lon .
filter (lang(?title)="en") .
filter (lang(?description)="en").
optional {
?s <urn:hoge> ?icon .
?s <urn:hoge2> ?iconSize .
?s <urn:hoge3> ?iconOffset .
}
}
日本の都道府県を検索しその概要と緯度経度情報を取得するクエリである.
この結果をOpenLayers.Layer.Text()を使って表示する.
OPTIONALはかなり強引・・・
先のクエリをdbpedia.orgのendpointに投げると
こんな感じのSPARQL Result XML Formatが帰ってくる.
これを
先のポストで作成したXSLでTSVに変換し,
OpenLayers.Layer.Text()で読み込めば完成.
XSLTはphpで実行している.
うん.いい感じ.
北海道がないのはクエリにある
?s rdf:type yago:PrefecturesOfJapan .
の所為.
なんでかな.