ケーススタディ#2 – CSVから共通データ仕様の形式への変換 (2/14) — 法人(Organization)

「法人(Organization)」の項目への変換ルール

 ケーススタディ#1のオーナー情報表の例で選択した項目は以下の通りです。データモデル「法人(Organization)」に変換するので、「法人」以外から選択した項目は無視します。各項目の変換の仕方も表内記入しました。変換が必要なのはidだけです。CSVでは必要が無かったtypeはNGSI V2の規定に従って登録します。

元となるCSV表の項目名共通データ仕様上の項目名表形式への変換の説明
法人番号ididの生成ルールに従って変換します。
(なし)typeデータモデルのtypeを登録します。ここでは”Organization”を登録します
identificationGroupArrayなので2つの項目をひとつにまとめます
自治体コード identificationArrayの一つ目の項目にそのまま代入すると共に、identificationTypeに”自治体コード”を登録します
法人番号 identificationArrayのふたつ目の項目にそのまま代入すると共に、identificationTypeに”法人番号”を登録します
法人名nameオーナーの法人名です。そのまま代入します。
県名containedInPlace基礎自治体が位置する都道府県名です。そのまま代入します。
法人名カナnameKana法人名のカナ表記です。そのまま代入します。
法人名英語nameEn法人名の英語表記です。そのまま代入します。
組織種別category”市区町村”、”都道府県”、”国研”などです。そのまま代入します。
説明descriptionこの組織に関する説明です。そのまま代入します。
urlurl法人が開設しているWebサイトURLです。そのまま代入します。
contactPoint各種連絡先の情報です。Array項目なので、一つ目の項目へ変換します。
電話番号 telephone代表電話などです。そのまま代入します。

CSV表の準備

 ケーススタディ#1のオーナー情報表の例を使いますが、本ケーススタディでは後でメーカーの法人番号が必要になるので、メーカーの情報も追加します。追加する必要があるのは、メーカー名と法人番号だけです。

■入力となる表

法人番号自治体コード法人名都道府県法人名カナ法人名英語組織種別説明url電話番号施設コード個別郵便番号郵便番号住所国住所都道府県住所市区町村住所方書建物名
9000020342025342025呉市広島県クレシKure City市区町村戦艦大和のふるさととして有名https://www.city.kure.lg.jp/0823-25-310001000017378501JP広島県呉市中央4-1-6呉市役所
0990123456001パナ製作所
0990123456002KAKA
0990123456003西洋シャッター
0990123456004吉浦電機製作所
0990123456005吉浦サウンドシステム
0990123456006吉浦街路灯
0990123456007ガラホン
0990123456008吉浦遊具
0990123456009吉浦プール

■CSVファイルの内容

法人番号,自治体コード,法人名,都道府県,法人名カナ,法人名英語,組織種別,説明,url,電話番号,施設コード,個別郵便番号,郵便番号,住所国,住所都道府県,住所市区町村,住所,方書建物名
9000020342025,342025,呉市,広島県,クレシ,Kure City,市区町村,戦艦大和のふるさととして有名,https://www.city.kure.lg.jp/,0823-25-3100,0100001,,7378501,JP,広島県,呉市,中央4-1-6,呉市役所
0990123456001,,パナ製作所,,,,,,,,,,,,,,,
0990123456002,,KAKA,,,,,,,,,,,,,,,
0990123456003,,西洋シャッター,,,,,,,,,,,,,,,
0990123456004,,吉浦電機製作所,,,,,,,,,,,,,,,
0990123456005,,吉浦サウンドシステム,,,,,,,,,,,,,,,
0990123456006,,吉浦街路灯,,,,,,,,,,,,,,,
0990123456007,,ガラホン,,,,,,,,,,,,,,,
0990123456008,,吉浦遊具,,,,,,,,,,,,,,,
0990123456009,,吉浦プール,,,,,,,,,,,,,,,

法人情報の変換

 このケーススタディでは”ctoj”というツールを使いますので、csvファイルを作成する際にはutf-8で書き込んでおきます。

このケーススタディでは以下の様に拡張JSON Schemaを策定しました。拡張JSON Schemaとは、本協議会が公開しているJSON SchemaにcsvからJSONファイルに変換する際のルールを追記したものです。詳しくはツールのサイトを参照してください。「法人」の場合は例えば以下となります。

{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "$id": "https://ppp-database.org/spec/datamodel/Organization/",
  "type": "object",
  "properties": {
    "id": {      ---------------------------------------- "id"というAttributeに関する指定です
      "type": "string",      ---------------------------- "id"に対応する値は文字列です
      "dataSource": {      ------------------------------ CSVから取り出します
        "csvAttr": "法人番号",      ---------------------- CSVの法人番号から値を取ってきます
        "prefix": "urn:ngsi-ld:Organization:JP"      ---- 法人番号の前につなげる文字列です
      }
    },
    "type": {      -------------------------------------- "type"というAttributeに関する指定です
      "const": "Organization"      ---------------------- "type"に対応する値は"Organization"という固定値です
    },
    "identificationGroup": {      ----------------------- "identification"というAttributeに関する指定です
      "type": "object",
      "properties": {
        "type": {"const": "IdentificationGroup"},      -- "typeというSub-attributuonの値は"IdentificationGroup"と言う固定値です
        "value": {      --------------------------------- "value"というSub-attributeに関する指定です
          "type": "array",      ------------------------- このAun-attributionはArrayです
          "items": [
            {      -------------------------------------- Arrayの一つ目の指定です
              "type": "object",
              "properties":{
                "identification": {      ---------------- "identification"というSub-ttributeに関する指定です
                  "type": "string",
                  "dataSource": {"csvAttr": "自治体コード"}
                },
                "identificationType": {"const": "自治体コード"}
--以下略--

 この拡張JSON Schemaを指定してctojツールを実行すると、以下の様に共通データ仕様の形式変換した結果が得られます。下の左図は変換後の先頭部分、右が追加したメーカーの部分です。

 余談ですが、NGSI V2ではこの”id”と”type”以外のAttributeに”type”と”value”が記述されている形式をNormalized形式と呼んでいます。簡略化して見やすくしたkeyValues形式と言うものがありますが、type名などが失われるので、情報を保存する際にはこのNormalized形式を利用します。

  [
    {
      "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": "クレシ"
      },
      "nameEn": {
        "type": "Text",
        "value": "Kure City"
      },
      "category": {
--以下略--
    {
      "id": "urn:ngsi-ld:Organization:JP0990123456001",
      "type": "Organization",
      "identificationGroup": {
        "type": "IdentificationGroup",
        "value": [
          {
            "identification": "0990123456001",
            "identificationType": "法人番号"
          }
        ]
      },
      "name": {
        "type": "Text",
        "value": "パナ製作所"
      }
    },
    {
      "id": "urn:ngsi-ld:Organization:JP0990123456002",
      "type": "Organization",
      "identificationGroup": {
        "type": "IdentificationGroup",
        "value": [
          {
            "identification": "0990123456002",
            "identificationType": "法人番号"
          }
        ]
      },
      "name": {
        "type": "Text",
        "value": "KAKA"
      }
    },
--以下略--

 更に余談ですが、このツールでは、出力の形式を選べます。記載の例はPythonなどでそのままリストとして読み込める形式ですが、この他に、デジタル庁の推奨モジュールであるFiware/Orionにそのまま入力できる形式も選択可能です。