基本的に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のトークンに/を使うやつはサポートしません
でいいと思います