Hoy he necesitado validar que los valores de los atributos de un fichero XML pertenecen a un conjunto de valores concreto.
Encontré las siguientes soluciones, basadas en XSD:
Solución 1:
<xs:element name="car">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="Audi"/>
<xs:enumeration value="Golf"/>
<xs:enumeration value="BMW"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
Solución 2:
<xs:element name="car" type="carType"/>
<xs:simpleType name="carType">
<xs:restriction base="xs:string">
<xs:enumeration value="Audi"/>
<xs:enumeration value="Golf"/>
<xs:enumeration value="BMW"/>
</xs:restriction>
</xs:simpleType>
La principal diferencia entre la solución 1 y la solución 2 reside en que la segunda solución define el tipo carType de modo que pueda ser utilizado por otros elementos. Esto se consigue definiendo carType fuera del elemento car.