マスターのスキーマの仕様書

基本的なフォーマット

基本的にroot要素にdataの配列が来るものとする。

id: idName
type: object
isDefaultOpen: true
properties:
- key: data
  type: array
  overrideCodeGeneratePropertyName: OverrideName
  items:
    type: object
    properties:
    - key: masterId
      type: uuid
      autoGenerated: true

各プロパティの詳細

基本のプロパティ

プロパティ名 説明 プロパティの型 フォーマット エディタに関係する コード生成に関係する
id そのスキーマのid string 任意の文字列 Yes Yes
isMasterSchema そのyamlがマスターデータのスキーマかどうかを表す boolean Yes
key その要素の名前 string 任意の文字列 Yes Yes
type その要素の型 string array, object, string,
enum, ← NEW!
number, integer, boolean, uuid, vecotr2, vecotr3, vecotr4, vecotr2Int, vecotr3Int, vecotr4Int Yes Yes
properties object型の中に入っている要素を列挙する object array 各要素はkeyがMUST。typeかrefのどちらかMUST Yes Yes
items array型の型を定義する object typeとそのタイプの定義に必要な付随要素 Yes Yes
options enum型で列挙する値を指定する string array 任意の文字列の配列 Yes Yes
autoGenerated uuid専用、エディタ上でuuidを自動生成する boolean Yes
foreignKey 外部キーとなる要素を指定する object schemaId,
foreignKeyIdPath,displayElementPathの3要素のobject型パスは絶対パスor相対パス Yes Yes
optional その要素がnullもしくは要素無しでも良いか boolean Yes Yes
default その要素のエディタ上でのデフォルト値を指定する typeによる autoGeneratedの方が優先
スキーマのバリデーションもやるなら見るぐらい Yes
ref 他のスキーマをインポートする string スキーマIDを指定する Yes Yes
switch 要素の値ごとのスキーマを変更するとき、その要素のパスを指定する。caseとセットで使う string 絶対パス or 相対パス
分岐で指定出来るタイプはstring, number, integer, boolean Yes Yes
cases switchで指定した要素でどのスキーマに分岐するかを記述する。switchとセットで使う object array when, typeの両方がMUST Yes Yes
when case内で、そのスキーマとなる値を設定する switchで指定したタイプによる Yes Yes
isDefaultOpen フォームビューのときに、その要素を表示時に展開しておくか boolean object型のみに適用できる。object配列については要検討 Yes
(要リファクタ検討)fixedParameter パスで指定した要素を特定の値に固定する object path 指定する要素のパスvalue 固定する値 Yes
overrideCodeGeneratePropertyName コードジェネレート時のプロパティ、クラス名を上書きする string 任意の文字列 Yes
defineInterface(interfaceという名前は別途検討) interfaceを定義するためのobject
必ずroot直下にある object array これ配下のobjectは必ずdefineInterfaceとpropertiesを持つ

implementationInterfaceを持つことがあり、interfaceの実装関係を表す | Yes | Yes | | globalDefineInterface | defineInterfaceは同一ファイル内で実装できる。globalは全体のファイルで実装できる | object array | これ配下のobjectは必ずdefineInterfaceとpropertiesを持つ

implementationInterfaceを持つことがあり、interfaceの実装関係を表す | Yes | Yes | | interfaceName | defineInterface配下のobjectに必ず記述する | string | 任意の文字列 ただし、他のinterfaceNameと重複禁止 | Yes | Yes | | implementationInterface → attachmentInterface

TODO コード生成修正 | どのinterfaceを実装するかを定義する これはdefineInterface配下のobjectか、typeがobjectである要素が持つことができる

interface側に定義されているプロパティはpropertiesに記述されていなくても定義されていることになる | string array | interfaceNameに定義されているもののみ 循環参照禁止 | Yes | Yes |

パス指定機能

switch等でどのパラメーターによって分岐したいかといった要素を指定するため、相対パスor絶対パスで要素を指定し、その要素に応じて条件分岐をすると言った仕組みが必要となる

また、スキーマからパスで指定された要素をある値に固定するといった使い方も考えられる

なので、ある要素からみたときに、そのパスが指し示す要素の値を取得する機能が必要となる

パス定義

区切り文字 /

絶対パス /hoge/〜 相対パス ./hoge〜

1個上に登る ../

jsonのトークンに/を使うやつはサポートしません

でいいと思います