Menu

Coppell Technologies
Fiwareで都市OSを動かしてみよう
NGSI-LDにも挑戦
データ仕様の現状と課題
スマートシティの標準規定(案)
データモデルのユースケース


Column
Link集
用語集


Coppell

Technologies

利用例-1 (Organization)


■利用例の概要
 法人を表現するデータモデルである、Organizationをcsvファイルから生成します。

■csvファイル
 ここでは、3種類の法人に関するデータを登録します。一つ目は公共施設を所有する自治体。二つ目は公共施設の管理を委託される事業者。最後は施設に設置されている設備のメーカです。メーカは2社分登録します。メーカは法人番号だけが分かれば良いので、csv上は法人番号とメーカ名しか登録しません。このメーカの情報は「利用例-6 (DeviceModel)」で使用します。
 尚、本利用例では自治体の行は本来呉市の1行だけで良いのですが、住所のバリエーションを示すために東広島市、府中町、府中市も登録しています。

■拡張JSON Schema
 元となるJSON Schemaは、このリンクから入手します。
 csvからJSONに変換するルールとして、以下の情報を追加します。追加した拡張JSON Schemaはdata配下にOrganization.exschema.jsonというファイル名で格納してありります

Attribute 追加ルール 説明
id

dataSource

csvAttr csvの項目名として、"法人番号"を指定します。
prefix 法人番号の前に付加する文字列として、"urn:ngsi-ld:Organization:JP"を指定します。これにより、idの文字列が"urn:ngsi-ld:Organization:JP"と法人番号を結合した文字列になります
identificationGroup 法人番号と自治体コードの二つのデータを登録したいので、arrayのitemをリスト構造とし、要素を二つ並べます
0 identificationType

const 最初の要素に格納すべき文字列として、"自治体コード"を指定します
identification

dataSource

csvAttr 最初の要素に、csvの項目名として"自治体コード"を指定します
1 identificationType

const 二つ目の要素に格納すべき文字列として、"法人番号"を指定します
identification

dataSource

csvAttr 二つ目の要素に、csvの項目名として"法人番号"を指定します
name

dataSource

csvAttr csvの項目名として、"法人名"を指定します。
containedInPlace

dataSource

csvAttr csvの項目名として、"都道府県"を指定します。余談ですが、市区町村名は県名と組み合わせないと一意にならないため、都道府県名をcontainedInPlaceに登録しています
nameKana

dataSource
csvAttr csvの項目名として、"法人名カナ"を指定します
category

dataSource

csvAttr csvの項目名として、"種別"を指定します
registeredAddress

dataSource

csvAttr 所在地は住所が格納されているので、streetAddressに対するcsvの項目名として、"所在地"を指定します
const 都道府県名と市区町村名は所在地に含まれていない場合もあるので、format処理の参考情報としてconstで"広島県"と"呉市"を指定します。尚、府中市の様に同名の自治体がある場合は、都道府県名の指定は必須です
format PostalAddressを指定します。これにより、住所の文字列内に県名や自治体名が記載されていても、項目を分割して登録します

これら以外のAttrributeはそのまま残します。消しても構いませんが、残しても無視されます。但し、typeはrequiredに指定してあるので、JSONに変換されます。

■実行
 cドライブ直下にtestというフォルダを作成して、全てのファイルをここに格納して実行しています。


C:\Users\owner>chdir c:/Tools/

c:\Tools>Python ctoj.py dir=c:/Tools/data/ inputfile=Organizationcsv.csv outputfile=Organizationjson.json schemafile=Organization.exschema.json logfile=Organizationlog.txt
##### start ctoj converter #####
CSV translated to JSON successfully. output Entity number: 7

■変換結果
 ツール実行結果は以下の通りです。白字は日本PFI・PPP協会が提供しているJson schemaで、赤字が追加部分です。


 [
   {
     "id": "urn:ngsi-ld:Organization:JP9000020342025",
     "type": "Organization",
     "identificationGroup": {
       "type": "IdentificationGroup",
       "value": [
         {
           "identification": "342025",
           "identificationType": "自治体コード"
         },
         {
           "identification": "9000020342025",
           "identificationType": "法人番号"
         }
       ]
     },
     "name": {
       "type": "Text",
       "value": "呉市"
     },
     "containedInPlace": {
       "type": "Text",
       "value": "広島県"
     },
     "nameKana": {
       "type": "Text",
       "value": "クレシ"
     },
     "category": {
       "type": "Text",
       "value": "市区町村"
     },
     "registeredAddress": {
       "type": "PostalAddress",
       "value": {
         "addressRegion": "広島県",
         "addressLocality": "呉市",
         "streetAddress": "中央4-1-6"
       }
     }
   },
   {
     "id": "urn:ngsi-ld:Organization:JP2000020342122",
     "type": "Organization",
     "identificationGroup": {
       "type": "IdentificationGroup",
       "value": [
         {
           "identification": "342122",
           "identificationType": "自治体コード"
         },
         {
           "identification": "2000020342122",
           "identificationType": "法人番号"
         }
       ]
     },
     "name": {
       "type": "Text",
       "value": "東広島市"
     },
     "containedInPlace": {
       "type": "Text",
       "value": "広島県"
     },
     "nameKana": {
       "type": "Text",
       "value": "東広島市"
     },
     "category": {
       "type": "Text",
       "value": "市区町村"
     },
     "registeredAddress": {
       "type": "PostalAddress",
       "value": {
         "addressRegion": "広島県",
         "addressLocality": "東広島市",
         "streetAddress": "西条栄町8-29"
       }
     }
   },
   {
     "id": "urn:ngsi-ld:Organization:JP7000020342084",
     "type": "Organization",
     "identificationGroup": {
       "type": "IdentificationGroup",
       "value": [
         {
           "identification": "342084",
           "identificationType": "自治体コード"
         },
         {
           "identification": "7000020342084",
           "identificationType": "法人番号"
         }
       ]
     },
     "name": {
       "type": "Text",
       "value": "府中市"
     },
     "containedInPlace": {
       "type": "Text",
       "value": "広島県"
     },
     "nameKana": {
       "type": "Text",
       "value": "フチュウシ"
     },
     "category": {
       "type": "Text",
       "value": "市区町村"
     },
     "registeredAddress": {
       "type": "PostalAddress",
       "value": {
         "addressRegion": "広島県",
         "addressLocality": "府中市",
         "streetAddress": "府川町315"
       }
     }
   },
   {
     "id": "urn:ngsi-ld:Organization:JP2000020343021",
     "type": "Organization",
     "identificationGroup": {
       "type": "IdentificationGroup",
       "value": [
         {
           "identification": "343021",
           "identificationType": "自治体コード"
         },
         {
           "identification": "2000020343021",
           "identificationType": "法人番号"
         }
       ]
     },
     "name": {
       "type": "Text",
       "value": "府中町"
     },
     "containedInPlace": {
       "type": "Text",
       "value": "広島県"
     },
     "nameKana": {
       "type": "Text",
       "value": "フチュウチョウ"
     },
     "category": {
       "type": "Text",
       "value": "市区町村"
     },
     "registeredAddress": {
       "type": "PostalAddress",
       "value": {
         "addressRegion": "広島県",
         "addressLocality": "安芸郡府中町",
         "streetAddress": "大通3-5-1"
       }
     }
   },
   {
     "id": "urn:ngsi-ld:Organization:JP0990123456789",
     "type": "Organization",
     "identificationGroup": {
       "type": "IdentificationGroup",
       "value": [
         {
           "identification": "0990123456789",
           "identificationType": "法人番号"
         }
       ]
     },
     "name": {
       "type": "Text",
       "value": "ハリー株式会社"
     },
     "nameKana": {
       "type": "Text",
       "value": "ハリーカブシキガイシャ"
     },
     "category": {
       "type": "Text",
       "value": "株式会社"
     },
     "registeredAddress": {
       "type": "PostalAddress",
       "value": {
         "addressRegion": "広島県",
         "addressLocality": "呉市",
         "streetAddress": "吉浦潭鼓町14-1"
       }
     }
   },
   {
     "id": "urn:ngsi-ld:Organization:JP7010001008844",
     "type": "Organization",
     "identificationGroup": {
       "type": "IdentificationGroup",
       "value": [
         {
           "identification": "7010001008844",
           "identificationType": "法人番号"
         }
       ]
     },
     "name": {
       "type": "Text",
       "value": "日立製作所"
     }
   },
   {
     "id": "urn:ngsi-ld:Organization:JP3120001236504",
     "type": "Organization",
     "identificationGroup": {
       "type": "IdentificationGroup",
       "value": [
         {
           "identification": "3120001236504",
           "identificationType": "法人番号"
         }
       ]
     },
     "name": {
       "type": "Text",
       "value": "パナソニック"
     }
   }
 ]

ログファイルは以下の通りです。全ての行でエラーは発生していません。

02: inputdir: c:/Tools/Data/, inputfile: Organizationcsv.csv
09: outputdir: c:/Tools/Data/, outputfile: Organizationjson.json
10: CSV Line# 2
10: CSV Line# 3
10: CSV Line# 4
10: CSV Line# 5
10: CSV Line# 6
10: CSV Line# 7
10: CSV Line# 8
12: CSV translated to JSON successfully. Enity number: 7