xsd:any + 选择里面的其他元素
xsd:any + other elements inside choice
我怎样才能实现这样的目标:
<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 元素中)。这就是使用 "choice" 的原因。
因此,在 ProductDetail 中,应该只有一个产品元素,要么是 KK,要么是 Account。
但将来可能会需要添加其他类型的产品。当这种情况发生时,我不想影响那些对该产品不感兴趣的消费者。我希望他们仍然能够使用新型产品验证消息(无需更改代码)。
简而言之,我试图要求 Account
或 KK
之一或一个 xs:any
其他元素。
有什么办法,我怎样才能在XSD中实现这个?
XSD 1.1
此 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>
备注:
- 以上解决方案仅适用于 XSD 1.1。您的要求与 XSD 1.0.
下的 Unique Particle Attribution 冲突
- 默认情况下
xs:any
有 processContents="strict"
。看
processContents strict vs lax vs skip for xsd:any
processContents
. 的各种值的解释
我怎样才能实现这样的目标:
<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 元素中)。这就是使用 "choice" 的原因。 因此,在 ProductDetail 中,应该只有一个产品元素,要么是 KK,要么是 Account。
但将来可能会需要添加其他类型的产品。当这种情况发生时,我不想影响那些对该产品不感兴趣的消费者。我希望他们仍然能够使用新型产品验证消息(无需更改代码)。
简而言之,我试图要求 Account
或 KK
之一或一个 xs:any
其他元素。
有什么办法,我怎样才能在XSD中实现这个?
XSD 1.1
此 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>
备注:
- 以上解决方案仅适用于 XSD 1.1。您的要求与 XSD 1.0. 下的 Unique Particle Attribution 冲突
- 默认情况下
xs:any
有processContents="strict"
。看 processContents strict vs lax vs skip for xsd:anyprocessContents
. 的各种值的解释