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?