Я хочу разрешить свойства $ role в любом месте документа схемы json, где разрешен тип.Теоретически я должен иметь возможность расширять его, как показано ниже, где я делаю allOf как с мета-схемой схемы json, так и с моим расширением для $ role, которое включает дополнительные свойства для рекурсивного выбора моей мета-схемы расширения.Я обнаружил, что я получаю подтверждение для роли $ верхнего уровня, но не для любой встроенной.Я что-то пропустил?Есть ли какой-то другой способ расширения мета-схемы JSON-схемы?
Я пробовал несколько разных валидаторов, и все они не смогли проверить вторую роль $ в примере.
{
"$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.Первая $ роль успешно прошла проверку.