Почему jsonschema не проверяет следующее определение из схемы?

У меня есть определение, как показано ниже. И он вообще не проверяет my_field_type_1. Что может быть причиной? Я использую модуль python jsonschema.

definitions:
  TestRouteSchema1:
    required:
    - my_field
    properties:
      my_field:
        type: object
        my_field_type_1:
          $ref: "#/definitions/MyFieldType1"
        my_field_type_2:
          $ref: "#/definitions/MyFieldType2"

person Rohanil    schedule 15.08.2016    source источник
comment
Схема определенно неверна, но я не уверен, что вы пытаетесь сделать. Можете ли вы опубликовать пару примеров данных, которые вы пытаетесь проверить. По крайней мере, один, который должен подтвердить, и один, который не должен.   -  person Jason Desrosiers    schedule 16.08.2016


Ответы (1)


Вы должны вложить my_field_type_1 и my_field_type_1 в новый ключ properties. Так что-то вроде

definitions:
  TestRouteSchema1:
    required:
    - my_field
    properties:
      my_field:
        type: object
        properties:
          my_field_type_1:
            $ref: "#/definitions/MyFieldType1"
          my_field_type_2:
            $ref: "#/definitions/MyFieldType2"
person erosb    schedule 16.08.2016
comment
Ага. Я также узнал, что мне нужно иметь ключ дополнительных свойств. Но я не мог узнать, почему? Вы знаете причину? - person Rohanil; 16.08.2016
comment
если вы определяете тип объекта, то определения свойств должны находиться под ключом свойств. Вот как указывается схема json. Не имеет значения, определяете ли вы тип объекта верхнего уровня или тип вложенного объекта. - person erosb; 16.08.2016
comment
Спасибо, но мне интересно, почему jsonschema позволяет нам неправильно указывать схему. На мой взгляд, это должно вызвать ошибку проверки моей схемы. - person Rohanil; 16.08.2016
comment
Это решение было принято авторами спецификации схемы, чтобы позволить определять дополнительные метаданные в том же документе схемы, который используется другими инструментами. Например. люди могут создавать свои собственные инструменты для автоматического создания пользовательского интерфейса, которые основаны на схеме json, но также нуждаются в некоторых дополнительных метаданных. (редактировать: я не говорю, что это обязательно правильный подход) - person erosb; 16.08.2016