在xsd强制(soap)中标记一个元素,两个元素也可以同时存在
我有一个模式,我希望其中任何一个元素都是必需的,它们不应该重复 已编辑--在这里,有效的请求可以在请求中同时包含查询和id,或者只包含查询或id元素也是有效的。 e、 g:在xsd强制(soap)中标记一个元素,两个元素也可以同时存在,soap,xsd,Soap,Xsd,我有一个模式,我希望其中任何一个元素都是必需的,它们不应该重复 已编辑--在这里,有效的请求可以在请求中同时包含查询和id,或者只包含查询或id元素也是有效的。 e、 g: 测试 1. 有效请求: 使用query和id元素 仅包含查询元素 只有id元素 无效请求: 没有查询和id元素 具有多个查询元素 具有多个id元素 我希望查询或id必须存在。其中一项是强制性的。 我试过以下方法: <xs:sequence> <xs:element
测试
1.
有效请求:
<xs:sequence>
<xs:element minOccurs="0" name="id">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:minLength value="1" />
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element minOccurs="0" name="query">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:minLength value="1" />
</xs:restriction>
</xs:simpleType>
</xs:element>
</xs:sequence>
这里的问题是它们都不是强制性的,将任何一个设置为minoccurs=1将使该字段成为强制性的(例如,如果我将id标记为minoccurs=1,则id字段是强制性的,但我的有效请求只能有查询而不能有id),并且可能同时存在两个标记
我也试过选择标签
使用simple choice with将使这些标记重复,这也是我不希望的。标记不应重复。为什么
xs:choice
不起作用?它不必允许重复;它将自然地处理您对查询
或id
的需求,一次,而不是两次;如果在xs:choice中的两个元素上都将minOccurs设置为1,那么验证器将不允许空的选项组。它会坚持选择包含一些东西。我想这正是你想要的。谢谢你的回复。我编辑了这个问题以提供更多的例子。希望这能澄清我的疑问。为什么xs:choice
不起作用?它不必允许重复;它将自然地处理您对查询
或id
的需求,一次,而不是两次;如果在xs:choice中的两个元素上都将minOccurs设置为1,那么验证器将不允许空的选项组。它会坚持选择包含一些东西。我想这正是你想要的。谢谢你的回复。我编辑了这个问题以提供更多的例子。希望这能澄清我的疑虑。
<xs:sequence>
<xs:element minOccurs="0" name="id">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:minLength value="1" />
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element minOccurs="0" name="query">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:minLength value="1" />
</xs:restriction>
</xs:simpleType>
</xs:element>
</xs:sequence>