(2014-05-19追記) 5/16に無事本家サイトが復活したようです.また関連ニュース記事を追加しています.

4/9に datago.jpというサイトを立ち上げました.おかげ様で色々反響がありました.データカタログサイトの問題やdatago.jpについてはdatago.jpについてや下記のメディア等の記事を読んでいただくとして,ここには事の顛末を記録として書いておきます.

私がデータカタログサイト(試行版)(以下,本家サイト)が動いていないことを知ったのは4/2のことでした.その後twitterで植原先生が本家サイトで公開されていたメタデータのCSVを再公開してくださっていることを知ったので,それを使ってデータカタログ部分だけでもクローンサイトを作れないかと考えました.本家サイトのデータカタログ部分が使用しているのはCKANというFLOSSであり,適切なダンプデータがあれば簡単にクローンを作れるからです.データのライセンスもCC BYなので問題ありません.

ところが,ここで公開されているCSVは,私が知る限りCKANが直接吐くことができるファイルではありませんでした.今は植原先生がデータの出処について追記してくださっていますが,このファイルがどう生成されていたのか知りたいところです.この時点で少しやる気がなくなったのですが,翌日4/3にLODI内とOKFJ側双方から,”このデータを使ってサイトを作れないか”という話が出てきました.そこで,その時点で検討していたこと,標準のデータではないので一件ずつ処理してAPI経由で入れないといけないのですぐできるわけではないという旨を説明をした上で,サイトの準備を始めました.

API経由でインポートできるように処理を書いてデータ投入をしましたが,データとしては以下の問題がありました.

  1. 不足部分: 組織データ,リソースのID
  2. CKAN標準でない項目名: publisher, frequency_of_update, release_day, language, copyright, supplementation
  3. タグ: 空のタグや,API経由でインポートできない文字(具体的には%)
  4. 謎文字: ^\-

1の不足部分について,組織データはInternet Archiveに保存されていたページからデータを作りました.また,リソースのIDは知る方法がなかったので諦めました.このためリソースのURIも異なるものになるので,今後本家サイトが復活したときに,例えばリダイレクトして本家サイトに流すという対処はできません.

2のCKAN標準でない項目名について,publisherはmaintainerと解釈しました.また,frequency_of_updateとrelease_dayはextrasに入れてあります.language, copyright, supplementationは入れていません.これらもextrasにいれればよかったのかもしれません.

3のタグと4の謎文字はインポート時に発生していた問題ですが,単純に問題文字を削除しました.具体的には2020年30%というタグがあったのですが,これは2020年30として入れてあります.タグの文字列として記号を受け付けないのはもしかしたらAPI側のバグかもしれません.

知ったのが4/2で公開日が4/9なので,1週間作業していたことになりますが,殆どはデータインポートに費やした時間です.実際には公開した時点では処理が終わっておらず,一旦処理が終了したのは4/10でした.その後うまくデータインポートできていなかった分を追加するなど,まだデータ作業は行っています.

クローンサイトを作るにあたって,我々が有志で行っているData for Japanに入れるという案もありました.Data for Japanは日本のオープンデータのハブという名目で行っているので,本家サイトのデータを入れることは検討すべきことでした.しかし,ここまで述べたようにもとにしたデータが不完全だったことで,今後本家サイトが復活したときにそちらのデータを入れるのにまた苦労をすることが容易に想像できたので,別の一時的なサイトを立ち上げるという判断をしました.

そもそもの話をするとData for Japanに本家サイトのデータを予め取り込んでおけば良かったのですが,旧サイト(http://data.linkedopendata.jp)からData for Japanへの移行を行ったのがそもそも3月末でしたので,そこまでできなかったというのが現状でした.CKANには他のCKANからカタログデータを取り込む仕組みがいくつかあるため,取り込む事自体はそんなに難しくないはずですので,本家サイトが復活したらその方向も考えたいと思っています.

サイト作り自体にはそんなに時間を掛けていません.ソースコードはhttps://github.com/fumi/ckanext-fake-datagojpに置いてあります.少し悲しいのはソース見て何か言ってくる人がいないことですね.こういうところで協働できる人が増えてきて欲しいなとおもいます.

なお,今回の件を受けて,データカタログサイトは行政側がやるのではなく,民間側がやるべきという意見を受けるときがありますが,行政側がデータカタログサイトを運営することには明確な意味があります.それはそのサイトが一次ソースになるということです.当然,民間側でもそのミラーサイト等を作ることはできますが,それは二次ソースでしかありません.

追記: 4/8は裏でHeartbleed対応というイベントもありました.

Tags: , ,

WikidataWikimediaのプロジェクトの一つで,人間と機械が同じように参照・編集可能なフリーな知識ベースです.誰もが簡単に構造化データを作れます.WikidataはすでにWikipediaの言語間リンク等に利用されています.

技術的に見ると,WikidataはLinked Dataを基盤としています.まず,http://ja.wikipedia.org/wiki/森薫のWikidataページはhttp://www.wikidata.org/wiki/Q433255になります.DBpediaと異なり,一つのアイテム毎にユニークなid (Qの後のXXXXX)があり,それに多言語のラベルが付くようになっています.WikipediaとWikidataの対応関係を知るためにはリゾルバがあります.リゾルバのURI設計はhttp://www.wikidata.org/wiki/Special:ItemByTitle/{site}/{title}です.森薫の例だと,http://www.wikidata.org/wiki/Special:ItemByTitle/jawiki/森薫となります.

一方で,アイテム自体を識別するためのURIはhttp://www.wikidata.org/entity/Q{id}となっています.Q433255を識別するためのURIはhttp://www.wikidata.org/entity/Q433255です.Linked DataとしてのURI設計は以下の通りになります.connegはhttp,https両方受け付けるみたい.

  • Item URI: http://www.wikidata.org/entity/Q{id}
  • データURI: http://www.wikidata.org/wiki/Special:EntityData/Q{id}
  • HTMLページ URI: http://www.wikidata.org/wiki/Q{id}
  • JSON URI: http://www.wikidata.org/wiki/Special:EntityData/Q{id}.json
  • Turtle URI: http://www.wikidata.org/wiki/Special:EntityData/Q{id}.ttl
  • RDF/XML URI: http://www.wikidata.org/wiki/Special:EntityData/Q{id}.rdf
  • N-Triples URI: http://www.wikidata.org/wiki/Special:EntityData/Q{id}.nt
$ curl -LH 'Accept: text/turtle' http://www.wikidata.org/entity/Q433255
@prefix data: <http://www.wikidata.org/wiki/Special:EntityData/> .
@prefix schema: <http://schema.org/> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
@prefix entity: <http://www.wikidata.org/entity/> .
@prefix cc: <http://creativecommons.org/ns#> .
@prefix wikibase: <http://www.wikidata.org/ontology#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix skos: <http://www.w3.org/2004/02/skos/core#> .

data:Q433255
  schema:version 103373967 ;
  schema:dateModified "2014-01-19T13:20:45Z"^^xsd:dateTime ;
  a schema:Dataset ;
  schema:about entity:Q433255 ;
  cc:license <http://creativecommons.org/publicdomain/zero/1.0/> .

entity:Q433255
  a wikibase:Item ;
rdfs:label "森薰"@zh-hans, "森薰"@zh-hant, "森薰"@zh-hk, "森薰"@zh-cn, "森薰"@zh-sg, "森薰"@zh-tw, "Kaoru Mori"@de, "森薫"@ja, "Kaoru Mori"@fr, "Мори, Каору"@ru, "모리 카오루"@ko, "Kaoru Mori"@en, "Kaoru Mori"@sv, "Kaoru Mori"@nl, "Kaoru Mori"@es, "Kaoru Mori"@pl, "森薰,"@zh ;
  skos:prefLabel "森薰"@zh-hans, "森薰"@zh-hant, "森薰"@zh-hk, "森薰"@zh-cn, "森薰"@zh-sg, "森薰"@zh-tw, "Kaoru Mori"@de, "森薫"@ja, "Kaoru Mori"@fr, "Мори, Каору"@ru, "모리 카오루"@ko, "Kaoru Mori"@en, "Kaoru Mori"@sv, "Kaoru Mori"@nl, "Kaoru Mori"@es, "Kaoru Mori"@pl, "森薰,"@zh ;
  schema:name "森薰"@zh-hans, "森薰"@zh-hant, "森薰"@zh-hk, "森薰"@zh-cn, "森薰"@zh-sg, "森薰"@zh-tw, "Kaoru Mori"@de, "森薫"@ja, "Kaoru Mori"@fr, "Мори, Каору"@ru, "모리 카오루"@ko, "Kaoru Mori"@en, "Kaoru Mori"@sv, "Kaoru Mori"@nl, "Kaoru Mori"@es, "Kaoru Mori"@pl, "森薰,"@zh ;
  schema:description "japanische Manga-Zeichnerin"@de, "japońska mangaka"@pl ;
  skos:altLabel "森薫"@zh, "Mori Kaoru"@de, "森薫"@de, "県文緒"@ja, "森薫"@fr, "Mori Kaoru"@fr, "Fumio Agata"@fr, "Agata Fumio"@fr, "県文緒"@fr, "Мори Каору"@ru, "Каору Мори"@ru, "모리 가오루"@ko, "Mori"@sv .

<http://zh.wikipedia.org/wiki/%E6%A3%AE%E8%96%B0>
  a schema:Article ;
  schema:about entity:Q433255 ;
  schema:inLanguage "zh" .
....

参考

Tags: , , , ,

これは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について   data.go.jp
図1: data.go.jpのCKAN部分

CKANOpen Knowledge Foundationが開発している,オープンソースのデータポータルソフトウェアで,世界中の国や自治体,コミュニティ等に採用されています.データをWeb上に公開するだけならば,Web上にファイル置いてデータの紹介ページを作れば良いのですが,データポータルソフトウェアを使うことで,公開者側はデータの公開や管理をより容易にすることができます.また,利用者側は目的のデータを検索・発見しやすくなりますし,可視化等の汎用的な利活用手段を得ることもできます.

データポータルソフトウェアとして重要な機能はいくつかありますが,最も重要なのはデータカタログです.カタログというとまず図書館のOPAC (Online Public Access Catalogの略です!)を思い浮かべるかもしれません.OPACにはその図書館の蔵書について,書籍名,著者名,出版社,分類番号,所蔵場所等,様々な項目が記述されています.利用者はこれらを検索・閲覧することで興味のある本を発見して,請求番号で請求するなり,所蔵場所に行って実際に本を手にとる等ができます.著者名がわかっている場合は著者名で検索しますし,分類から眺めて本を探すといったこともできます.カタログのシステムというのは,物を説明するのにある程度決まった項目があって,それに応じて検索や絞り込みをすることができ,最終的に対象物のがどこにあるか等,物についての情報が得られるシステムと言えます.

データカタログの項目にはデータの名前,作成者,作成日,ファイル形式,ファイルの場所,ライセンス,分類,といったものが挙げられます.データに関するそれらの項目を予め整備しておくことによって,例えば交通関係でファイル形式がxlsのデータ (図2) といった検索を可能にできるわけです.

CKANについて   data.go.jp
図2: 交通関係でxlsファイルのデータ

CKANでは,データセットというのが単位となります.データセットが何を表すかは使用者に依存しています.図3は”交通事故の発生状況について_平成24年度”というデータセットです.図3のように,データセットは複数のリソースを持つことができます.リソースとは実際のデータファイルやAPIといったものを指します (Webでいうリソースとは別概念).これはあるデータセットの提供方法がxlsとcsvとAPI提供のように複数ある可能性があるからです.また,データセットは組織に関連付けることができ,組織毎にアクセスコントロール等を設定することが可能です.データセットを分類するために,グループやタグを付与することもできます.

CKANについて   data.go.jp
図3: データセット例

データセット内の各リソースをクリックすると,リソースの詳細(ファイルサイズ,ライセンス等)を知ることが可能です.特定のファイル形式の場合,リソースのページで汎用の可視化を用いることもできます.残念ながらこの機能はdata.go.jpでは動いていないので,我々が動かしている日本のデータを集めているサイトdata.linkedopendata.jpから,秋田県横手市の避難場所CSVを例として使います.CSVファイルであれば,それをテーブルとして表示してくれますし,データを使ってチャートを描画したり,緯度経度の列を指定することで地図に表示するといった汎用的な可視化が可能です.

CKANについて   data.go.jp
図4: 横手市避難場所CSV
CKANについて   data.go.jp
図5: 横手市避難場所CSV – Map

データカタログに対してプログラムからアクセスするために,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 Documentationgithubのwikiを参照してください (英語).また,CKANについて日本語で情報共有するためにFacebookグループを用意しています.ここではCKANの日本語訳等の活動をしているので,ご興味のある方は参加して頂ければとおもいます.

Tags: , , , ,

AIツール入門講座に合わせて,人工知能学会の私のブックマークにLinked Open Dataというテーマで書きました.紙の前にWeb版がすでに公開されています (Vol.28.No.5 (2013/09) Linked Open Data
).紙面の都合もあり全部をカバーできているわけではないですが,最初の取っ掛かりとしては良いのではないかとおもいます.

この投稿にタグはありません。

最近自分が何をしているかはここよりslideshareをみたほうが良いという感じになってしまっています.先日2013年7月5日に人工知能学会主催で行ったセミナーがこれまでのまとめのような内容なのでここでも共有しておきます.Linked Open Dataについて一から知りたい人向けです.

Tags: , ,

Facebook上では数ヶ月前から公開していたのですが,ここに書いていなかったので.本当はdebやrpmパッケージ作ると良いとはおもうのですがいまのところgithubからのインストールになります.まだ色々と書きかけで検証不足のところもありますので是非コメントよろしくお願いします.

Tags: