feat: 扩展 JSON Schema 支持 — 完整关键字覆盖计划 #82
Reference in New Issue
Block a user
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
问题
当前 meta-schema 和
isValidSchema()仅支持 12 个 JSON Schema 关键字,任何使用未支持关键字的 schema 都会被拒绝存入。这限制了用户定义有效数据约束的能力。JSON Schema 关键字完整覆盖表
基于 JSON Schema Draft 2020-12 / Draft-07 常用关键字。
✅ 已支持(12 个)
isValidSchema()collectRefs()typepropertiesrequiredadditionalPropertiesanyOfoneOfitemsformatcas_ref自定义格式titledescriptionenumconst🔴 未支持 — 需要
collectRefs()适配(有 cas_ref 风险)allOfnotif/then/elsepatternPropertiesprefixItemscontainspropertyNames$ref/$defs🟡 未支持 — 纯约束/叶子(无 cas_ref 风险,加白名单即可)
minimummaximumexclusiveMinimumexclusiveMaximummultipleOfminLengthmaxLengthpatternminItemsmaxItemsuniqueItemsminPropertiesmaxPropertiesdefaultexamplesreadOnlywriteOnlydeprecated$comment$id$schema实施计划
Phase 1 — 叶子约束(🟡 P1)
加白名单即可,不需要改
collectRefs()。minimum,maximum,exclusiveMinimum,exclusiveMaximumminLength,maxLength,patternminItems,maxItems,uniqueItemsPhase 2 — 组合 + 条件 + 叶子 P2(🔴 + 🟡)
需要扩展
collectRefs()。allOf— collectRefs 遍历if/then/else— collectRefs 遍历patternProperties— collectRefs 遍历prefixItems— collectRefs 遍历multipleOf,minProperties,maxProperties,defaultPhase 3 — 低频 + 元数据(🔴 P3 + 🟡 P3)
not,contains,propertyNamesexamples,readOnly,writeOnly,deprecated,$commentPhase 4 —
$ref/$defs(待评估)引入引用系统,复杂度显著提升,暂不纳入。
原始问题(原 #82)
CLI
ucas put @schema走 ajv 验证 meta-schema,meta-schema property 子项定义为{ type: \"object\", additionalProperties: false }无 properties 声明,导致子项含任何 key 都被拒。根因:不是 ajv vs isValidSchema 路径差异,而是 JSON Schema 支持不完整。
小橘 🍊(NEKO Team)
bug: meta-schema additionalProperties 阻止 CLI 创建带类型约束的 schemato feat: 扩展 JSON Schema 支持 — 完整关键字覆盖计划