XML Schema类型替代测试

时间:2016-11-06 13:57:03

标签: xml soap xsd schema

如何通过ComplexType测试替代类型?

例如,我有ComplexType“client”:

<xs:complexType name="client">
    <xs:sequence>
        <xs:element name="clientId" type="xs:long"/>
        <xs:element name="name" type="xs:string"/>
    </xs:sequence>
</xs:complexType>

并且createOrderRequest:

<xs:element name="createOrderRequest">
    <xs:complexType>
        <xs:sequence>
            <xs:element name="client">
                <xs:alternative type="client"/>
                <xs:alternative type="xs:long"/>
            </xs:element>
        </xs:sequence>
    </xs:complexType>
</xs:element>

如何测试替代品是xs:long还是复杂类型“client”?

1 个答案:

答案 0 :(得分:2)

XSD 1.1中的类型替代方案总是基于测试相关元素的属性值。请参阅规范中的示例:

<xs:element name="message" type="messageType">
  <xs:alternative test="@kind='string'" type="messageTypeString"/>
  <xs:alternative test="@kind='base64'" type="messageTypeBase64"/>
  <xs:alternative test="@kind='binary'" type="messageTypeBase64"/>
  <xs:alternative test="@kind='xml'"    type="messageTypeXML"/>
  <xs:alternative test="@kind='XML'"    type="messageTypeXML"/> 
  <xs:alternative                       type="messageType"/>
</xs:element>

所以你总是通过查看属性来了解你所拥有的类型。

当然,如果您使用的语言可以访问PSVI信息,那么您也可以直接测试类型,例如在模式感知XPath中可以执行

if (message instance of element(message, messageTypeBase64)) then...