我们应该明确地声明一个简单的类型,即使对于百叶窗模式中的字符串类型

时间:2011-07-05 05:10:33

标签: xsd

我使用百叶帘模式来设计我的XML模式,它要求所有类型都在全局级别声明,并且所有元素都使用全局范围中定义的类型。

我的问题是:

如果我想声明2个简单字符串而没有其他限制的元素,我应该在全局范围内声明它们然后使用它们吗?或者我可以在元素本身内直接声明一个简单类型吗?我是否在下面列出的第二种情况中打破了隐形百叶窗?

例如,我可以选择其中之一:

<xsd:schema>
<xsd:simpleType name="ApplicantName">
    <xsd:restriction base="xsd:string"/>
</xsd:simpleType>
<xsd:simpleType name="ApplicantCountry">
    <xsd:restriction base="xsd:string"/>
</xsd:simpleType>
<xsd:element name="Application">
    <xsd:complexType>
        <xsd:sequence>
            <xsd:element name="ApplicantName" type="ApplicantName"/>
            <xsd:element name="ApplicantCountry" type="ApplicantCountry"/>
        </xsd:sequence>
    </xsd:complexType>
</xsd:element>
</xsd:schema>

或者我可以使用它。

<xsd:schema>
<xsd:element name="Application">
    <xsd:complexType>
        <xsd:sequence>
            <xsd:element name="ApplicantName" type="xsd:string"/>
            <xsd:element name="ApplicantCountry" type="xsd:string"/>
        </xsd:sequence>
    </xsd:complexType>

</xsd:element>
</xsd:schema>

2 个答案:

答案 0 :(得分:3)

那么,你为什么选择遵循这种模式?哪个选项提供了模式承诺的好处?回答这些问题,我想你有答案。

在我看来,这种模式需要第一种方法。模式是否实际具有价值,或者是否应该如此严格地遵循该模式是由您决定的。问题的核心是你首先要通过使用模式来实现的目标。

答案 1 :(得分:1)

我会说:这取决于。威尼斯百叶窗的目标是重用类型,但除非你的某些元素共享一个共同的限制,例如,后端数据库强加的字段长度,你不会从宗教上遵循这个模式获得任何东西。