2015-01-12 6 views
2

У меня есть два поля в моей схеме - одно из них - это обязательное свойство, называемое «имя», а другое необязательно (используется для определения свойства сортировки) под названием «nameSort» и я хочу выразитьМожно ли в json-схеме определить ограничение между двумя свойствами

Если определено поле nameSort, поле «name» также должно быть определено как одно и то же значение.

Можно ли выразить такое «межэлементное» ограничение с помощью схемы JSON? На мой беглый обзор JSON Schema здесь http://json-schema.org/latest/json-schema-validation.html говорит нет.

ответ

3

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

{ 
    "type": "object", 
    "dependencies": { 
     "nameSort": ["name"] 
    } 
} 

Однако, вы не можете определить, что два свойства должны иметь одинаковые значения.

Кроме того, почему у вас есть отдельная собственность вообще, если она всегда будет одинаковой? И если он всегда равен, у вас может быть только логический флаг для уменьшения избыточности?

+0

Спасибо за этот совет - это поможет! Да, это устаревший код, и некоторые плохие дизайнерские решения были сделаны уже в производстве с клиентами :-( – kellyfj

+0

Что это такое? Вы забыли, что можете просто «зависить»: {"p1": "p2" } '?: p @kellyfj, это будет работать как свойство _require_, однако, если вы хотите, чтобы у обоих было такое же значение VALUE, вам придется иметь настраиваемое ключевое слово, если вы можете себе это позволить. Теперь это зависит от проверки библиотека, которую вы используете ... – fge

+0

К сожалению, я разработал более сложные ограничения, а затем забыл об этом! Исправлено - спасибо. :) – cloudfeet

5

Старый вопрос, но теперь это можно сделать с помощью json schema v5/v6, используя комбинацию из constant и $data (указатель JSON или относительный указатель JSON).

Пример:

"properties": { 
    "password": { "type": "string" }, 
    "password_confirmation": { "const": { "$data": "1/password" } } 
} 

Где "1/password" относительный указатель JSON говорят «идти на один уровень вверх, а затем посмотреть пароль ключа».