xml xsd xsd-validation xsd-1.1

xml - Cómo hacer que el tipo dependa del valor del atributo usando Asignación de tipo condicional



xsd xsd-validation (1)

Puede hacerlo utilizando la Asignación de tipo condicional de XSD 1.1:

<?xml version="1.0" encoding="UTF-8"?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:vc="http://www.w3.org/2007/XMLSchema-versioning" elementFormDefault="qualified" vc:minVersion="1.1"> <xs:element name="listOfA"> <xs:complexType> <xs:sequence> <xs:element name="a" maxOccurs="unbounded"> <xs:alternative test="@type = 1" type="a1Type"/> <xs:alternative test="@type = 2" type="a2Type"/> </xs:element> </xs:sequence> </xs:complexType> </xs:element> <xs:complexType name="a1Type"> <xs:sequence> <xs:element name="name"/> <xs:element name="surname"/> </xs:sequence> </xs:complexType> <xs:complexType name="a2Type"> <xs:sequence> <xs:element name="name"/> <xs:element name="id"/> </xs:sequence> </xs:complexType> </xs:schema>

Tengo un archivo XML como este

<listOfA> <a type="1"> <name></name> <surname></surname> </a> <a type="2"> <name></name> <id></id> </a> </listOfA>

Me gustaría hacer un XSD, de modo que si el valor del atributo "tipo" es 1, los elementos de nombre y apellido deben estar presentes, y cuando es 2, el nombre y la identificación deben estar allí. Traté de generar el XSD en el generador de esquemas XSD , pero hizo que el elemento de apellido e id minOccurs = 0. ¿Cómo podría hacer que funcione?