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

Xsd 即使对于百叶窗模式中的字符串类型,我们也应该显式声明一个简单类型吗,xsd,Xsd,我使用venetian blinds模式来设计XML模式,它要求所有类型都在全局级别声明,所有元素都使用在全局范围中定义的类型 我的问题是: 如果我想声明两个元素,它们是没有其他限制的简单字符串,我应该在全局范围内声明它们,然后使用它们吗?或者我可以直接在元素本身内部声明一个简单类型吗?我是否在下面列出的第二个场景中打破了百叶窗 例如,我可以执行以下两种操作之一: <xsd:schema> <xsd:simpleType name="ApplicantName">

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

我的问题是:

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

例如,我可以执行以下两种操作之一:

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

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


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

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


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

我想说:这取决于你。Venetian Blinds的目标是重用类型,但除非您的某些元素共享一个共同的限制,例如,后端数据库施加的字段长度,否则您将无法从严格遵循此模式中获得任何好处。

我想说:这取决于具体情况。Venetian Blinds的目标是重用类型,但除非您的某些元素共享一个共同的限制,例如后端数据库施加的字段长度,否则您将无法从严格遵循此模式中获得任何好处。

很抱歉吹毛求疵,但这些是元素,而不是属性。@Filburt,感谢您指出这一点。那是个打字错误。更正了。很抱歉吹毛求疵,这些是元素,不是属性。@Filburt,谢谢你指出。那是个打字错误。更正了。