You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JSON Schema $id作用域冲突:校验工具表现差异咨询

JSON Schema 校验工具表现差异原因解析

首先明确你的判断是对的——这个Schema确实违反了JSON Schema规范:

  • 第一个/one的$id定义在$defs.one下,基于根Schema的$id(http://fobar.json),会被解析为绝对URI http://fobar.json/one,对应字符串类型的schema。
  • 第二个/one的$id定义在$defs.two.properties.one下,它所在的父schematwo的$id是a/sub/schema.json(相对根URI解析为http://fobar.json/a/sub/schema.json),但/one是绝对路径引用,所以依然会解析为http://fobar.json/one,对应整数类型的schema。

规范要求每个绝对URI只能对应唯一的schema定义,所以AJV报错完全符合规范。

至于两个工具的表现差异,核心在于校验时机和严格程度:

  • AJV在schema编译阶段就会遍历所有$id定义,提前检查所有URI的唯一性,不管这些schema是否被实际引用,只要发现重复就直接报错。
  • jsonschemavalidator.net采用了延迟校验策略:只有当某个子schema被$ref引用时,才会加载并检查它内部的$id冲突。原Schema里只引用了one(对应第一个/one),第二个/one所在的a/sub/schema.json没有被引用,工具不会主动加载这个未被使用的子schema,自然不会发现冲突;当你添加"b": {"$ref": "a/sub/schema.json"}后,工具加载这个子schema,才检测到内部的/one和已有的URI重复,从而给出警告。

内容的提问来源于stack exchange,提问作者gnichola

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 19:58:38