如果我在GLTF 2.0模式中搜索"枚举",我会看到很多枚举的定义:
"type": {
"description": "Specifies if the camera uses a perspective or orthographic projection.",
"gltf_detailedDescription": "Specifies if the camera uses a perspective or orthographic projection. Based on this, either the camera's `perspective` or `orthographic` property will be defined.",
"anyOf": [
{
"enum": [ "perspective" ]
},
{
"enum": [ "orthographic" ]
},
{
"type": "string"
}
]
},
(来自相机模式(
我有几个问题:
我不明白为什么这是一个而不是一种?我的理解是,相机类型是透视图或拼字法,我对JSON模式的理解是," Anyof"允许对数组中的多个值进行验证(。
我不明白"类型":"字符串"字段?对我来说,读起来好像有任何字符串值有效吗?这似乎与GLTF的相机定义不一致?
有多种类似的枚举实例。也可以看看:这里
事先感谢某人可以提供的任何清晰度。
在当时(2017(我们使用的是JSON Schema Draft V4,对枚举的支持并不能达到我们需要的位置。以前有一个简单的枚举列表,但我要求在模式中进行每摄氏度描述。这更好地记录了模式中的单个枚举值,并允许格式化软件显示单个枚举值的描述。我在这里提出了一个问题:
https://github.com/khronosgroup/gltf/issues/891
在此问题上,oneOf
发现了一个问题,该问题与Typescript不相容,并决定改用anyOf
。尽管有这种更改,您仍然只能选择其中一个可用的枚举。
稍后,在实施此更改的拉动请求中,一个规格编辑器解释说,最终的额外"type" : "string"
是允许将来的前向兼容性。基本上,这意味着允许(并鼓励(GLTF 2.0扩展名来定义核心GLTF 2.0模式中不存在的新枚举值,并且它们可以在不违反模式的情况下这样做。他们不能任意添加新字段,但是由于模式严格。必须将新字段放置在适当名称的extension
或extras
对象中。但是新的枚举可以在现有枚举的同一领域中直接进行。
最终,我们最终获得了一个模式,这对于人类来说可能有些麻烦,但是在涉及JSON Schemas的各种验证软件中都很好地工作。而且人类只能查看属性参考读数而不是原始模式文件,这在眼睛上更容易。