Схема Json не проверяет обязательный атрибут

Я кодирую следующую схему Json:

{
  "$schema": "http://json-schema.org/schema#",
  "title": "Layout",
  "description": "The layout created by the user",
  "type": "object",
  "definitions": {
    "stdAttribute": {
      "type": "object",
      "properties": {
        "attributeValue": {
          "type": "object"
        },
        "attributeName": {
          "type": "string"
        }
      }
    },
    "stdItem": {
      "type": "object",
      "required" : ["stdAttributes"],
      "properties": {
        "stdType": {
          "enum": [
            "CONTAINER",
            "TEXT",
            "TEXTAREA",
            "BUTTON",
            "LABEL",
            "IMAGE",
            "MARCIMAGE",
            "DATA",
            "SELECT",
            "TABLE"
          ]
        },
        "stdAttributes": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/stdAttribute"
          },
          "minItems": 1
        },
        "children": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/stdItem"
          }
        }
      }
    }
  }
}

Когда я устанавливаю следующие данные:

{
    "stdItem": {
      "stdType": "CONTAINER",
      "stdAttributes": [],
      "children": []
  }
}

валидатор говорит, что ошибки нет, но в схеме я использую minItems и ссылку на схему "StdAttribute" в "StdAttributtes".

Я пытался определить это свойство в базовой схеме, но валидатор говорит то же самое.

Как мне проверить тип и количество элементов в «StdAttributes»?

Я использую Java Validator.


person Jeyvison    schedule 06.02.2017    source источник


Ответы (1)


Вам не хватает атрибута properties на верхнем уровне. Прямо сейчас ваша схема проверяет только то, что ваши данные являются объектом. definitions сам по себе ничего не проверяет. Это просто место для хранения схем, на которые можно ссылаться в вашей схеме. Следующее будет минимумом, который вам нужно будет добавить в корень вашей схемы, чтобы получить ожидаемые результаты.

"properties": {
  "stdItem": { "$ref": "#/definitions/stdItem" }
}
person Jason Desrosiers    schedule 06.02.2017