有人知道如何在XSD文件中实现以下验证:
当标签TIPO的值为SER时,必须注册标签DETALLES_SERVICIOS,否则,如果值为EQU,则是可选的
我正在使用XSD 1.0版,但无法实现这种验证方式。
预先感谢您的帮助。
XML
<REQUERIMIENTO>
<DETALLES_SOLICITUDES>
<ID_PLAN>BP-7138</ID_PLAN>
<ID_SUBPRODUCTO>AUT</ID_SUBPRODUCTO>
<CANTIDAD>1</CANTIDAD>
<TIPO>SER</TIPO>
<DETALLES_SERVICIOS>
<NOMBRE_USUARIO>JANIO</NOMBRE_USUARIO>
<NUMERO_SERIE>12345</NUMERO_SERIE>
<IN_BODEGA>130</IN_BODEGA>
</DETALLES_SERVICIOS>
</DETALLES_SOLICITUDES>
<DETALLES_SOLICITUDES>
<ID_PLAN>0</ID_PLAN>
<ID_SUBPRODUCTO>SAMSUNG A510 G</ID_SUBPRODUCTO>
<CANTIDAD>1</CANTIDAD>
<TIPO>EQU</TIPO>
</DETALLES_SOLICITUDES>
</REQUERIMIENTO>
XSD
<?xml version="1.0" encoding="utf-8"?>
<!-- Created with Liquid Technologies Online Tools 1.0 (https://www.liquid-technologies.com) -->
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="REQUERIMIENTO">
<xs:complexType>
<xs:sequence>
<xs:element maxOccurs="unbounded" name="DETALLES_SOLICITUDES">
<xs:complexType>
<xs:sequence>
<xs:element name="ID_PLAN" type="xs:string" />
<xs:element name="ID_SUBPRODUCTO" type="xs:string" />
<xs:element name="CANTIDAD" type="xs:string" />
<xs:element name="TIPO">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="SER"/>
<xs:enumeration value="EQU"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element minOccurs="0" name="DETALLES_SERVICIOS">
<xs:complexType>
<xs:sequence>
<xs:element name="NOMBRE_USUARIO" type="xs:string" />
<xs:element name="NUMERO_SERIE" type="xs:unsignedShort" />
<xs:element name="IN_BODEGA" type="xs:string" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
答案 0 :(得分:0)
不可能在XSD-1.0中实现此功能,但是,如果找到使用XSD-1.1的方法,则可以在第二个xs:assert
元素之后使用以下xs:sequence
表达式:>
<xs:assert test="((TIPO = 'SER') and DETALLES_SERVICIOS) or (TIPO='EQU')" />
编辑:@@ MichaelKay,以确保完全不可能。