XML Schema中的枚举定义是多余的

时间:2012-11-07 13:20:41

标签: xml xsd

请确认(或反驳)架构定义(.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>

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

2 个答案:

答案 0 :(得分:1)

你看到的是XSD作者用来为我称之为“可扩展枚举”的前向/后向兼容性的模式。

对于某些人来说这是矛盾的。对我而言,这意味着必须准备好本合同的实施,以便优雅地处理除列出的值之外的其他值。

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

当然,它最终似乎对文档来说是一种“令人困惑”的方式......想象一下,用于代码实现的XSD,如.NET的xsd.exe,svcutil.exe或Java JAXB,会非常聪明(他们'但是仍然要创建一个枚举类型,包括yesnomaybe其他,后者是所有其他值的捕获全部。我想知道,假设上述情况,你仍然会认为这是多余的吗?代码覆盖专家会喜欢它......

答案 1 :(得分:1)

如果您仅使用架构进行验证,则这是多余的。

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