2015-04-01 2 views
0

Я получил приведенную ниже схему от http://json-schema.org/examples.html, я хочу знать, может ли требуемое ключевое слово быть только на верхнем уровне. или он может также входить в свойства, если есть свойство типа object.I не удалось найти ничего связанного с этим в спецификации http://tools.ietf.org/html/draft-fge-json-schema-validation-00#section-5.4.3.ключевое слово «требуется» в схеме JSON

{ 
    "title": "Example Schema", 
    "type": "object", 
    "properties": { 
     "firstName": { 
      "type": "string" 
     }, 
     "lastName": { 
      "type": "string" 
     }, 
     "age": { 
      "description": "Age in years", 
      "type": "integer", 
      "minimum": 0 
     } 
    }, 
    "required": ["firstName", "lastName"] 
} 

Так в приведенном ниже примере является действительной схемой

{ 
    "title":"Example Schema", 
    "type":"object", 
    "properties":{ 
     "firstName":{ 
     "type":"string" 
     }, 
     "lastName":{ 
     "type":"string" 
     }, 
     "age":{ 
     "type":"object", 
     "properties":{ 
      "minAge":{ 
       "type":"number" 
      }, 
      "maxAge":{ 
       "type":"number" 
      }, 
      "required":[ 
       "minAge", 
       "maxAge" 
      ] 
     } 
     } 
    }, 
    "required":[ 
     "firstName", 
     "lastName" 
    ] 
} 
+0

Ваш вложенный 'required' находится не в том месте. Он должен быть сверстником «свойств», а не дочерним. Вы получили это прямо на верхнем уровне, поэтому я уверен, что это было просто опечатка. – Jason

ответ

1

4.4 Ключевые слова с возможностью подтверждения экземпляров контейнеров (массивы или объекты) проверяют сами экземпляры, а не их дочерние элементы (элементы массива или свойства объекта).

Так что я вижу, что да, вы можете иметь те, на любом уровне, но проверка должна рассматриваться только на том же уровне, что и требуется

+0

, поэтому мое последнее редактирование является допустимой схемой, требующей на нескольких уровнях. – user2478236

+0

Этот ответ неверен. Валидация работает рекурсивно. Фактически, проверка JSON Schema была бы бесполезной, если бы эта цитата означала, что вы думаете, что она делает. Предположим, вы проверяете массив, элементы которого должны соответствовать заданной схеме. Если эти элементы не проверяются, проверка не будет выполняться по ключевому слову 'items', это приведет к сбою в общей проверке массива. Что означает цитата, так это то, что ключевое слово отвечает только за определение того, какая схема должна проверяться. Он не отвечает за проверку схемы. Это происходит на другом шаге. – Jason

+0

@ Джейсон, не могли бы вы подробнее разобраться, я не мог понять валидацию элементов массива, если бы вы могли поделиться простой схемой с проверкой массива, это было бы более понятно. – user2478236

0

required ключевое слово может присутствовать в любой схеме. Это относится ко всем ключевым словам схемы.

(Существует специальный чемодан для мета-ключевого слова $schema, для которых это желательно иметь только на верхнем уровне)

0

Да, required является допустимым ключевым словом в любой схеме. Для вложенных схем нет ограничений.

Чтобы использовать ваш пример, приведена правильная схема и будет проверять, как вы ее хотите.

{ 
    "title": "Example Schema", 
    "type": "object", 
    "properties": { 
     "firstName": { 
      "type": "string" 
     }, 
     "lastName": { 
      "type": "string" 
     }, 
     "age": { 
      "type": "object", 
      "properties": { 
       "minAge": { 
        "type": "number" 
       }, 
       "maxAge": { 
        "type": "number" 
       } 
      }, 
      "required": [ 
       "minAge", 
       "maxAge" 
      ] 
     } 
    }, 
    "required": [ 
     "firstName", 
     "lastName" 
    ] 
} 
Смежные вопросы