【发布时间】:2016-05-27 14:50:22
【问题描述】:
我怎样才能实现这样的目标:
<xs:element name="getSubjectProductsResponse">
<xs:complexType>
<xs:sequence minOccurs="0" maxOccurs="unbounded">
<xs:element name="Products">
<xs:complexType>
<xs:sequence>
<xs:element name="Date" type="xs:date"/>
<xs:element name="Branch" type="xs:date" minOccurs="0"/>
<xs:element name="State" type="xs:string">
<xs:element name="ProductDetail">
<xs:complexType>
**<xs:choice>
<xs:element name="Account" type="ns:TAccount"/>
<xs:element name="KK" type="ns:TCreditCard"/>
<xs:any/>
</xs:choice>**
</xs:complexType>
</xs:element>
此架构无效。
它是产品列表服务响应消息结构的一部分。 对于响应消息中的每个产品,都有公共属性(日期、分支...)和特定于特定产品类型的属性(在 ProductDetail 元素中)。这就是使用“选择”的原因。 因此,在 ProductDetail 中,应该只有一个产品元素,KK 或 Account。
但将来可能会发生,我需要添加另一种类型的产品。当这种情况发生时,我不想影响对这个产品不感兴趣的消费者。我希望他们仍然能够使用新型产品验证消息(无需更改其代码)。
简而言之,我试图要求 Account 或 KK 或 xs:any 其他元素之一。
有什么方法,我如何在 XSD 中实现这一点?
【问题讨论】:
-
你的意图不明确。您是否试图要求
Account或KK之一,然后是 0 个或更多任何其他元素?请准确说明应该和不应该允许什么。谢谢。 -
抱歉不清楚。但是,是的,你说到点子上了。这正是我想要的。
-
请记住,
<xsd:any/>完全按照您想要的方式执行(在 XSD 1.0 和 1.1 中):它匹配Account元素、KK元素或任何其他元素元素。
标签: xml xsd xsd-validation backwards-compatibility xml-validation