Расширенные схемы с AJV

Можно ли генерировать расширенные/разрешенные схемы с помощью AJV, где используется $ref? $ref чрезвычайно полезен для сохранения схем в СУХОМ виде, но не в том случае, если вам нужно расширенное представление схемы.

Когда схема компилируется, возвращаемая функция имеет свойство schema, но возвращает нерасширенную схему, которая изначально была предоставлена ​​функции компиляции. Кроме того, похоже, что в документах об этом ничего нет или даже в поиске Google.

Можно ли получить расширенную схему, где используется $ref?


person oorst    schedule 16.09.2019    source источник
comment
Что вы подразумеваете под расширенной/разрешенной схемой?   -  person Relequestual    schedule 16.09.2019
comment
Под расширенным/разрешенным я подразумеваю, что любой $ref в схеме заменяется фактической схемой, на которую ссылается.   -  person oorst    schedule 17.09.2019
comment
@oorst Есть несколько таких инструментов. npmjs.com/package/json-schema-ref-parser — это , я думаю, наиболее широко используемый.   -  person Jason Desrosiers    schedule 17.09.2019
comment
Остерегайтесь, однако, что иногда они работают не совсем корректно. Если ваши схемы в основном просты, у вас не должно возникнуть никаких проблем. Это более известно как разыменование или, точнее, включение.   -  person Relequestual    schedule 17.09.2019


Ответы (1)


Хотя некоторые инструменты обеспечивают определенный уровень функциональности для этого, не всегда возможно сделать это правильно, а иногда и невозможно. ajv документирует, что не будет реализовывать эту функциональность по следующим причинам:

  1. рекурсивный $refs
  2. Элемент списка $ref не эквивалентен включению объекта, потому что $refs внутри $ref должны быть разрешены на основе идентификатора в исходной схеме, а не на основе идентификатора текущей схемы.

https://github.com/epoberezkin/ajv/issues/336#issuecomment-258538008

person Relequestual    schedule 17.09.2019