JSON模式v4中的id属性

JSON模式v4中的id属性,json,jsonschema,Json,Jsonschema,我正在尝试正确地解析更复杂的JSON模式,其中包含引用。但是id属性给了我很多麻烦,我不清楚它是如何从文档中工作的。以下是我仍然没有得到的东西: id属性是否仅限于URI id:http://some.site/my/schema.json 或者一个模式可以有任意的id:foo吗? id属性是分层的吗?如果父模式具有id foo,我假设id不限于uri,子模式具有bar,那么引用子模式的正确方式是foo/bar?还是ID完全独立? 有没有一种方法可以清楚地告诉$ref是否通过id引用了一段模式?

我正在尝试正确地解析更复杂的JSON模式,其中包含引用。但是id属性给了我很多麻烦,我不清楚它是如何从文档中工作的。以下是我仍然没有得到的东西:

id属性是否仅限于URI id:http://some.site/my/schema.json 或者一个模式可以有任意的id:foo吗? id属性是分层的吗?如果父模式具有id foo,我假设id不限于uri,子模式具有bar,那么引用子模式的正确方式是foo/bar?还是ID完全独立? 有没有一种方法可以清楚地告诉$ref是否通过id引用了一段模式? id是一个URI。它可以是相对URI或绝对URI。如果是相对的,则根据父解析范围解析。如果它是绝对的,则不受父范围的影响

因此,考虑到这些,考虑到

它可以是一个任意id,但会被解释为一个相对URI

是-相对URI的解析是针对父作用域进行的

c一个空的$ref就可以做到这一点

规范没有告诉您的一件事是,如果顶级URI是一个相对URI,那么该怎么做—它将根据什么来解决。它可以依赖于实现


作为最佳实践,我建议您在顶层仅使用一个id,并使所有$ref都与此相关,除非您有很好的理由以其他方式使用。

非常好的总结,谢谢!但你所说的c是什么意思?一个空的$ref可以做到这一点吗?我这个问题的意思是,当试图解析$ref时,有没有一种方法可以清楚地知道它是否是通过id引用的?但是由于它必须是一个URI,我想不是…有没有办法清楚地告诉它是否是通过id引用的如果它是一个相对URI,那么它是根据作用域id解析的。如果它是绝对的,那么作用域不会影响它。如果它是相对的,并且没有父作用域,那么您可以假设它将根据当前文档的URI来解决。当以未知的方式加载当前文档时,会出现一些不一致的情况,如编程构造。这种情况主要发生在我们使用诸如$ref:/definitions/表示当前文档根的任何地方的片段标识符时。