我正在尝试定义一个有效的 JSON 模式,但当被引用的组件位于子目录中时,我不确定如何构造引用 ("$ref") 值。我已经(详细地)阅读了官方 JSON Schema 站点上的信息,并检查了来自各种 JSON Schema 解析器的测试数据,但是可用的信息要么不清楚要么不可用(或者,当然,我找不到它尽管搜索了几个小时)...
我需要的具体帮助是确认组件目录中文件的引用(引用组件目录中的文件)是否应该在引用中用“组件”定义。(请注意,$id 不可用于提供基本 URI)。
换句话说,“message.schema.json”中的引用应该是:
- 选项 1:“components/key.schema.json”和“components/data.schema.json”,或者,
- 选项2:“key.schema.json”和“data.schema.json”(如下图)
在选项 1 中,“$ref”相对于父路径(“main.schema.json”),在选项 2 中,它相对于当前路径(“message.schema.json”)。
以下是提供进一步背景的信息。
文件结构比较简单,如下图所示:
main.schema.json
- message.schema.json
- key.schema.json
- data.schema.json
文件内容如下所示...
main.schema.json:
{
"$id": "https://example.com/arrays.schema.json",
"description": "main.schema.json",
"type": "object",
"required": [ "messages" ],
"properties": {
"messages": {
"type": "array",
"items": { "$ref": "components/message.schema.json" }
}
}
}
上面的 JSON Schema 引用了“components”目录(main.schema.json 文件下的一个目录)中的文件。
message.schema.json:
{
"$id": "https://example.com/arrays.schema.json",
"description": "message.schema.json",
"type": "object",
"required": [ "message" ],
"properties": {
"message": {
"type": "object",
"required": [ "key", "data" ],
"properties": {
"key": {
"$ref": "key.schema.json"
},
"data": {
"$ref": "data.schema.json"
}
}
}
}
}
并且上面的 message.schema.json 引用了与 message.schema.json 文件位于同一目录中的以下组件:
key.schema.json:
{
"$id": "https://example.com/arrays.schema.json",
"description": "key.schema.json",
"type": "object",
"required": [ "key" ],
"properties": {
"key": {
"type": "string"
}
}
}
数据.schema.json:
{
"$id": "https://example.com/arrays.schema.json",
"description": "data.schema.json",
"type": "object",
"required": [ "data" ],
"properties": {
"data": {
"type": "object",
"required": [ "veggieName", "veggieLike" ],
"properties": {
"veggieName": {
"type": "string",
"description": "The name of the vegetable."
},
"veggieLike": {
"type": "boolean",
"description": "Do I like this vegetable?"
}
}
}
}
}