次世代統計利用システムで、都道府県・市区町村コード情報が LOD(Linked Open Data)で提供されるようになったので使ってみた。使い方を少しメモしておく。

まず、SPARQLエンドポイントが用意されているので、そのページに行くと下の図のように画面でも検索できるようになっているので、この画面でSPARQLを試してみた。

image

?s ?p ?o というのは、?s(Subject 主語)、?p(Property 述語)、?o(Object 目的語)で、tuple ステートメントというようです。そのままで、Show results inline: にチェックをして、「Send Query」ボタンをクリックすると以下のように情報が表示される。

image

次に市区町村コードから市町村名等が表示されるか試してみた。?s を埼玉県川越市の市区町村コード11201に以下のように置き換えてクエリーしてみた。なお、sac:C11201は、<http://statdb.nstac.go.jp/lod/sac/C11201>の省略形であり、Prefex が登録されているので簡単に記述可能である。sac:C11201 の代わりに、<http://statdb.nstac.go.jp/lod/sac/C11201>と入力しても同じ結果になる。

SELECT * WHERE { 
  GRAPH ?g { sac:C11201 ?p ?o . }
}

クエリーの結果は、プロパティとしては、rdf:type と owl:sameAs のみを持つていて、owl:sameAs プロパティの結果として期間付き標準地域コード sac:C11201-20030401 が返されるだけで、市町村名等は取得できない。ここで取得した期間付き標準地域コードのプロパティを取得する必要がある。そこでクエリーを次のように変更して実行してみた。

SELECT * WHERE { 
  GRAPH ?g { sac:C11201 ?p ?o . ?o ?a ?b. }
}

こうするとマニュアルにある期限付き標準地域コード・クラスのプリパティの一覧が表示され、その中に川越市という名前も表示される。プロパティのうち、dcterms:valid は廃止年月日のプロパティなので、現時点では値がない。その場合には、RDBのようにNULLとかが表示されるのではなく、プロパティには何も表示されない。それでは市町村名だけを表示するのはどうしたらいいかというとプロパティを以下のように市町村の日本語表記である rdfs:label@js 等に指定すればよい。

SELECT ?b WHERE { 
  GRAPH ?g { sac:C11201 owl:sameAs ?o . ?o rdfs:label ?b. } FILTER( lang(?b) = "ja")
}

なお、マニュアルでは、日本語表記のプロパティは、rdfs:label@ja となっているが、そのままでは動作せずFILTER を使う必要があるようだ。

次に、埼玉県川越市の市区町村コードを取得してみる。一番簡単なクエリーは以下になる。

SELECT * WHERE { 
  GRAPH ?g { ?s ?p "川越市" . }
}

これで、?s に川越市の期間付き標準地域コードの一覧が表示されるので、一応 11201 ということがわかる。もう少し厳密に現在の川越市の市区町村コードをクエリーで得る例は以下のとおり。

SELECT * WHERE { 
  GRAPH ?g { ?s ?p ?o . ?s rdf:type sacs:CurrentStandardAreaCode. ?o rdfs:label "川越市". }
}

次に埼玉県の現在の市町村の一覧を取得してみる。そのコード例は以下のとおり。

SELECT ?s ?name WHERE { 
  GRAPH ?g { ?s ?p ?o . ?s rdf:type sacs:CurrentStandardAreaCode. {{
?o dcterms:isPartOf sac:C11000-19700401.
}UNION{
?o dcterms:isPartOf ?district.
?district dcterms:isPartOf sac:C11000-19700401.
}} ?o sacs:administrativeClass ?ad.
?o rdfs:label ?name. } FILTER( lang(?name) = "ja")
FILTER( ?ad = sacs:DesignatedCity || ?ad = sacs:CoreCity || ?ad = sacs:SpecialCity || ?ad = sacs:City || ?ad = sacs:Town || ?ad = sacs:Village )
}

埼玉県の1970年4月1日以降のどの日の市町村一覧とか市町村がどのように合併をしてきたか等をSPARQLを使えば取得可能である。そういう点では、LODは非常に便利である。自分の場合は、市町村の合併等を考慮して統計数字を比較したいと思っているので、都道府県・市区町村コード情報の LODを使いたいと思っている。

しかし、普通の人がSPARQLを使うのは、はっきりいって難しすぎるし、少し複雑なことをしようと思えばSPARQLがどんどん複雑になってしまう。今のSPARQLだとオープンデータの専門家のおもちゃにすぎないと思う。オープンデータでLODの評価が非常に高くなっているが、それは一部の専門家の評価であって、普通の人が使えるようなソフトウェアを作らなければLODの評価は過大評価だと思う。