choice
El elemento choice
especifica una elección. De las opciones definidas, solamente se permite utilizar una.
Consideremos el siguiente documento XSD:
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="objeto" type="propiedades-objeto"/>
<xs:complexType name="propiedades-objeto">
<xs:complexContent>
<xs:restriction base="xs:anyType">
<xs:choice>
<xs:element name="material" type="xs:string" />
<xs:element name="color" type="xs:string" />
</xs:choice>
</xs:restriction>
</xs:complexContent>
</xs:complexType>
</xs:schema>
En el esquema anterior, se está definiendo que <objeto>
debe tener en su contenido algún de los siguientes elementos: <material>
o <color>
. Solo puede aparecer uno y es necesario que aparezca uno. No es válido que no aparezca ninguno ni varios de ellos.
Dentro de choice
se deben definir uno o varios elementos element
. Si solo se define uno sería equivalente a declarar un element
dentro de un sequence
o de un all
.
El documento XSD se puede acortar omitiendo compleContent
y restriction
, quedando de la siguiente manera:
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="objeto" type="propiedades-objeto"/>
<xs:complexType name="propiedades-objeto">
<xs:choice>
<xs:element name="material" type="xs:string" />
<xs:element name="color" type="xs:string" />
</xs:choice>
</xs:complexType>
</xs:schema>
Ejemplos de documentos XML válidos son los siguientes:
<objeto>
<material>Plástico</material>
</objeto>
<objeto>
<color>Gris</color>
</objeto>