Master Schema Specification
マスターのスキーマの仕様書
基本的なフォーマット
基本的に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 | 任意の文字列 | ||
key | その要素の名前 | string | 任意の文字列 | ||
type | その要素の型 | string | array, object, string, number, integer, boolean,
uuid, vecotr2, vecotr3, vecotr4, vecotr2Int, vecotr3Int, vecotr4Int |
||
properties | object型の中に入っている要素を列挙する。 | object array | 各要素はkeyがMUST。typeかrefのどちらかMUST | ||
items | array型の型を定義する。 | object | typeとそのタイプの定義に必要な付随要素 | ||
autoGenerated | uuid専用、エディタ上でuuidを自動生成する。 | boolean | |||
foreignKey | 外部キーとなる要素を指定する。 | object | schemaId, keyPath, displayElementPathの3要素のobject型
パスは絶対パス固定? |
||
optional | その要素がnullもしくは要素無しでも良いか。 | boolean | |||
default | その要素のエディタ上でのデフォルト値を指定する。 | typeによる | |||
enum | string要素をいくつかの値に固定する。 | string array | |||
ref | 他のスキーマをインポートする | string | スキーマIDを指定する |
旧OneOf関連
プロパティ名 | 説明 | プロパティの型 | フォーマット | エディタ上の挙動 | コード生成時の挙動 |
---|---|---|---|---|---|
switch | 要素の値ごとのスキーマを変更するとき、その要素のパスを指定する
caseとセットで使う。 |
string | 絶対パス or 相対パス
指定出来るタイプはstring, number, integer, boolean |
||
case | switchで指定した要素でどのスキーマに分岐するかを記述する。
switchとセットで使う。 |
object array | when, typeがMUST | ||
when | case内で、そのスキーマとなる値を設定する。 | switchで指定したタイプによる |
エディタ、コード生成関連
プロパティ名 | 説明 | プロパティの型 | フォーマット | エディタ上の挙動 | コード生成時の挙動 |
---|---|---|---|---|---|
isDefaultOpen | その要素を表示時に展開しておくか | boolean | |||
overrideCodeGeneratePropertyName | コードジェネレート時のプロパティ、クラス名を上書きする | string | 任意の文字列 |
新規プロパティ
プロパティ名 | 説明 | プロパティの型 | フォーマット | エディタ上の挙動 | コード生成時の挙動 |
---|---|---|---|---|---|
fixedParameter | パスで指定した要素を特定の値に固定する | object | path 指定する要素のパス
value 固定する値 |
無し |
今は使ってないが将来的に必要になる機能
ユーザーによるスキーマ拡張
schemaExtensionディレクトリにhogehoge.yamlが入っていて、各yamlが拡張情報を持っている感じ。
以下のような拡張スキーマがあったとき
extensions: - schemaId: item path: properties[0]/items/properties schema: - key: hp type: integer default: 100 optional: true
こうする
変更前 | 変更後 |
---|---|
id: items type: object isDefaultOpen: true properties: - key: data type: array items: type: object thumbnail: imagePath properties: - key: itemGuid type: uuid autoGenerated: true - key: name type: string - key: maxStack type: integer default: 100 |
id: items type: object isDefaultOpen: true properties: - key: data type: array items: type: object thumbnail: imagePath properties: - key: itemGuid type: uuid autoGenerated: true - key: name type: string - key: maxStack type: integer default: 100 # ---- ここが追加分 ---- - key: hp type: integer default: 100 optional: true |
...みたいな
スキーマの拡張の順番等をちゃんと定義しないといけなかったり、例みたいにindexを直で指定すると他のスキーマを拡張したときに意図した拡張ができないと言ったリスクがあるので、色々検討事項が多い。
ただ、これはスキーマをロードしてUIを構築する前段階で行うものなので、今置いておいても大きな問題にはならないはず。
複数modロード
複数のmodをロードするということは、当然複数の実データファイルを読み込む必要がある。
どうすればいいか思いついていないが、root直下のdata配列だけマージする、もしくはmergeableといったプロパティを容易して、複数ロードしたときにマージするかオーバーライドするかと言った情報を付与できるようにするのが良いのかもしれない。
パッケージマネージャー
package.jsonみたいなものを定義して、パッケージマネージャーからmodをDLしてnode_cache的なところに全部ぶち込むみたいな処理をする必要がある。