プレリリース版です。正式公開までは、公開済みのファイルも含めて内容が変わることがあります。
Skip to content

出典: https://datamodels.jp/guide/csv · 文章は CC BY 4.0

表計算ソフトで使う ​

エンティティのモデルのページのダウンロードの行には、CSV テンプレートとその Table Schema があります(Geometry などの値型にはありません)。これを使うと、表計算ソフトで作業する人も、JSON を書かずにモデルの形のデータを作れます。このページでは、指定緊急避難場所(EvacuationSite)のテンプレートに入力して検査し、NGSI-LD のエンティティに変換します。

CSV テンプレートモデルのページの「ダウンロード」① 表計算ソフトで埋めるsites.csv1 行に 1 か所② frictionless validate検査した sites.csvTable Schema で各セルを確認③ datamodels convertNGSI-LD のエンティティJSON Schema でも検査済み

Node.js 24 以降と、frictionless を動かす Python が必要です。

1. ファイルを取得する ​

どちらのファイルも、モデルのページのダウンロードの行にあります。コマンドで取得するなら、次のとおりです。

bash
BASE=https://datamodels.jp/adapters
curl -sSfO "$BASE/csv/disaster/EvacuationSite.csv"
curl -sSfO "$BASE/table-schema/disaster/EvacuationSite.tableschema.json"

2. テンプレートに入力する ​

EvacuationSite.csv を表計算ソフトで開きます。1 行目には、属性ごとに 1 つの列があります。各列の意味は、モデルのページの属性の表にあります。避難場所 1 か所につき 1 行を足し、分からないセルは空のままにします。sites.csv という名前で、UTF-8 で保存してください(Excel では「CSV UTF-8」)。次の行には、後の手順で見つけるために、わざと誤りを 2 つ入れています。

列値
idurn:ngsi-ld:EvacuationSite:0012
name都立一橋高校
externalSiteId13101-0012
localGovernmentCode13101
address.addressText東京都千代田区東神田1-12-13
longitude、latitude139.7810002、35.6945488
hazardTypesearthquake;fire
alsoDesignatedSheltertrue

hazardTypes のような複数の値は ; で区切ります。longitude と latitude から位置ができます。テンプレートの列は、空の列も含めてすべて残してください。Table Schema は、すべての列がこの順に並んでいることを前提にしています。

3. frictionless で検査する ​

frictionless は、Table Schema に照らして各セルを確認します。型、パターン、使える値、必須のセルが埋まっているかを見ます。

bash
pip install frictionless   # または pipx install frictionless
frictionless validate sites.csv --schema EvacuationSite.tableschema.json

結果の一部です。

text
│ sites │ table │ sites.csv │ INVALID │
┃ Row ┃ Field ┃ Type             ┃ Message                                     ┃
│ 2   │ 7     │ constraint-error │ The cell "13101" in row at position "2" and │
│     │       │                  │ field "localGovernmentCode" at position "7" │
│     │       │                  │ does not conform to a constraint:           │
│     │       │                  │ constraint "pattern" is "\d{6}"             │

全国地方公共団体コードは、末尾の検査数字を含めて 6 桁です。セルを 131016 に直して保存し、同じコマンドをもう一度実行します。

text
│ sites │ table │ sites.csv │ VALID  │

4. NGSI-LD のエンティティに変換する ​

datamodels-toolkit の datamodels convert は、各行をエンティティにして、モデルの JSON Schema で検査します。

bash
npx github:geolonia/datamodels-toolkit#v0.3.5 convert \
  disaster/EvacuationSite csv-template sites.csv --out entities.json
text
sites.csv: utf-8, 1 row(s), 0 valid EvacuationSite, 1 invalid
  line 2: data/hazardTypes/1 must be equal to one of the allowed values

JSON Schema は、Table Schema では確かめられないことも検査します。複数の値の中身と、「externalSiteId か nationalShelterId」のような複数の列にまたがる決まりです。fire はこのモデルの災害の種別にありません。種別の一覧は属性の表にあります。inlandFlood に直して、convert をもう一度実行します。

text
sites.csv: utf-8, 1 row(s), 1 valid EvacuationSite, 0 invalid

entities.json にエンティティができました。空のセルの属性は入りません。

json
[
  {
    "id": "urn:ngsi-ld:EvacuationSite:0012",
    "type": "EvacuationSite",
    "name": "都立一橋高校",
    "externalSiteId": "13101-0012",
    "localGovernmentCode": "131016",
    "address": { "addressText": "東京都千代田区東神田1-12-13" },
    "location": { "type": "Point", "coordinates": [139.7810002, 35.6945488] },
    "hazardTypes": ["earthquake", "inlandFlood"],
    "alsoDesignatedShelter": true
  }
]

これは key-values の形です。--normalized を付けると、NGSI-LD ブローカーが受け取る形で、@context 付きで書き出します(NGSI-LD ブローカーに送る)。テンプレートの列について詳しくは、データを変換するを見てください。

自分のモデル ​

自分のサイトのモデルでも、datamodels export で同じ 2 つのファイルを作れます(他のツールに書き出す)。