JSON Schema中$id与$anchor的区别是什么?
$id 和 $anchor 的核心区别
定位性质不一样:
$id是给子模式分配一个独立的URI(哪怕是相对路径),相当于给这个子模式单独开了个“身份地址”。比如例子里的"$id": "insect",会结合父级$id生成完整地址http://www.example.com/insect,其他外部Schema文档也能通过这个地址直接引用它;而$anchor只是当前文档内的一个锚点,依附于当前文档的$id,完整引用地址是http://www.example.com/schema#insect,只能在当前文档或者引用整个文档的地方通过锚点定位。影响路径解析的方式不同:如果子模式用了
$id,后续子模式里的相对路径引用(比如$ref)都会以这个$id为基础解析;而$anchor不会改变基础路径,所有相对引用还是跟着最顶层或者父级的$id走。适用场景有差异:要是你的子模式需要被外部其他Schema独立引用,或者得有自己专属的身份标识,就用
$id;如果只是在当前Schema内部复用某段规则,$anchor更轻量,就是个文档内的“书签”,不会额外创建新的命名空间。唯一性要求不同:
$id在整个Schema的URI空间里必须全局唯一,不能有两个不同Schema用同一个$id;而$anchor只需要在它所属的$id命名空间内唯一就行,不同文档里可以重名,因为加上文档地址后的完整引用是不一样的。
内容的提问来源于stack exchange,提问作者Roger Costello
相关产品推荐
相关产品推荐

