WorldCodex YAMLスキーマ定義

概要

本ドキュメントは、YAML文法の唯一のリファレンスである GameElementDefinition.md をもとにした、WorldCodex の YAML ファイルの形式的なスキーマ定義(JSON Schema Draft 2020-12、 WorldCodex.schema.json)の保守方針をまとめたものです。個別の世界描写(ClimateSystem.md・RecipeSystem.md・ ContainerSystem.md・ActionSystem.md・TerrainGeneration.md・ExplorationSystem.md)の内容そのものは スキーマの対象外で、それらが使う文法の妥当性のみを検証します。

スキーマの正はローダーの実装(src/loader/WorldCodexYamlLoader.ts と関連する parse*.ts モジュール群)です。本スキーマはローダーが 受け付ける文法の機械的な近似であり、乖離を見つけたらローダーに合わせてスキーマを直します。

1. 検証方法

npm test が毎回検証します(tests/world-codex/worldCodexSchema.test.ts。ajv の Draft 2020-12 バリデータを使う)。手で走らせて確かめるものではないので、乖離はその場で赤になります。

見るものを次のように分け、赤の意味が分かれるようにしています。

受理だけを見ると、スキーマを緩めれば緑になってしまうので、拒否も併せて見ます。

2. スキーマの範囲

2.1 含めたもの

GameElementDefinition.md の3〜14節が定める文法全体(ルート構造・object_defs/traits・props・rangeイベント・ passives・conditions・active・pick・interactions・recipes・slots)。 例外は2.2節を参照。

2.2 対象だが中身を検証しないもの・ローダー未実装のもの

3. スキーマ化にあたって判断した細部(ドキュメント上は未確定・省略されていた点)

以下は、各ドキュメントの記述からは一意に決まらなかったものの、スキーマとして形にするために暫定的に判断した点です。 実装時に見直してください。

4. 使い方

WorldCodex.schema.json は JSON Schema Draft 2020-12 準拠です。YAML ファイルをパースして得られるオブジェクトに対して、 一般的な JSON Schema バリデータ(Node.js の ajv 8、Python の jsonschema 等)でそのまま検証できます。同梱ぶんを まとめて掛けるのは1節の試験なので、単体で走らせるならこれだけで足ります。

npx vitest run tests/world-codex/worldCodexSchema.test.ts

5. 未決事項・今後の検討課題