Схема JSON: Объедините несколько ссылок в свойствах вместе, чтобы «Дополнительные свойства = false»

#arrays #json #jsonschema #json-schema-validator

Вопрос:

Я хотел бы разделить свойства в соответствии с их типом, например:

 {
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "allOf": [
      { "$ref": "type/blue.json#/definition" },
      { "$ref": "type/red.json#/definition"   }
    ]
  }}
 

моя проблема в том, что при ссылке на него (#ref) он не распознает никаких свойств, а при добавлении дополнительных свойств он выдает мне ошибку

в файлах blue.json и red.json у меня определены два разных поля, например:

 # blue.json
"definition": { 
    "name": {
       "type": "string"                
    }
  }

# red.json
    "definition": {
        "age": {
           "type": "string"
        }
      }
 

и ошибка, которую он мне выдает, выглядит так, как будто он не распознал поле «возраст» и поле имени в файле red.json и blue.json из-за «Дополнительных свойств = false».

Если бы вы могли мне помочь, пожалуйста, я был бы очень благодарен

Ответ №1:

Это то, для чего предназначено ключевое слово «unevaluatedProperties» — оно «просматривает» подсхемы, содержащие ключевые слова «свойства» (и дополнительные свойства, а также свойства шаблонов), принимая во внимание эти подсхемы при проверке того, какие свойства не были определены и, следовательно, не разрешены.

Обратите внимание, что это ключевое слово является новым для draft2019-09, поэтому, если вы используете оценщик draft7 или более ранних версий, оно недоступно.