ケーススタディ#2 – CSVから共通データ仕様の形式への変換 (3/14) — 部門(Department)

「部門(Department)」の項目への変換ルール

 ケーススタディ#1の所管部門一覧表の例で選択した項目は以下の通りです。データモデル「部門(Department)」に変換するので、「部門」から選択した項目を中心に利用しますが、施設IDだけは「施設」から選択した項目です。他は無視します。各項目の変換の仕方も表内記入しました。

元となるCSV表の項目名共通データ仕様上の項目名表形式への変換の説明
法人番号、部門コードididの生成ルールに従って法人番号と部門コードから変換します。
(なし)typeデータモデルのtypeを登録します。ここでは”Depaartment”を登録します
部門名name所管部門の法人名です。そのまま代入します。
法人番号departmentOf所属する法人(オーナーの法人)の法人IDです。法人番号から機械的に法人IDiに変換する事も可能ですが、ここでは前ページの「法人(Organization)」を法人番号で検索する事で、法人IDを求めることにします。
contactPoint各種連絡先の情報です。Array項目なので、一つ目の項目へ変換します。
電話番号 telephone連絡先の電話などです。そのまま代入します。
施設コードrefFacilityidの生成ルールに従って法人番号と施設コードから変換します。

CSV表の準備

 ケーススタディ#1の所管部門一覧表の例を使います。

■入力となる表

法人番号部門コード部門名電話番号施設コード個別郵便番号郵便番号都道府県市区町村町字以下建物名フロア
90000203420250402004吉浦まちづくりセンター0823-31-754004020047370852JP広島県呉市吉浦中町2-6-5呉市吉浦市民センター2階
90000203420250602003学校施設課0823-25-344701000017378501JP広島県呉市中央4-1-6呉市役所本庁舎

■CSVファイルの内容

法人番号,部門コード,部門名,電話番号,施設コード,個別郵便番号,郵便番号,国,都道府県,市区町村,町字以下,建物名,フロア
9000020342025,0402004,吉浦まちづくりセンター,0823-31-7540,0402004,,7370852,JP,広島県,呉市,吉浦中町2-6-5,呉市吉浦市民センター,2階
9000020342025,0602003,学校施設課,0823-25-3447,0100001,,7378501,JP,広島県,呉市,中央4-1-6,呉市役所,本庁舎

部門情報の変換

 このケーススタディでは”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/Department/",
  "type": "object",
  "properties": {
    "id": {      ---------------------------------------- "id"というAttributeに関する指定です
      "type": "string",
      "dataSource":[      ------------------------------- 複数の文字列を繋げます
        {      ------------------------------------------ 一つ目の文字列の指定です
          "csvAttr": "法人番号",      -------------------- CSVの法人番号から値を取ってきます
          "prefix": "urn:ngsi-ld:Department:JP"      ---- 法人番号の前につなげる文字列です
        },
        {      ------------------------------------------ 二つ目の文字列の指定です
          "csvAttr": "部門コード",      ------------------ CSVの部門コードから値を取ってきます
          "pattern": "^[0-9]{7}$",      ----------------- 7桁の数字に満たない時は先頭にゼロを付加します
          "prefix": "-"    ------------------------------ 部門コードの前にハイフンを付加します
        }
      ]
    },
    "type": {"const": "Department"},      --------------- "type"に対応する値は"Department"という固定値です
    "name": {
      "type": "object",
      "properties": {
        "type": {"const": "Text"},      ----------------- この"type"に対応する値は"Text"という固定値です
        "value": {
          "type": "string",
          "dataSource":{"csvAttr": "部門名"}      -------- CSVの部門名から値を取ってきます
        }
      },
      "required": ["type", "value"],
      "additionalProperties": false
    },
{
--以下略--

 この拡張JSON Schemaを指定してctojツールを実行すると、以下の様に共通データ仕様の形式変換した結果が得られます。

  [
    {
      "id": "urn:ngsi-ld:Department:JP9000020342025-0402004",
      "type": "Department",
      "name": {
        "type": "Text",
        "value": "吉浦まちづくりセンター"
      },
      "departmentOf": {
        "type": "Relationship",
        "value": "urn:ngsi-ld:Organization:JP9000020342025"
      },
      "refFacility": {
        "type": "Relationship",
        "value": "urn:ngsi-ld:Facility:JP9000020342025-0402004"
      },
      "contactPoint": {
        "type": "ContactPoint",
        "value": [
          {
            "telephone": [
              "0823-31-7540"
            ]
          }
        ]
      }
    },
    {
      "id": "urn:ngsi-ld:Department:JP9000020342025-0602003",
      "type": "Department",
      "name": {
        "type": "Text",
        "value": "学校施設課"
      },
      "departmentOf": {
        "type": "Relationship",
        "value": "urn:ngsi-ld:Organization:JP9000020342025"
      },
      "refFacility": {
        "type": "Relationship",
        "value": "urn:ngsi-ld:Facility:JP9000020342025-0100001"
      },
      "contactPoint": {
        "type": "ContactPoint",
        "value": [
          {
            "telephone": [
              "0823-25-3447"
            ]
          }
        ]
      }
    }
  ]