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 在他的评论中指出的那样,我将通过添加一个简单的元素序列来做到这一点。
我如何定义 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 在他的评论中指出的那样,我将通过添加一个简单的元素序列来做到这一点。