Ejercicio de XSD - Números y letras
Dado el siguiente documento XML:
<?xml version="1.0" encoding="UTF-8"?>
<fichas xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="fichas.xsd">
<ficha numero="01" letra="Z">
<codigo>11</codigo>
<nombre>Ana Sanz Tin</nombre>
</ficha>
<ficha numero="02">
<codigo>12</codigo>
<nombre>Iker Rubio Mol</nombre>
</ficha>
</fichas>
Escribir el contenido del archivo "fichas.xsd" que permita validarlo, teniendo en cuenta que:
- Tanto el atributo numero como el elemento "código" utilizan la misma restricción que solamente les permite tomar un valor entero expresado con dos dígitos comprendidos entre "00" y "19".
- El atributo letra puede tomar por valor una de las siguientes letras: "X", "Y" o "Z". La restricción debe definirse de forma que solamente pueda ser utilizada por dicho atributo.
- Para cada ficha se tiene que indicar un número, obligatoriamente. Sin embargo, la letra es opcional.
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="codigo" type="dosDigitos"/>
<xs:element name="nombre" type="xs:string"/>
</xs:sequence>
<xs:attribute name="numero" type="dosDigitos" use="required"/>
<xs:attribute name="letra">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:pattern value="[XYZ]"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:simpleType name="dosDigitos">
<xs:restriction base="xs:integer">
<xs:pattern value="[01][0-9]"/>
</xs:restriction>
</xs:simpleType>
</xs:schema>