【发布时间】:2023-03-03 02:16:01
【问题描述】:
我想在 json 模式文档中允许类型的任何地方允许 $role 属性。从理论上讲,我应该能够将它扩展如下,其中我针对 json 模式元模式和我的 $role 扩展执行 allOf,其中包括用于递归获取我的扩展元模式的附加属性。我发现我得到了顶级 $role 的验证,但没有得到任何嵌入式角色的验证。我错过了什么吗?我应该以其他方式扩展 JSON Schema 元模式吗?
我尝试了一堆不同的验证器,但它们都无法验证示例中的第二个 $role。
{
"$schema": "http://json-schema.org/draft-07/schema#",
"definitions": {
"role": {
"type": "string",
"pattern": "^((lg)|(unionType\\([a-zA-Z][a-zA-Z0-9.]*\\)))$"
},
},
"allOf": [
{
"$ref": "http://json-schema.org/draft-07/schema#"
},
{
"properties": {
"additionalProperties": {
"$ref": "#"
},
"$role": {
"oneOf": [
{
"$ref": "#/definitions/role"
},
{
"type": "array",
"items": {
"$ref": "#/definitions/role"
}
}
]
}
}
}
]
}
使用此架构的示例:
{
"$schema": "schema.json",
"title": "Prompt",
"$role": "unionType(Microsoft.IPrompt)",
"properties": {
"prompt": {
"type": "string",
"$role":"foo"
}
}
}
我期望的是,根据架构,第二个角色应该是无效的。我得到的是它是有效的,即使它与 $role 模式不匹配。第一个 $role 确实验证成功。
【问题讨论】:
标签: jsonschema