検索
連載

LODとして統計データを扱えると、どうなる?データ資源活用の基礎(4)(2/3 ページ)

Linked Open Dataの形式でデータが扱えると、何ができるようになる? RDFという知られた技術を軸に、多様な可能性が見えてくる。

PC用表示 関連情報
Share
Tweet
LINE
Hatena

RDF統計データの検索

 RDF化された統計データの検索は、前回の記事で紹介したSPARQL参考文献4)で行います。例えば、表1と下記の表2に示す都道府県の人口と面積のデータがRDFの形式で用意されているとします。


表2 関東地方の2009〜2010年の面積(データは国土交通省「全国都道府県面積調」より引用)

 この時、「2010年の各都道府県の人口密度」を求めるクエリ表現は下記のようになります。ここでは、「面積」に相当する測度のURIを「eg:area」としています。

PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX eg: <http://example/properties/>
SELECT DISTINCT ?prefecture_label (?area/?population) As ?population_density
WHERE{
    ?cell1 eg:population ?population.
    ?cell1 eg:refPrefecture ?prefecture_uri.
    ?cell1 eg:refYear eg:year-2010.
    ?cell2 eg:area ?area.
    ?cell2 eg:refPrefecture ?prefecture_uri.
    ?cell2 eg:refYear eg:year-2010.
    ?prefecture_uri rdfs:label ?prefecture_label. 
}
SPARQLクエリ

 SPARQLクエリのWHERE句には、2010年の各都道府県の人口と面積(以下の図2の(3)参照)を抽出するためのグラフパターンを指定しています。具体的には、SPARQLクエリの5〜7行目において2010年の都道府県別の人口(図2の(1)参照)を指定し、8〜10行目において2010年の都道府県別の面積(図2の(2)参照)を指定しています。また、11行目では、都道府県のURIのラベルを抽出しています。SELECT句では、WHERE句で指定されたグラフパターンの中から都道府県のラベルと人口と面積を参照する変数(図2で灰色の長方形で表されている変数)を抽出して、人口と面積から人口密度を算出し、最終的に都道府県のラベルと人口密度を取得したい値として指定しています。


図2 「2010年の各都道府県と人口密度」を表すグラフパターン

 また、外部データであるDBpedia Japanese(参考文献5)と連携した検索も可能です。例えば、下記のクエリ表現により、2010年のある都道府県とその隣接都道府県の人口を取得することができます。

PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX eg: <http://example/properties/>
PREFIX prop-ja: < http://ja.dbpedia.org/property/>
SELECT DISTINCT ?prefecture_label ?population 
                    ?rinsetsu_label ?rinsetsu_population
WHERE{
     ?cell1 eg:population ?population.
     ?cell1 eg:refYear eg:year-2010.
     ?cell1 eg:refPrefecture ?prefecture_uri.
     ?prefecture_uri rdfs:label ?prefecture_label.
     SERVICE <http://ja.dbpedia.org/sparql> {
         SELECT ?prefecture_uri ?rinsetsu_uri
         WHERE { ?prefecture_uri prop-ja:隣接都道府県 ?rinsetsu_uri. }
     }
     ?cell2 eg:population ?rinsetsu_population.
     ?cell2 eg:refYear eg:year-2010.
     ?cell2 eg:refPrefecture ?rinsetsu_uri.
     ?rinsetsu_uri rdfs:label ?rinsetsu_label.
 }
SPARQLクエリ

 他のSPARQLエンドポイントへの検索を行う際は、11〜14行目にあるようにSERVICE句に検索をしたいエンドポイントを指定します。また、SERVICE句内外で同一の変数を用いることで、それらの値を結合することができます。

Copyright © ITmedia, Inc. All Rights Reserved.

ページトップに戻る