2016-11-06 94 views
1

如何通过ComplexType测试替代类型?XML Schema类型替代方法测试

比如我的ComplexType “客户端”:

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

如何测试laternative是XS:长期或复合型 “客户端”?

回答

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