XSD元素可以包含bool值还是属性?

时间:2015-12-23 08:53:01

标签: xml soap xsd

如何定义和xsd元素可以使用以下soap请求格式(其中'MyOption'是可选的,可能不存在)?

请求1:

<sdf:MyElement>true</sdf:MyElement>

请求2:

<sdf:MyElement>
    <sdf:MyOption>xxx</sdf:MyOption>
    <sdf:Value>true</sdf:Value>
</<sdf:MyElement>

我试过这个,但它只适用于Request 2格式:

<xs:element name="MyElement" default="false" minOccurs="0" maxOccurs="1">
   <xs:complexType>
      <xs:simpleContent>
         <xs:extension base="xs:boolean">
            <xs:attribute name="MyOption" type="xs:string" use="optional"/>
         </xs:extension>
       </xs:simpleContent>
   </xs:complexType>
</xs:element>

1 个答案:

答案 0 :(得分:0)

很抱歉,这不是您问题的严格答案,但我必须指出这一点。在wsdl模式中创建这样的元素并不容易。

看起来似乎没有合理的服务合同设计来提供这两种选择。它违反了SOA服务设计的原则,所以我强烈反对它。原因如下:

  • 可能会让消费者和开发者感到困惑;
  • 它损害了服务的可发现性,因为它损害了合同的可解释性 - 这个元素会有一个变量类型,并且在某些情况下表现不同 - 有时它会期望子元素,有时它需要内部文本值;
  • 此类型不会自动生成适当的验证逻辑 - 您必须实现涵盖这两种方案的特定验证逻辑。

我的建议 - 只保留某种形式的Request 2格式,并选择Option。我想通过添加一个简单的元素序列来实现这一点,正如Martin Honnen在他的评论中指出的那样。