2017-01-31 3 views
2

Предоставлено часть схемы называется location так:

{ 
    type: 'object', 
    required: [ 'country' ], 
    additionalProperties: false, 
    properties: { 
    country: { 
     enum: [ 'DE', 'CH', 'AT' ], 
    }, 
    postalCode: { type: 'string' }, 
    }, 
}; 

В большинстве наших случаев использования местоположение валидный дается только код страны. Тем не менее, мы имеем несколько случаев, когда мы также должны требовать почтовый индекс.

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

{ 
    type: 'object', 
    required: [ 'name', 'location' ], 
    additionalProperties: false, 
    properties: { 
    location: { $ref: 'location' }, 
    name: { type: 'string' }, 
    website: { type: 'string' }, 
    }, 
}; 

Есть ли способ в JSON Schema использовать $ реф, но и расширить его так, чтобы location свойства в company схемы автоматически потребует postalCode? Нашим текущим решением является создание второй схемы на основе location, где мы просто изменили атрибут required, но я надеюсь, что есть лучший способ.

спасибо.

+0

Доступны следующие варианты: https://github.com/epoberezkin/ajv/issues/134#issuecomment-242989744. Речь идет не о расширении «требуемого», а аналогичного. – esp

+0

Это проще - см. Ниже – esp

ответ

4

Вы можете

{ 
    type: 'object', 
    required: [ 'name', 'location' ], 
    additionalProperties: false, 
    properties: { 
    location: { 
     allOf: [ 
     { $ref: 'location' }, 
     { required: [ 'postalCode' ] } 
     ] 
    }, 
    name: { type: 'string' }, 
    website: { type: 'string' } 
    } 
} 
Смежные вопросы