我怎样才能实现这样的目标:
<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>
此架构无效。
它是产品列表服务响应消息结构的一部分。 对于响应消息中的每个产品,都有公共属性(Date,Branch ...)和特定于特定产品类型的属性(在ProductDetail元素中)。这就是使用&#34;选择&#34;的原因。 因此,在ProductDetail中,应该只有一个产品元素,KK或Account。
但未来可能会发生,我需要添加其他类型的产品。当发生这种情况时,我不想影响对此产品不感兴趣的消费者。我希望他们仍能用新类型的产品验证消息(不改变代码)。
简而言之,我正在尝试要求其中一个Account
或KK
或一个xs:any
其他元素。
有什么办法,我怎样才能在XSD中实现这个目标?
答案 0 :(得分:0)
ProductDetail
的此声明将允许Account
或KK
或xs:any
其他元素:
<xs:element name="ProductDetail">
<xs:complexType>
<xs:choice>
<xs:element name="Account" type="xs:string"/>
<xs:element name="KK" type="xs:string"/>
<xs:any/>
</xs:choice>
</xs:complexType>
</xs:element>
备注:强>
xs:any
有processContents="strict"
。看到
的 processContents strict vs lax vs skip for xsd:any 强>
有关processContents
。