日本語
モデルのルール
このページは、カタログにモデルを足したり変えたりする人向けです。提案の仕方と決め方は貢献するにあります。
まず使い回し、足りないものだけ定義する
このカタログの方針は「複製せず、拡張する」です。Smart Data Models、NGSI-LD、schema.org の型や属性で合うものがあれば、そのまま使います。合うものがなければ、https://datamodels.jp/ns/<subject>/ の下に独自の型を定義します。その場合も、合う上流の属性はそのまま使います。例えば RoadRestriction はカタログ独自の型ですが、roadName・validFrom・validTo は Smart Data Models のものです。
上流の型を使わないとき
「合うなら上流を使う」というのは、無理にでも合わせるという意味ではありません。上流のモデルには、1 つの案件のために公開されただけのもの、北米の事情を前提にしたもの、十分な意見を集める前に固まったものもあります。次のような場合は独自の型を定義します。
- 上流の型の意味や必須属性が、日本の運用と食い違う。
- 上流の型が特定の製品や地域の事情に依存している。
- 属性を足すだけでは足りず、意味を変えないと使えない(意味の変更は禁止なので、独自の型にする)。
検討した上流の型と、使わなかった理由をモデルの notes.yaml に書いてください。後から見た人が同じ検討を繰り返さないためです。
今のところ、カタログのモデルはすべて独自の型で、一部の属性に上流の名前を使っています。理由は各モデルの注記と Issue #16 にあります。
守ること
- 上流の属性の意味や型は変えません。必要なら新しい属性を足します。
- 状態の属性(
progress、openingStatus、restrictionStatusなど)の値の一覧は決まっています。合う値がないときは状態の属性を省き、statusLabelに元の呼び方を書きます(そのときstatusLabelは必須)。近い値に無理に当てはめないでください。 - NGSI-LD core context の予約語は再定義しません。
status、description、location、createdAt、modifiedAt、observedAtなどです。CI が弾きます。statusが要るときはincidentStatusのように名前を変えます。 - モデルはサブジェクト(分野)でまとめ、地域名・顧客名・案件名ではまとめません。
- 共通の構造は common の値型を使います。住所は JapaneseAddress、
locationなどの位置は Geometry です。使えるジオメトリを絞るときは$refの横で制約します(DesignatedShelter は点だけ)。 - 既にある型に名前だけ合わせたいときは、エイリアス(
x-alias-of)を使います。属性も必須項目も同じです。 - 属性を足したいとき、型を分けたいときは、サブクラス(
x-subclass-of)を使います。同じ名前の属性は親と同じ意味で、親の必須項目は残ります。CI はどちらも検査します。
日本の標準との対応表
モデルに当たるデータが日本の標準にあるとき(例えばデジタル庁の自治体標準オープンデータセットのデータセット)は、対応表(mapping/*.yaml)を書きます。自治体が、自分のデータをそのままモデルで使えるようにするためです。例は EvacuationSite です。当たるデータセットがあるかはレビューで確認します(CI では検査しません)。
標準の新しい版
対応表には、対応する標準の版を書きます(例:自治体標準オープンデータセットの 20260801 版、EEI 第 1.1 版)。新しい版が出たら、メンテナーが対応表を合わせます。対応表だけの変更なら、バージョンは上がりません。モデルも変える必要があるときは、バージョンの決まりに従います。追従の期限は決めていません。
例の書き方
エンティティのモデルには、例が 2 つあります(key-values と normalized)。Geometry などの値型には、key-values の例が 1 つあります。例はモデルのページに載り、CI が検証します。例はクライアントを作る人のお手本になるので、すべてのサブジェクトで 1 つのシナリオにそろえています。
- シナリオ:架空の出来事として、東京都千代田区の大雨対応(令和 8 年 7 月)を使います。区が災害対応のプロジェクトを立ち上げます。靖国通りのアンダーパスの冠水を確認するタスクがあり、道路が通行止めになり、避難所が開設されます。
- 実在と架空:地名、住所、各種コード(全国地方公共団体コード、アドレス・ベース・レジストリの町字 ID など)、座標は実在のものを使います。出来事、人、チーム、システムの番号は架空です。個人名は使わず、
staff-0012やfield-team-aのような識別子にします。 - ID:
urn:ngsi-ld:<型名>:<ローカル ID>。元のシステムに番号があれば、それをローカル ID にします(urn:ngsi-ld:Task:1234)。複数の組織が 1 つのブローカーを共有するときは、urn:ngsi-ld:<型名>:<組織>:<ローカル ID>のように組織を入れます。 - 参照:カタログのほかの型への参照は、その型の例の ID を指します(Task の
projectは Project の例)。同じ型への参照(parent、relatedTo)と、カタログが定義しない型(Person、Team)への参照は自由です。CI がこれを検査します。 - URL:元のシステムの URL は
tracker.example.jpのような例示用のドメインにします。 - 日時:日本時間の場合は
+09:00を付けます。