如何在JSON模式中用URL URI标识子模式?
提供下一个如何识别架构的示例:如何在JSON模式中用URL URI标识子模式?,url,uri,jsonschema,Url,Uri,Jsonschema,提供下一个如何识别架构的示例: { "$id": "http://example.com/root.json", "definitions": { "B": { "$id": "other.json", }, } } #/definitions/B http://example.com/other.json http://example.com/other.json#
{
"$id": "http://example.com/root.json",
"definitions": {
"B": {
"$id": "other.json",
},
}
}
#/definitions/B
http://example.com/other.json
http://example.com/other.json#
http://example.com/root.json#/definitions/B
但是,如果根模式root.json
将在/some/path
下定义,而不是在/
路径下定义,那么如何识别呢
{
"$id": "http://example.com/some/path/root.json",
"definitions": {
"B": {
"$id": "other.json",
},
}
}
应该如何识别other.json
http://example.com/other.json
或:
规范的哪一部分定义了这一点
模式可以通过任何已提供给它们的URI来标识,
包括由“$id”直接给出的JSON指针或其URI。总共
在某些情况下,取消引用“$ref”引用需要首先解析其
值作为根据RFC 3986针对当前基本URI的URI引用
[RFC3986]。
(取消参考章节)[本规范的
“基本URI”是在JSON模式规范中引用的定义
这并不容易理解,因为它非常复杂。对于URL,要解析的引用是非哈希片段,基本URI是最后一个斜杠之前(但包括)的URI部分
(注意:JSON模式定义$id
的值必须是绝对URI,不包含任何片段。)
因此,为了明确回答您的问题,other.json
应标识为http://example.com/some/path/other.json
如果您尝试在本应用程序中使用以下架构,则可以看到此操作
在“C”的
$ref
中,如果您删除/blah
,验证器将抱怨它无法再解析引用。您的问题可以更具体一点吗?不清楚您在问什么。@Relequestual:规范提供了root.json
在//code>路径下定义时的示例。正确的基础http://example.com/
或http://example.com/some/path
如果root.json
是在/some/path
path下定义的?对不起,我还是不清楚你在问什么。你能修改一下你的问题来展示一个完整的例子吗?我不明白你所说的“在下定义”是什么意思因为它有点模棱两可。@Relequestual:done一般来说,基本URI是URI引用解析所依据的URI。这与HTML中在链接中提供引用时使用的标准过程相同,它是根据在其中找到的文档的URI解析的。使用库解析URI引用,因为这并不简单@awwright真正的问题是,“我在哪里可以找到URI引用解析的规范?”.正如你所说,这不是小事,我在查看RFC时发现了这一点!请注意,你可以像我对我们的服务器所做的那样,使用目录blah
中的DirectoryIndex root.json
规则,这意味着你的id不需要提供root.json,这样你的C$ref
就可以是other.json
,ch如果退出,您可以看到它的实际操作,这是一个完整的树设置,我使用它作为directoryindexchema.json
,因为它也适用于所有子目录directories@MartinBarker您假设example.com甚至是一个网络可访问的URI,并且服务器连接到internet,这可能不是事实,我不确定它是否与que相关让我们在JSON模式上讨论这个问题。
http://example.com/some/path/other.json
{
"$id": "http://example.com/blah/root.json",
"definitions": {
"A": {
"$id": "#foo"
},
"B": {
"$id": "other.json",
"definitions": {
"X": {
"$id": "#bar"
},
"Y": {
"$id": "t/inner.json"
}
}
},
"C": {
"$ref": "http://example.com/blah/other.json"
}
},
"properties":{
"a": { "$ref": "#/definitions/C" }
}
}