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

JSON Schema 2020-12相对嵌套$id的URI解析疑问

JSON Schema嵌套$id的URI解析规则详解

你提到的这个测试用例核心是JSON Schema中相对路径$id的解析逻辑——不是简单在父级$id后追加字符串,而是基于父级URI的「目录路径」来拼接。

核心规则拆解

JSON Schema规定:当子schema使用相对路径的$id时,解析的基础是父级schema的基础URI去掉最后一个路径段(把父级URI当成一个文件,取它所在的目录),而不是直接在父级URI末尾追加相对路径。

对应你的测试用例分析

  1. 外层$id是http://localhost:1234/draft2020-12/root,这个URI被视为一个具体的资源(比如名为root的文件),它的「所在目录」是http://localhost:1234/draft2020-12/。
  2. 内层$id是nested.json,这是相对路径,所以会和父级的目录路径拼接,得到http://localhost:1234/draft2020-12/nested.json——这就是为什么结果里没有root。

为什么测试用例的$ref能匹配到B定义

测试用例中的$ref直接指向http://localhost:1234/draft2020-12/nested.json#foo,其中:

  • http://localhost:1234/draft2020-12/nested.json是内层$id解析后的URI,对应子schemaA的基础URI;
  • #foo是子schemaB的$anchor标识,所以这个$ref能精准定位到B的定义(要求类型为整数),因此测试数据1匹配,"a"不匹配。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 05:04:56