4

我有一个只能有两个值的属性。
用什么比较好?
图案?

<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>

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

4

2 回答 2

4

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

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

对于它的价值,我会观察到使用枚举的公式可以提供有关每个值的含义或预期用法的文档;可能正是出于这个原因,我通常在这种情况下使用枚举。(“男性”和“女性”的值看起来很简单,但在某些模式中,像这样的枚举还需要包含“未知”和“拒绝状态”的值,用户可能需要关于何时使用的指导使用哪个值。)

于 2012-12-20T17:57:44.633 回答
1

另一件需要注意的事情(就差异而言)是枚举可以进一步编码。也就是说,你可以有一个带有id和value的枚举。认为“价值”与您期望在典型下拉列表中看到的内容相似。ID用于标识系统的价值。所以每个枚举都有一个 ID->Value 对。

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

最后,我曾使用过许多应用服务器技术(如 WAS/JBOSS、TOMCAT、.NET/C#、ESB,如 Tibco、WMB、WPS、WESB、ALBPM、Datapower 等),它们中的每一种在它们的方式上都有一些细微差别做xml验证。注意边界条件验证(null vs空白值vs,无标签,vs标签+ xsi:nil = true)仅举几例。对于某些技术,XML 枚举也属于这一类。他们只是不能很好地支持它(取决于您所谈论的技术)。例如,根据我的经验,我发现 JBOSS 6.0 在验证模式中基于模式的限制方面存在问题。(这只是我的经验,我知道一些 JBOSS 爱好者会来对此提出异议,但是嘿,这不会改变我现在的经验是不是......:)

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

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

于 2014-02-10T13:50:56.020 回答