これはCivic Tech Advent Calendar 2013 22日目の記事です.
12月20日に日本政府のデータカタログサイト試行版(data.go.jp)が公開されました.日本では経済産業省が先行して今年1月にOpen DATA METIを公開しており,CKANをベースに作成されていました.data.go.jpにおいてもデータ以下の部分にCKANが採用されている (図1) とのことなので,data.go.jpを例にCKANについて書こうとおもいます.
CKANはOpen Knowledge Foundationが開発している,オープンソースのデータポータルソフトウェアで,世界中の国や自治体,コミュニティ等に採用されています.データをWeb上に公開するだけならば,Web上にファイル置いてデータの紹介ページを作れば良いのですが,データポータルソフトウェアを使うことで,公開者側はデータの公開や管理をより容易にすることができます.また,利用者側は目的のデータを検索・発見しやすくなりますし,可視化等の汎用的な利活用手段を得ることもできます.
データポータルソフトウェアとして重要な機能はいくつかありますが,最も重要なのはデータカタログです.カタログというとまず図書館のOPAC (Online Public Access Catalogの略です!)を思い浮かべるかもしれません.OPACにはその図書館の蔵書について,書籍名,著者名,出版社,分類番号,所蔵場所等,様々な項目が記述されています.利用者はこれらを検索・閲覧することで興味のある本を発見して,請求番号で請求するなり,所蔵場所に行って実際に本を手にとる等ができます.著者名がわかっている場合は著者名で検索しますし,分類から眺めて本を探すといったこともできます.カタログのシステムというのは,物を説明するのにある程度決まった項目があって,それに応じて検索や絞り込みをすることができ,最終的に対象物のがどこにあるか等,物についての情報が得られるシステムと言えます.
データカタログの項目にはデータの名前,作成者,作成日,ファイル形式,ファイルの場所,ライセンス,分類,といったものが挙げられます.データに関するそれらの項目を予め整備しておくことによって,例えば交通関係でファイル形式がxlsのデータ (図2) といった検索を可能にできるわけです.
CKANでは,データセットというのが単位となります.データセットが何を表すかは使用者に依存しています.図3は”交通事故の発生状況について_平成24年度”というデータセットです.図3のように,データセットは複数のリソースを持つことができます.リソースとは実際のデータファイルやAPIといったものを指します (Webでいうリソースとは別概念).これはあるデータセットの提供方法がxlsとcsvとAPI提供のように複数ある可能性があるからです.また,データセットは組織に関連付けることができ,組織毎にアクセスコントロール等を設定することが可能です.データセットを分類するために,グループやタグを付与することもできます.
データセット内の各リソースをクリックすると,リソースの詳細(ファイルサイズ,ライセンス等)を知ることが可能です.特定のファイル形式の場合,リソースのページで汎用の可視化を用いることもできます.残念ながらこの機能はdata.go.jpでは動いていないので,我々が動かしている日本のデータを集めているサイトdata.linkedopendata.jpから,秋田県横手市の避難場所CSVを例として使います.CSVファイルであれば,それをテーブルとして表示してくれますし,データを使ってチャートを描画したり,緯度経度の列を指定することで地図に表示するといった汎用的な可視化が可能です.
データカタログに対してプログラムからアクセスするために,Linked Dataによるアクセスが用意されています.あるデータセットについてのデータをRDF/XMLで欲しい場合は,”Accept: application/rdf+xml”を送るか,URIの最後に.rdfを付けることで取得できます.text/n3でのアクセスもサポートされていますが,現在返ってくるデータには問題があります.以下はcurlでRDF/XMLを取得する例です.
% curl -L -H "Accept: application/rdf+xml" http://www.data.go.jp/data/dataset/npa_07_ds_131126_00000025
<rdf:RDF xmlns:foaf="http://xmlns.com/foaf/0.1/" xmlns:owl="http://www.w3.org/2002/07/owl#" xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:dcat="http://www.w3.org/ns/dcat#" xmlns:dct="http://purl.org/dc/terms/">
<dcat:Dataset rdf:about="http://www.data.go.jp/data/dataset/npa_07_ds_131126_00000025">
<owl:sameAs rdf:resource="urn:uuid:fe6c67a1-e990-4346-8324-b7b1d3fc71e8"></owl:sameAs>
<dct:description></dct:description>
<dcat:keyword>交通</dcat:keyword>
<dcat:keyword>交通事故</dcat:keyword>
<dcat:keyword>統計</dcat:keyword>
<foaf:homepage rdf:resource="http://www.data.go.jp/data/dataset/npa_07_ds_131126_00000025"></foaf:homepage>
<rdfs:label>npa_07_ds_131126_00000025</rdfs:label>
<dct:identifier>npa_07_ds_131126_00000025</dct:identifier>
<dct:title>交通事故の発生状況について_平成24年度</dct:title>
<dcat:distribution>
<dcat:Distribution>
<dcat:accessURL rdf:resource="http://www.e-stat.go.jp/SG1/estat/Xlsdl.do?sinfid=000019681521"></dcat:accessURL>
<dct:format>
<dct:IMT>
<rdf:value>XLS</rdf:value>
<rdfs:label>XLS</rdfs:label>
</dct:IMT>
</dct:format>
<dct:title>平成24年中の交通事故の発生状況</dct:title>
</dcat:Distribution>
</dcat:distribution>
......
ここでは他のデータカタログと交換できるように,様々な共通語彙が用いられていますが,一つ大きな役割を果たしているのがData Catalog Vocabulary (DCAT)です.これはその名の通りデータカタログソフトウェア間での相互運用性のために設計されている語彙で,W3Cにて策定中です (2013年12月22日現在 Proposed Recommendation).すでに様々な実装があります.
一方で,カタログの検索やデータ管理を行う等の用途のために,APIも用意されています.結果はJSON(あるいはJSONP)で取得できます.以下はコードで検索する例です.[“result”][“results”]の中に検索でヒットしたデータセットが入ってきます.
% curl 'http://www.data.go.jp/data/api/3/action/package_search?q=コード'
{"help": "
........
"success": true,
"result": {"count": 198, "sort": "score desc, metadata_modified desc", "facets": {},
"results": [
{"owner_org": "c34d69d9-f213-49eb-90de-f1e7ffc8639d",
"maintainer": null,
"relationships_as_object": [],
"private": false,
"maintainer_email": null,
"num_tags": 2,
"id": "132c3f2e-ec18-425f-b605-554aa02d57a9",
"metadata_created": "2013-12-16T15:35:55.794289",
"metadata_modified": "2013-12-16T15:35:55.794289",
"author": "\u9632\u885b\u7701",
"author_email": null,
"state": "active",
"version": null,
"license_id": "notspecified",
"type": "dataset",
"resources": [
{"resource_group_id": "373299af-7f32-46f3-9edb-96e786c99c24",
"cache_last_updated": null,
"revision_timestamp": "2013-12-16T15:35:55.794289",
"webstore_last_updated": null,
"file_size": "974K",
"id": "dfe58d2a-4b38-4c84-b146-755c5eaec5ef",
"size": null,
"copyright": "",
"state": "active",
"resource_license_id": "CC-BY",
"hash": "",
"description": "\uff1c\u5f53\u8a72\u30b3\u30fc\u30c9\u306e\u30b3\u30fc\u30c9\u4f53\u7cfb\uff1e\n\u6841\u6570\uff1a\uff18\u6841\u3000\u2460-\u2461\u2462-\u2463\u2464\u2465\u2466\u2467\u3000\u3000\u3000\u3000\u3000\u3000\u3000\n\u610f\u5473\uff1a\u2460\u767b\u9332\u7a2e\u985e\u5225\u3000\u2461\u2462\u767b\u9332\u90e8\u5c40\u3000\u2463\u304b\u3089\u2467\u9023\u756a\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\n\u4ed6\u306e\u30b3\u30fc\u30c9\u306e\u5229\u7528\uff1a\u7121\u3057",
"format": "XLS",
"tracking_summary": {"total": 0, "recent": 0},
"mimetype_inner": null,
"mimetype": null,
"cache_url": null,
"name": "\u6709\u8cc7\u683c\u8005\u540d\u7c3f\uff0f\u5317\u6d77\u9053\u9632\u885b\u5c40\uff0f\u5de5\u4e8b",
"language": "\u65e5\u672c\u8a9e",
"created": "2013-12-17T00:35:55.865272",
"url": "http://www.mod.go.jp/epco/dfaa/news/kensetsu/kouji/01_hokkaidou_kouji.xls",
"webstore_url": null,
"last_modified": "2013-04-01T00:00:00",
"position": 0,
"revision_id": "db0d2755-bfa3-47cc-abe2-3e470b599c6b",
"resource_type": null,
"supplementation": ""},
........
APIについてはThe CKAN APIを参照して下さい.また,各言語毎にCKAN API用のライブラリが用意されていることが多いですが,更新されずに古いAPIを使っていることもあるので注意してください.CKAN2.xは様々な機能が追加されているため,APIのバージョンが3になっています.バージョン1及び2は互換性のために残してありますが,CKAN2.xの新しい機能に対応していません.
今回はカタログの機能を中心に書きましたが,CKANには他にデータストアの機能や様々な拡張があります.よりCKANについて知りたい場合は,CKAN’s Documentationやgithubのwikiを参照してください (英語).また,CKANについて日本語で情報共有するためにFacebookグループを用意しています.ここではCKANの日本語訳等の活動をしているので,ご興味のある方は参加して頂ければとおもいます.