【发布时间】:2015-08-10 01:49:24
【问题描述】:
我对同一个 xsd 有两种类型的请求:
请求 1
<REQUEST>
<ID_CLIENTE>123456</IDCLIENTE>
<NUMERO_TARJ>11111111111111</NUMERO_TARJ>
<MES_VENC>04</MES_VENC>
<ANO_VENC>18</ANO_VENC>
<MONTO>150.00</MONTO>
</REQUEST>
请求 2
<REQUEST>
<ID_CLIENTE>123456</IDCLIENTE>
<DATOS>1112124548797987984489848468448</DATOS>
<MONTO>150.00</MONTO>
</REQUEST>
以下标签是必需的:
- ID_CLIENTE
- 蒙托
以下标签是有条件的:
- DATOS
- NUMERO_TARJ
- MES_VENC
- ANO_VENC
如果我发送 DATOS 标签,我无法发送 NUMERO_TARJ、MES_VENC 和 ANO_VENC。
如果我发送 NUMERO_TARJ,我必须始终发送 MES_VENC 和 ANO_VENC,但我无法发送 DATOS 标签。
我有这个 XSD,但它不正确并且它不能验证我想要的(我总是必须使用 all 标记):
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="REQUEST">
<xs:complexType>
<xs:all>
<xs:element type="xs:long" name="ID_CLIENTE" minOccurs="1" maxOccurs="1" />
<xs:element type="xs:string" name="MONTO" minOccurs="1" maxOccurs="1"/>
<xs:element minOccurs="1" maxOccurs="1" ref="opcionales" />
</xs:all>
</xs:complexType>
</xs:element>
<xs:element name="opcionales" abstract="true" />
<xs:element type="xs:string" name="DATOS" substitutionGroup="opcionales"/>
<xs:element name="infotarjeta" substitutionGroup="opcionales">
<xs:complexType>
<xs:all>
<xs:element type="xs:long" name="TARJ_NUM" minOccurs="1" maxOccurs="1"/>
<xs:element type="xs:int" name="MES_VENC" minOccurs="1" maxOccurs="1"/>
<xs:element type="xs:int" name="ANO_VENC" minOccurs="1" maxOccurs="1"/>
</xs:all>
</xs:complexType>
</xs:element>
</xs:schema>
请帮我修复这个 XSD。
谢谢!
【问题讨论】:
-
注意:(DATOS)或(TARJ_NUM and MES_VENC and ANO_VENC)是必需的条件。
-
如果
中元素的顺序是固定的,你可以吗?您使用的是 XSD 1.0 还是 XSD 1.1? -
@sergioFC 我认为版本是1.0
-
¿你可以使用 XSD 1.1 吗?
标签: xml validation xsd sax multiple-choice