Ejercicio de XSD - Iniciales al revés
Dado el archivo "fichas.xsd":
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="fichas">
<xs:complexType>
<xs:sequence>
<xs:element name="ficha" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name="nombre" type="xs:string"/>
<xs:element name="iniciales">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:pattern value="[A-Z][A-Z][A-Z]"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="edad" type="xs:integer"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
Realizar los cambios necesarios en "fichas.xsd", para que el siguiente documento XML sea válido:
<?xml version="1.0" encoding="UTF-8"?>
<fichas xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="fichas.xsd">
<ficha>
<nombre>Ana Sanz Tin</nombre>
<iniciales>AST</iniciales>
<edad>22</edad>
<iniciales-al-reves>TSA</iniciales-al-reves>
</ficha>
<ficha>
<nombre>Iker Rubio Mol</nombre>
<iniciales>IRM</iniciales>
<edad>23</edad>
<iniciales-al-reves>MRI</iniciales-al-reves>
</ficha>
</fichas>
Nota: hay que tener en cuenta que el elemento iniciales-al-reves debe ser del mismo tipo que iniciales, y dicho tipo solamente deberá definirse una vez.
Solución:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="fichas">
<xs:complexType>
<xs:sequence>
<xs:element name="ficha" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name="nombre" type="xs:string"/>
<xs:element name="iniciales" type="tresLetras"/>
<xs:element name="edad" type="xs:integer"/>
<xs:element name="iniciales-al-reves" type="tresLetras"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:simpleType name="tresLetras">
<xs:restriction base="xs:string">
<xs:pattern value="[A-Z][A-Z][A-Z]"/>
</xs:restriction>
</xs:simpleType>
</xs:schema>
Ampliación del ejercicio
Si se quisiera permitir que las tres letras de iniciales e iniciales-al-reves, sean minúsculas o mayúsculas indistintamente; en lugar de [A-Z][A-Z][A-Z] ¿qué se podría escribir?
Solución:
[a-zA-Z][a-zA-Z][a-zA-Z]