【问题标题】:XML Schema type alternatives testXML Schema 类型替代测试
【发布时间】:2016-11-06 13:57:03
【问题描述】:

如何通过 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>

并创建订单请求:

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

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

【问题讨论】:

    标签: xml soap xsd schema


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-02-27
      • 1970-01-01
      • 2012-03-26
      • 2013-01-01
      • 1970-01-01
      • 2013-01-13
      • 2016-06-21
      • 1970-01-01
      相关资源
      最近更新 更多