2017-02-06 17 views
1

я кодирование следующей 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.

ответ

1

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

"properties": { 
    "stdItem": { "$ref": "#/definitions/stdItem" } 
}