模式xml中的模式与枚举

时间:2012-12-20 14:20:02

标签: xml xsd schema

我有一个只能有两个值的属性。
什么是最好使用?
模式?

<xsd:attribute name="sex">
    <xsd:simpleType>
        <xsd:restriction base="xsd:string">
            <xsd:pattern value="male|female" />
        </xsd:restriction>
    </xsd:simpleType>
</xsd:attribute>

或列举?

<xsd:attribute name="sex">
    <xsd:simpleType>
        <xsd:restriction base="xsd:string">
            <xsd:enumeration value="male"></xsd:enumeration>
            <xsd:enumeration value="female"></xsd:enumeration>
        </xsd:restriction>
    </xsd:simpleType>
</xsd:attribute>

如果没有差异,我将使用模式(少一行)

2 个答案:

答案 0 :(得分:4)

两者都是合法的XSD,似乎都不会对XSD简单类型的任何符合甚至部分符合的实现造成问题,并且我预计需要大量数据和非常精确的测量来检测它们之间的任何速度差异。那么问题&#34;哪个更好?&#34;基本上等于问题&#34;对于阅读模式的人来说,哪一个更容易理解?&#34;

这是一个只有你能回答的问题。

对于它的价值,我观察到使用枚举的表述可以提供关于每个值的含义或预期用法的文档;可能由于这个原因,我通常在这种情况下使用枚举。 (值&#34;男性&#34;和&#34;女性&#34;似乎很简单,但在某些模式中,像这样的枚举也需要包含&#34;未知&#34;和&的值#34;拒绝进入状态&#34;,用户可能需要有关何时使用哪个值的指导。)

答案 1 :(得分:1)

另外需要注意的是(就差异而言)是枚举可以进一步编码。也就是说,你可以拥有一个带有id和value的枚举。在哪里考虑“价值”对于您希望在典型的下拉列表中看到的内容是有益的。和ID用于标识系统的值。因此每个枚举都有ID->值对。

现在考虑一下,如果您使用XSLT快速呈现屏幕的xml,您可以编写xslt,以便它可以相应地解析和设置下拉列表。但是,如果你使用模式字符串,你将难以分开它。

最后,我使用过许多Application Server技术(如WAS / JBOSS,TOMCAT,.NET / C#,ESB,如Tibco,WMB,WPS,WESB,ALBPM,Datapower等),每个技术都有一些细微差别关于他们如何进行xml验证。注意边界条件验证(null vs blank value vs,no tag,vs tag + xsi:nil = true)仅举几例。对于某些技术,XML枚举也属于此类别。他们只是不支持它(取决于你所谈论的技术)。例如,在我的经验中,我发现JBOSS 6.0在模式中验证基于模式的限制存在问题。 (多数民众赞成只是我的经验,我知道一些JBOSS爱好者会出现并对此提出质疑,但嘿,现在不会改变我的经验......)

我不喜欢枚举或模式的是您现在在模式中定义业务/系统约束。鉴于您将重用您的模式用于不断发展的体系结构,如果要添加新的允许值,将导致更新现有接口和WSDLS的大量返工。我的解决方案通常涉及在我的解决方案中进行允许的值验证。这允许所有集成层假设进入集成层的消息必须在其内容中有效。

我希望这对某人有帮助......