3

请确认(或反驳)模式定义(.xsd 文件)中的此枚举是多余的(由于第二个 simpleType 只允许任何长度为 5 个字符或更少的内容):

<simpleType name="decision">
    <annotation>
        <documentation>It will decide the flow</documentation>
    </annotation>
    <union>
        <simpleType>
            <restriction base="string">
                <enumeration value="yes"/>
                <enumeration value="no"/>
                <enumeration value="maybe"/>
            </restriction>
        </simpleType>
        <simpleType>
            <restriction base="string">
                <maxLength value="5"/>
            </retriction>
        </simpleType>
    </union>
<simpleType>

我们的应用程序中有很多这样的东西,所以我们应该优化它。

4

2 回答 2

1

如果您只使用模式进行验证,那是多余的。

如果您将模式用于数据绑定、模式感知的 XSLT/XQuery 处理、文档、生成实例或生成表单,那么这种设计有时会很有用。它有时还可以使您的架构更具可扩展性/可定制性。(但这些是关于工会的一般观点,我不确定你的具体情况是否有用。)

于 2012-11-07T18:22:20.193 回答
1

您所看到的更像是 XSD 作者用来为我所说的“可扩展枚举”提供前向/后向兼容性的模式。

对于某些人来说,这是一个矛盾的说法。对我来说,这意味着一个人必须准备好执行该合约,以优雅地处理列出的值以外的值。

合约设计者决定,对于那些特定类型,不应该仅仅因为一些消费者可能没有围绕枚举值的业务逻辑,而其他消费者可能没有“快速失败”拒绝(通常由 XSD 验证器完成) 。

当然,它最终似乎确实是一种“令人困惑”的文档方式......想象一下,尽管 XSD 到代码实现(如 .NET 的 xsd.exe、svcutil.exe 或 Java JAXB)会非常聪明(它们不是)至于仍然创建一个枚举类型,具有yesnomaybeother,后者是所有其他值的全部。我想知道,假设上述情况,您是否仍会认为这是多余的?代码覆盖专家会喜欢它...

于 2012-11-07T16:00:45.427 回答