В то время (2017) мы использовали черновик схемы JSON v4, и поддержка перечислений была не на том уровне, на котором нам это было нужно. Ранее был простой список перечислений, но я попросил, чтобы в схеме были описания для каждого перечисления. Это лучше документирует отдельные значения перечисления в схеме и позволяет программному обеспечению форматирования отображать описание отдельного значения перечисления. Я подал вопрос об этом здесь:
https://github.com/KhronosGroup/glTF/issues/891
Далее в этом вопросе была обнаружена проблема с oneOf
, которая делала его несовместимым с TypeScript, и было принято решение переключиться на anyOf
. Несмотря на это, вы все еще можете выбрать только одно из доступных перечислений.
Позже, в Запросе на извлечение, в котором реализовано это изменение, один из редакторов спецификаций объяснил , что дополнительный "type" : "string"
на конце предназначен для обеспечения будущей прямой совместимости. По сути это означает, что расширениям glTF 2.0 разрешено (и рекомендуется) определять новые значения enum, которых нет в базовой схеме glTF 2.0, и они могут делать это, не нарушая схему. Однако они не могут произвольно добавлять новые поля, поскольку схема является строгой. Новые поля должны быть помещены в объект extension
или extras
с соответствующим именем. Но новые перечисления могут идти прямо в ту же область, где находятся существующие перечисления.
В конечном итоге мы получили схему, которая может показаться немного громоздкой для людей, но хорошо работает в широком спектре проверочного программного обеспечения, которое работает со схемами JSON. И люди могут просто взглянуть на Справочник свойств README вместо файлов необработанной схемы, это проще для глаз.