「Master Schema Specification」の版間の差分

提供:moorestechWiki
ナビゲーションに移動 検索に移動
ページの作成:「マスターのスキーマの仕様書」
 
編集の要約なし
 
(同じ利用者による、間の1版が非表示)
1行目: 1行目:
マスターのスキーマの仕様書
マスターのスキーマの仕様書
== 基本的なフォーマット ==
基本的にroot要素にdataの配列が来るものとする。
<pre>
id: idName
type: object
isDefaultOpen: true
properties:
- key: data
  type: array
  overrideCodeGeneratePropertyName: OverrideName
  items:
    type: object
    properties:
    - key: masterId
      type: uuid
      autoGenerated: true
</pre>
== 各プロパティの詳細 ==
=== 基本のプロパティ ===
{| class="wikitable"
|+
!プロパティ名
!説明
!プロパティの型
!フォーマット
!エディタ上の挙動
!コード生成時の挙動
|-
|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関連 ===
{| class="wikitable"
|+
!プロパティ名
!説明
!プロパティの型
!フォーマット
!エディタ上の挙動
!コード生成時の挙動
|-
|switch
|要素の値ごとのスキーマを変更するとき、その要素のパスを指定する
caseとセットで使う。
|string
|絶対パス or 相対パス
指定出来るタイプはstring, number, integer, boolean
|
|
|-
|case
|switchで指定した要素でどのスキーマに分岐するかを記述する。
switchとセットで使う。
|object array
|when, typeがMUST
|
|
|-
|when
|case内で、そのスキーマとなる値を設定する。
|switchで指定したタイプによる
|
|
|
|}
=== エディタ、コード生成関連 ===
{| class="wikitable"
!プロパティ名
!説明
!プロパティの型
!フォーマット
!エディタ上の挙動
!コード生成時の挙動
|-
|isDefaultOpen
|その要素を表示時に展開しておくか
|boolean
|
|
|
|-
|overrideCodeGeneratePropertyName
|コードジェネレート時のプロパティ、クラス名を上書きする
|string
|任意の文字列
|
|
|}
=== 新規プロパティ ===
{| class="wikitable"
!プロパティ名
!説明
!プロパティの型
!フォーマット
!エディタ上の挙動
!コード生成時の挙動
|-
|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
こうする
{| class="wikitable"
|+
!変更前
!変更後
|-
|
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的なところに全部ぶち込むみたいな処理をする必要がある。

2024年10月11日 (金) 22:56時点における最新版

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

基本的なフォーマット[編集 | ソースを編集]

基本的に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的なところに全部ぶち込むみたいな処理をする必要がある。