请确认(或反驳)架构定义(.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>
我们的应用程序中有很多这样的东西,所以我们应该优化它。
答案 0 :(得分:1)
你看到的是XSD作者用来为我称之为“可扩展枚举”的前向/后向兼容性的模式。
对于某些人来说这是矛盾的。对我而言,这意味着必须准备好本合同的实施,以便优雅地处理除列出的值之外的其他值。
合同设计者决定对于那些特定类型,应该没有“快速失败”拒绝(通常由XSD验证器完成),因为一些消费者可能没有围绕枚举值的业务逻辑,而其他人可能。
当然,它最终似乎对文档来说是一种“令人困惑”的方式......想象一下,用于代码实现的XSD,如.NET的xsd.exe,svcutil.exe或Java JAXB,会非常聪明(他们'但是仍然要创建一个枚举类型,包括yes
,no
,maybe
和其他,后者是所有其他值的捕获全部。我想知道,假设上述情况,你仍然会认为这是多余的吗?代码覆盖专家会喜欢它......
答案 1 :(得分:1)
如果您仅使用架构进行验证,则这是多余的。
如果您正在使用模式进行数据绑定,或者模式感知XSLT / XQuery处理,文档,生成实例或生成表单,那么这种设计有时会很有用。它有时也可以使您的架构更具可扩展性/可定制性。 (但这些是关于工会的一般观点,我不确定你的具体案例是否有用。)