К сожалению, написание мета-схем не так просто. Над ним работают, но пока нет хорошего решения.
Вам нужно будет сделать копию мета-схемы, которую вы хотите расширить, и затем добавить "required": ["type"]
.
Но, пока мы здесь, возможно, я смогу убедить вас не делать этого. Если сделать ключевое слово type
обязательным, то в некоторых случаях возникают проблемы. Вот несколько примеров. https://github.com/json-schema/json-schema/issues/172#issuecomment-124214534
EDIT
Обсудив это далее, мы обнаружили, что в данном конкретном случае нет проблем, с которыми мы обычно сталкиваемся при расширении мета-схем, поскольку он не должен быть рекурсивным. Вот пример расширения схемы draft-06 для включения нового ключевого слова с именем custom
, которое является логическим и требуется только на верхнем уровне схемы properties
.
{
"allOf": [
{ "$ref": "http://json-schema.org/draft-06/schema#" },
{
"properties": {
"properties": {
"patternProperties": {
".*": {
"properties": {
"custom": { "type": "boolean" }
},
"required": ["custom"]
}
}
}
}
}
]
}
А вот пример схемы, которая соответствует этой мета-схеме.
{
"properties": {
"foo": {
"custom": true,
"not": { "type": "string" }
}
}
}
Ключевое слово custom
требуется для схемы "foo", но не для схемы not
или схемы верхнего уровня.