将附加约束应用于 JSON 架构中的引用定义
Apply addtional constraints to a refered definition in JSON schema
我在架构中定义了一个validType
,其中每个属性都应该有text
和annotation
。
我想添加额外的约束来细化 course
的 text
必须遵循 "pattern":"[a-z]{2}[0-9]{2}"
。有什么方法可以直接应用约束而无需复制和粘贴 validType
?
的内容
架构:
{
"type": "object",
"definition": {
"validType": {
"description": "a self-defined type, can be complicated",
"type": "object",
"properties": {
"text": {
"type": "string"
},
"annotation": {
"type": "string"
}
}
},
"properties": {
"name": {
"$ref": "#/definitions/validType"
},
"course": {
"$ref": "#/definitions/validType"
}
}
}
}
数据:
{"name":{
"text":"example1",
"annotation":"example1Notes"},
"course":{
"text":"example2",
"annotation":"example2Notes"}}
course
的预期架构应如下所示:
{"course": {
"type": "object",
"properties": {
"text": {
"type": "string",
"pattern":"[a-z]{2}[0-9]{2}"
},
"annotation": {
"type": "string"
}
}
}}
但我没有重复 validType 的大块,而是期待类似于以下格式的内容:
{"course": {
"$ref": "#/definitions/validType"
"text":{"pattern":"[a-z][0-9]"}
}}
是啊!您可以添加约束,但不能修改您引用的约束。
要添加约束,您需要了解 draft-07 和之前版本的 $ref
是子模式存在时唯一允许的键。其他键如果存在则忽略。
因此,您需要创建两个子模式,其中一个具有您的参考,另一个具有您的附加约束。
然后将这两个子模式包装在 allOf
.
中
这是它的样子...
{
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"course": {
"allOf": [
{
"$ref": "#/definitions/validType"
},
{
"properties": {
"text": {
"pattern": "[a-z][0-9]"
}
}
}
]
}
}
}
我在架构中定义了一个validType
,其中每个属性都应该有text
和annotation
。
我想添加额外的约束来细化 course
的 text
必须遵循 "pattern":"[a-z]{2}[0-9]{2}"
。有什么方法可以直接应用约束而无需复制和粘贴 validType
?
架构:
{
"type": "object",
"definition": {
"validType": {
"description": "a self-defined type, can be complicated",
"type": "object",
"properties": {
"text": {
"type": "string"
},
"annotation": {
"type": "string"
}
}
},
"properties": {
"name": {
"$ref": "#/definitions/validType"
},
"course": {
"$ref": "#/definitions/validType"
}
}
}
}
数据:
{"name":{
"text":"example1",
"annotation":"example1Notes"},
"course":{
"text":"example2",
"annotation":"example2Notes"}}
course
的预期架构应如下所示:
{"course": {
"type": "object",
"properties": {
"text": {
"type": "string",
"pattern":"[a-z]{2}[0-9]{2}"
},
"annotation": {
"type": "string"
}
}
}}
但我没有重复 validType 的大块,而是期待类似于以下格式的内容:
{"course": {
"$ref": "#/definitions/validType"
"text":{"pattern":"[a-z][0-9]"}
}}
是啊!您可以添加约束,但不能修改您引用的约束。
要添加约束,您需要了解 draft-07 和之前版本的 $ref
是子模式存在时唯一允许的键。其他键如果存在则忽略。
因此,您需要创建两个子模式,其中一个具有您的参考,另一个具有您的附加约束。
然后将这两个子模式包装在 allOf
.
这是它的样子...
{
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"course": {
"allOf": [
{
"$ref": "#/definitions/validType"
},
{
"properties": {
"text": {
"pattern": "[a-z][0-9]"
}
}
}
]
}
}
}