XSD 元素可以包含布尔值或属性吗?

An XSD element can contains a bool value or an attribute?

我如何定义 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>

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

让这两个选项都可用似乎不是明智的服务合同设计。它违反了 SOA 服务设计的原则,所以我强烈建议不要这样做。原因如下:

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

我的建议 - 只坚持某种形式的 Request 2 格式,让 Option 可选。正如 Martin Honnen 在他的评论中指出的那样,我将通过添加一个简单的元素序列来做到这一点。