JSON Schema子目录组件$ref引用路径规范确认
JSON Schema子目录组件$ref路径取值方案解答
核心结论
选择方案2,message.schema.json中直接写"$ref": "key.schema.json"和"$ref": "data.schema.json"即可。
判定依据
JSON Schema规范中,相对路径格式的$ref,解析基准是包含该$ref的Schema文件本身的加载URI,而非引用它的父级Schema文件的路径:
- 你的
main.schema.json加载路径为[项目根目录]/main.schema.json,其中"$ref": "components/message.schema.json"会被解析为[项目根目录]/components/message.schema.json,可正确加载目标文件 - 当
message.schema.json被加载时,它的基准路径就是[项目根目录]/components/,同目录下的文件直接写文件名即可,解析后路径为[项目根目录]/components/key.schema.json,完全匹配文件结构 - 如果选择方案1,路径会被解析为
[项目根目录]/components/components/key.schema.json,多了一层components目录,会出现文件找不到的错误。
补充注意事项
你当前所有Schema文件都配置了相同的$id值,这是错误配置:$id是单个Schema的唯一标识,重复值会导致解析器缓存冲突,如果你不需要通过$id指定基础URI,直接删除所有文件中的$id字段即可,不会影响相对路径的解析逻辑。
内容的提问来源于stack exchange,提问作者Eric Broda
相关产品推荐
相关产品推荐

