以前のOS Linked Dataについての記事.

郵便番号EC2A 4JEのデータを見ると,その郵便番号がある行政区画へのリンクがあります.

EC2A 4JEの行政区画
EC2A 4JEの行政区画

Ward: Haggerstonを見てみると,行政区画についてのデータとその境界線の表示をしてくれます.

Haggerston
Haggerston
% curl -LH 'Accept: text/turtle' http://data.ordnancesurvey.co.uk/id/7000000000011110
.......
<http://data.ordnancesurvey.co.uk/id/7000000000011110>
        a           <http://data.ordnancesurvey.co.uk/ontology/admingeo/LondonBoroughWard> ;
        rdfs:label  "Haggerston" ;
        <http://data.ordnancesurvey.co.uk/ontology/admingeo/gssCode>
                "E05000239" ;
        <http://data.ordnancesurvey.co.uk/ontology/admingeo/hasAreaCode>
                "LBW" ;
        <http://data.ordnancesurvey.co.uk/ontology/admingeo/hasUnitID>
                "11110" ;
        <http://data.ordnancesurvey.co.uk/ontology/admingeo/inCounty>
                <http://data.ordnancesurvey.co.uk/id/7000000000041441> ;
        <http://data.ordnancesurvey.co.uk/ontology/admingeo/inDistrict>
                <http://data.ordnancesurvey.co.uk/id/7000000000011199> ;
        <http://data.ordnancesurvey.co.uk/ontology/admingeo/inEuropeanRegion>
                <http://data.ordnancesurvey.co.uk/id/7000000000041428> ;
        <http://data.ordnancesurvey.co.uk/ontology/geometry/extent>
                <http://data.ordnancesurvey.co.uk/id/geometry/11110-241> ;
        <http://data.ordnancesurvey.co.uk/ontology/spatialrelations/easting>
                533455.5 ;
        <http://data.ordnancesurvey.co.uk/ontology/spatialrelations/northing>
                "182927"^^<http://www.w3.org/2001/XMLSchema#decimal> ;
        <http://data.ordnancesurvey.co.uk/ontology/spatialrelations/touches>
                <http://data.ordnancesurvey.co.uk/id/7000000000011193> , <http://data.ordnancesurvey.co.uk/id/7000000000041879> , <http://data.ordnancesurvey.co.uk/id/7000000000010856> , <http://data.ordnancesurvey.co.uk/id/7000000000010854> , <http://data.ordnancesurvey.co.uk/id/7000000000010855> , <http://data.ordnancesurvey.co.uk/id/7000000000011112> , <http://data.ordnancesurvey.co.uk/id/7000000000011196> , <http://data.ordnancesurvey.co.uk/id/7000000000011111> ;
        <http://data.ordnancesurvey.co.uk/ontology/spatialrelations/within>
                <http://data.ordnancesurvey.co.uk/id/7000000000011199> ;
        <http://www.georss.org/georss/point>
                "51.529489 -0.07749" ;
        <http://www.w3.org/2002/07/owl#sameAs>
                <http://statistics.data.gov.uk/id/statistical-geography/E05000239> ;
        <http://www.w3.org/2003/01/geo/wgs84_pos#lat>
                51.529489 ;
        <http://www.w3.org/2003/01/geo/wgs84_pos#long>
                -0.07749 ;
        <http://www.w3.org/2004/02/skos/core#prefLabel>
                "Haggerston" .

データで使われている語彙のURIが長いので以下のprefixで省略して書きます.

@prefix geometry: <http://data.ordnancesurvey.co.uk/ontology/geometry/>
@prefix spatialrelations: <http://data.ordnancesurvey.co.uk/ontology/spatialrelations/>
@prefix admingeo: <http://data.ordnancesurvey.co.uk/ontology/admingeo/>

境界線データはgeometry:extentの<http://data.ordnancesurvey.co.uk/id/geometry/11110-241>に含まれています.GMLが直接埋め込んである形になっています.

% curl -LH 'Accept: text/turtle' http://data.ordnancesurvey.co.uk/id/geometry/11110-241
@prefix rdfs:  <http://www.w3.org/2000/01/rdf-schema#> .
@prefix foaf:  <http://xmlns.com/foaf/0.1/> .
@prefix dct:   <http://purl.org/dc/terms/> .
@prefix rdf:   <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .

<http://data.ordnancesurvey.co.uk/id/geometry/11110-241>
        a       <http://data.ordnancesurvey.co.uk/ontology/geometry/AbstractGeometry> ;
        <http://data.ordnancesurvey.co.uk/ontology/geometry/asGML>
                "<gml:Polygon xmlns:gml=\"http://www.opengis.net/gml\" srsName=\"http://www.opengis.net/def/crs/EPSG/0/27700\"><gml:exterior><gml:LinearRing><gml:posList srsDimension=\"2\">533259.9 183282.5 533263 183333.5 533338.9 183342.6 533438.8 183351.7 533469 183358.5 533470.5 183413 533472.6 183487.2 533475.4 183547.4 533479.4 183742 533478.1 183844.1 533479.6 183921.1 533557.9 183928.4 533667 183934.9 533714.4 183937.9 533735.2 183943.8 533719.7 183956 533700.9 183973.5 533684.8 183989 533663.3 184013.4 533693 184012.1 533723.7 184009.8 533736.6 184009.2 533779.7 184006.5 533807.9 184004.5 533827.5 184002.8 533882.3 183999.2 533882.4 184005.2 533930.4 184003.1 533928.4 183932.1 533925.2 183860.9 533928.2 183828.2 533937.5 183695.1 533942.4 183648.7 534044 183636.2 534094.3 183632.5 534105.3 183632.1 534116.1 183631.6 534164.2 183631.8 534223.2 183630.1 534330.8 183632.6 534431.4 183629.5 534479.5 183624.7 534466.7 183600.3 534458.1 183577.8 534454.7 183565.6 534456.6 183526 534463.6 183481.6 534466.6 183466.6 534477.6 183432.5 534486 183413 534496.6 183388.5 534502.3 183372.8 534472.2 183365 534431.7 183352.2 534313.1 183329.2 534303.3 183359.6 534301.1 183364.2 534286.4 183332.5 534269.8 183279.2 534252.2 183229.3 534234.1 183171.7 534225.6 183140.6 534156.8 183129.2 534109.3 183122.7 534019.3 183113.4 533976.4 183111.8 533933.7 183108 533885.2 183101.7 533857.5 183097.1 533837.3 183091.4 533813.9 183086.7 533778.1 183069.1 533768.9 183064 533753.4 183055 533710.8 183028.4 533692.3 183013.8 533683.8 183005.7 533670.1 182990.9 533651.6 182965.8 533633.1 182923.5 533608.1 182854.9 533597.6 182831.7 533587.2 182813.2 533584.2 182808.4 533560.1 182777.7 533539.3 182749.6 533503 182707.2 533478.3 182683.6 533543.8 182668.6 533541.7 182638 533530.1 182597.5 533523.8 182583.7 533523.8 182571 533524 182557.9 533525.4 182539.7 533532.1 182466.3 533543.3 182350.4 533579.8 182355.2 533590.8 182303.7 533595.6 182273.9 533595.3 182262.5 533593.2 182228.3 533590.5 182212.8 533589.1 182204.9 533587.6 182196.7 533578.1 182158.2 533574.1 182138.8 533568.8 182118.9 533567.3 182113.4 533549.2 182097.4 533530.3 182119.1 533501.9 182107.5 533447.5 182086.9 533426 182076.5 533411.9 182041.6 533410.7 182037.9 533320.2 182053.4 533250.9 182075.9 533230.5 182082.5 533215.8 182024.1 533198.6 181978 533184.6 181948.2 533182.4 181945.4 533167.5 181925.3 533146.8 181897.9 533119.2 181869.8 533078.9 181840.5 532946.1 181894.9 532955.7 181928 532965.8 181968.7 532978.1 182037.3 532989.2 182089.3 532993.7 182136 532998.2 182237.5 532999.2 182259.8 533004.7 182293.3 532983.6 182292.4 532941.1 182294.3 532941.6 182350.2 532918.3 182359 532920.4 182368.1 532929.3 182396.8 532944.9 182436.9 532963.7 182460.8 532942.7 182547.9 532938.5 182560.8 532968.5 182570.5 533030.4 182589.1 533033.1 182616.6 533034.4 182629.4 533033.9 182758.8 533098.2 182759.6 533130.9 182761.2 533172.8 182761.8 533179.8 182763.4 533188.1 182763.8 533220.3 182765.5 533225.7 182770.9 533274.9 182774.5 533279.2 182853.1 533280.3 182885 533279.7 182897.7 533277.3 182923.3 533263.6 182979.3 533261.1 182990.3 533259.6 183009.1 533259.8 183032.7 533261.9 183069.2 533260.6 183164.1 533260.9 183204 533259.9 183282.5</gml:posList></gml:LinearRing></gml:exterior></gml:Polygon>"^^rdf:XMLLiteral ;
        <http://data.ordnancesurvey.co.uk/ontology/geometry/hectares>
                124.25 .
.......

行政区画には隣接関係と包含関係があります.隣接関係は spatialrelations:touchesというプロパティです.包含関係は郵便番号と同様にspatialrelations:within, spatialrelations:containsプロパティが使われていますが,admingeo:county, admingeo:districtあるいはadmingeo:inCounty, admingeo:inDistrictのように直接の上下以外も明示的に個記述されています.

Administrative Region
Administrative Region

OS Linked Dataの続きです.今回はCode-Point Open Linked Dataについて.Code-Pointはイギリスの郵便番号(Postcode)に関するデータですが,基本的な項目をCode-Point Openでオープンデータとして公開しています.詳細なデータを使うには別途メンバーシップ契約が必要です(How to buy, 実際の手続きはやったことないので不明).Code-Point Open Linked DataはCode-Point Openの部分についてLinked Dataにしています.

フォームでは郵便番号文字列の検索ができます.例えば”EC2A”で検索すると,EC2Aを含んだ郵便番号が返ってきます.

EC2Aの検索結果
EC2Aの検索結果

地名と同様に,郵便番号もURIで識別されます.EC2AのURIはhttp://data.ordnancesurvey.co.uk/id/postcodedistrict/EC2Aです.Webブラウザで見ると以下のようになります.

EC2A
http://data.ordnancesurvey.co.uk/id/postcodedistrict/EC2A

text/turtleを要求すると以下のような結果が返ってきます.

% curl -LH 'Accept: text/turtle' http://data.ordnancesurvey.co.uk/id/pozstcodedistrict/EC2A
@prefix rdfs:  <http://www.w3.org/2000/01/rdf-schema#> .
@prefix foaf:  <http://xmlns.com/foaf/0.1/> .
@prefix dct:   <http://purl.org/dc/terms/> .
@prefix rdf:   <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .

<http://data.ordnancesurvey.co.uk/ontology/postcode/PostcodeDistrict>
        rdfs:label  "Postcode District"^^<http://www.w3.org/2001/XMLSchema#string> .

<http://data.ordnancesurvey.co.uk/id/postcodearea/EC>
        rdfs:label  "EC" .

<http://data.ordnancesurvey.co.uk/id/postcodesector/EC2A3>
        rdfs:label  "EC2A 3" .

<http://data.ordnancesurvey.co.uk/doc/postcodedistrict/EC2A>
        a                  foaf:Document ;
        rdfs:seeAlso       <http://sameas.org/rdf?uri=http://data.ordnancesurvey.co.uk/id/postcodedistrict/EC2A> ;
        dct:title          "Description of http://data.ordnancesurvey.co.uk/id/postcodedistrict/EC2A" ;
        foaf:primaryTopic  <http://data.ordnancesurvey.co.uk/id/postcodedistrict/EC2A> .

<http://data.ordnancesurvey.co.uk/id/postcodesector/EC2A1>
        rdfs:label  "EC2A 1" .

<http://data.ordnancesurvey.co.uk/id/postcodesector/EC2A4>
        rdfs:label  "EC2A 4" .

<http://data.ordnancesurvey.co.uk/id/postcodesector/EC2A2>
        rdfs:label  "EC2A 2" .

<http://data.ordnancesurvey.co.uk/id/postcodedistrict/EC2A>
        a           <http://data.ordnancesurvey.co.uk/ontology/postcode/PostcodeDistrict> ;
        rdfs:label  "EC2A" ;
        <http://data.ordnancesurvey.co.uk/ontology/spatialrelations/contains>
                <http://data.ordnancesurvey.co.uk/id/postcodesector/EC2A4> , <http://data.ordnancesurvey.co.uk/id/postcodesector/EC2A3> , <http://data.ordnancesurvey.co.uk/id/postcodesector/EC2A2> , <http://data.ordnancesurvey.co.uk/id/postcodesector/EC2A1> ;
        <http://data.ordnancesurvey.co.uk/ontology/spatialrelations/within>
                <http://data.ordnancesurvey.co.uk/id/postcodearea/EC> .

ここで面白いのは,イギリスの郵便番号の記法には体系があって,その包含関係がデータとして記述されています.具体的にはhttp://data.ordnancesurvey.co.uk/ontology/spatialrelations/withinhttp://data.ordnancesurvey.co.uk/ontology/spatialrelations/containsという二つのプロパティを使ってその関係を記述しています.地域によって桁数等は異なりますが,全体として必ず4階層になるようになっています.以下はOpen Data Instituteの郵便番号である EC2A 4DJ の例です.左の青丸が郵便番号のリソースで,右の茶丸は属するクラスです.図を簡略化するためにURIは省いてあります.

Postcode Model
Postcode Model

一番下のPostcodeUnitが実際に使われている郵便番号に相当します.http://data.ordnancesurvey.co.uk/id/postcodeunit/EC2A4JEを見ると,PostcodeUnitのデータには行政区や統計上の区分との関係が記述されるようになっています.これは別エントリで書きます.

EC2A 4JE
http://data.ordnancesurvey.co.uk/id/postcodeunit/EC2A4JE

Ordnance Surveyは日本の国土地理院に当たる組織であり,様々なオープンデータをOS Open Dataとして公開しています.

この中で,一部のデータはLinked Dataとしても公開しています.サイトはOS Linked Dataです.
具体的には地名辞典郵便番号境界線データを公開しています.これら全てのデータが混ざっているEndpointも公開しています.

まず50K Gazetteer Linked data (5万分の1地図の地名辞典)について.イギリスには”Little London”という地名がたくさんあります.フォームで検索すると34件のヒットがあることがわかります.ちなみにこの文字列検索もAPIです.LittleLondon

結果を見ると,どの項目もtitleやlabelは”Little London”ですが,”link”に入っているURIがhttp://data.ordnancesurvey.co.uk/id/50kGazetteer/140011, http://data.ordnancesurvey.co.uk/id/50kGazetteer/140012のように異なります.まさにURIを地名の識別子として利用しています.これらのURIにブラウザでアクセスすると,各々の”Little London”についての情報が表示されます.

Little London 140011
http://data.ordnancesurvey.co.uk/id/50kGazetteer/140011

Little London 140012
http://data.ordnancesurvey.co.uk/id/50kGazetteer/140012

また,text/turtleやapplication/json等を要求すると303 Redirectでデータが返ってきます.

% curl -LH 'Accept: text/turtle' http://data.ordnancesurvey.co.uk/id/50kGazetteer/140011
@prefix rdfs:  <http://www.w3.org/2000/01/rdf-schema#> .
@prefix foaf:  <http://xmlns.com/foaf/0.1/> .
@prefix dct:   <http://purl.org/dc/terms/> .
@prefix rdf:   <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .

<http://data.ordnancesurvey.co.uk/ontology/50kGazetteer/Other>
        rdfs:label  "Other" .

<http://data.ordnancesurvey.co.uk/doc/50kGazetteer/140011>
        a                  foaf:Document ;
        rdfs:seeAlso       <http://sameas.org/rdf?uri=http://data.ordnancesurvey.co.uk/id/50kGazetteer/140011> ;
        dct:title          "Description of http://data.ordnancesurvey.co.uk/id/50kGazetteer/140011" ;
        foaf:primaryTopic  <http://data.ordnancesurvey.co.uk/id/50kGazetteer/140011> .

<http://data.ordnancesurvey.co.uk/id/50kGazetteer/140011>
        a           <http://data.ordnancesurvey.co.uk/ontology/50kGazetteer/NamedPlace> ;
        rdfs:label  "Little London" ;
        <http://data.ordnancesurvey.co.uk/ontology/50kGazetteer/featureType>
                <http://data.ordnancesurvey.co.uk/ontology/50kGazetteer/Other> ;
        <http://data.ordnancesurvey.co.uk/ontology/50kGazetteer/mapReference>
                <http://data.ordnancesurvey.co.uk/id/OSLandrangerMap/95> ;
        <http://data.ordnancesurvey.co.uk/ontology/spatialrelations/easting>
                "232500" ;
        <http://data.ordnancesurvey.co.uk/ontology/spatialrelations/northing>
                "486500" ;
        <http://data.ordnancesurvey.co.uk/ontology/spatialrelations/oneKMGridReference>
                <http://data.ordnancesurvey.co.uk/id/1kmgridsquare/SC3286> ;
        <http://data.ordnancesurvey.co.uk/ontology/spatialrelations/twentyKMGridReference>
                <http://data.ordnancesurvey.co.uk/id/20kmgridsquare/SC28> ;
        foaf:name   "Little London" .

<http://data.ordnancesurvey.co.uk/ontology/50kGazetteer/NamedPlace>
        rdfs:label  "Named Place" .

また,SPARQLによるクエリも可能です.50K Gazetteer Linked Dataのページの”Find things using a query powered by SPARQL”というのをクリックするとフォームが出てきます.Endpointはhttp://data.ordnancesurvey.co.uk/datasets/50k-gazetteer/apis/sparqlです.

例えば,5万分の1地図はOS Landranger Mapsと呼ばれていますが,以下のように特定のLandrangerに含まれる”Little London”を得るクエリを書くことができます.

PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX spatial: <http://data.ordnancesurvey.co.uk/ontology/spatialrelations/>
PREFIX gaz: <http://data.ordnancesurvey.co.uk/ontology/50kGazetteer/>

SELECT ?uri ?label ?easting ?northing ?featureType 
WHERE {
  ?uri a gaz:NamedPlace; 
    gaz:mapReference <http://data.ordnancesurvey.co.uk/id/OSLandrangerMap/143>;        
    rdfs:label "Little London";
    spatial:easting ?easting;
    spatial:northing ?northing;
    gaz:featureType ?featureType.
}

OS Linked Dataのもう一つ素晴らしい点は,OpenRefineReconciliation Service APIも提供しているところです.フォームは”Turn labels into identifiers powered by RECONCILIATION”というところ.APIはhttp://data.ordnancesurvey.co.uk/datasets/50k-gazetteer/apis/reconciliation.例えばAsh coppiceで検索すると,その補完候補として2つのAsh Coppiceと1つのBelt Ash Coppiceという地名をid(URI)やマッチのスコアを含めて返してくれます.このAPIを通して,OpenRefine上でデータの補完をしたり,RDF Refine用にURIを追加したりすることができます.

Reconciliation Service API
Reconciliation Service API

(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対応というイベントもありました.

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" .
....

参考

これは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について書こうとおもいます.

図1: data.go.jpのCKAN部分
図1: data.go.jpのCKAN部分

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

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

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

図2: 交通関係でxlsファイルのデータ
図2: 交通関係でxlsファイルのデータ

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

図3: データセット例
図3: データセット例

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

図4: 横手市避難場所CSV
図4: 横手市避難場所CSV
図5: 横手市避難場所CSV - Map
図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の日本語訳等の活動をしているので,ご興味のある方は参加して頂ければとおもいます.