首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么glTF模式定义了这样的枚举?

为什么glTF模式定义了这样的枚举?
EN

Stack Overflow用户
提问于 2019-05-24 03:06:12
回答 1查看 52关注 0票数 2

如果我在glTF 2.0模式中搜索“枚举”,我会看到很多枚举的定义,比如:

代码语言:javascript
复制
        "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"
                }
            ]
        },

(来自camera schema)

我对此有几个问题:

  1. 我不明白为什么这是anyOf而不是oneOf?我的理解是相机类型要么是透视的,要么是正交的,而我对json模式的理解是'anyOf' allows validation against multiple values in the array).
  2. I不理解“类型”:“字符串”字段?对我来说,这读起来好像任何字符串值都是有效的?这似乎与glTF?

的摄像头定义不一致。

这样的枚举有多个实例。另请参阅:here here

提前感谢任何人可以提供的任何清晰度。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-05-24 03:45:25

当时(2017年)我们使用的是JSON schema draft v4,对枚举的支持还没有达到我们需要的程度。以前有一个简单的枚举列表,但我要求在模式中有每个枚举的描述。这可以更好地记录模式中的各个枚举值,并允许格式化软件显示单个枚举值的描述。我在这里提交了一个问题:

https://github.com/KhronosGroup/glTF/issues/891

在这个问题下,oneOf发现了一个问题,使其与TypeScript不兼容,于是决定改用anyOf。尽管有此更改,但您仍然只能选择一个可用的枚举。

后来,在实现此更改的Pull请求中,规范编辑器之一explained表示,末尾的额外"type" : "string"是为了允许未来的向前兼容性。基本上,这意味着允许(并鼓励) glTF 2.0扩展定义核心glTF 2.0模式中不存在的新枚举值,并且它们可以在不违反模式的情况下这样做。但是,它们不能随意添加新字段,因为模式对此有严格的要求。新字段必须放入具有适当名称的extensionextras对象中。但是新的枚举可以直接在现有枚举所在的同一字段中进行。

最终,我们得到的模式对于人类来说可能有点麻烦,但在处理JSON模式的各种验证软件中都能很好地工作。而且人们可以只看Properties Reference README,而不是原始的模式文件,这样看起来更方便。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56281523

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档