Saltar al contenido principal

Ejercicio 417

Elabora un documento XSD que permita validar el siguiente documento XML:

<vehiculos>
<vehiculo>
<nombre>Count Zero</nombre>
<modelo>Series I, 80"</modelo>
<fabricacion>
<inicio>
<dia>21</dia>
<mes>07</mes>
<anyo>1949</anyo>
</inicio>
<fin>
<dia>09</dia>
<mes>08</mes>
<anyo>1949</anyo>
</fin>
</fabricacion>
<modificaciones>
<modificacion>Cambiar motor</modificacion>
<modificacion>Cambiar embrague</modificacion>
<modificacion>Cambio aceite</modificacion>
</modificaciones>
</vehiculo>
</vehiculos>

Algunas consideraciones:

  • Los elementos <vehiculo>, <nombre> y <modificacion> deben aparecer mínimo una vez y el máximo no está limitado. El resto de los elementos deben aparecer 1 vez.
  • Todos los elementos que aparecen en el documento XML son obligatorios y deben aparecer siempre en el mismo orden.
  • El elemento <dia> consta siempre de 2 cifras. Los valores permitidos son números enteros entre 01 y 31.
  • El elemento <mes> consta siempre de 2 cifras. Los valores permitidos son números enteros entre 01 y 12.
  • El elemento <anyo> consta siempre de 4 cifras. Los valores permitidos son números enteros entre 1900 y 2099.
Solución
XML
<?xml version="1.0" encoding="UTF-8" ?>
<vehiculos
xmlns:xs="http://www.w3.org/2001/XMLSchema-instance"
xs:noNamespaceSchemaLocation="417.xsd">
<vehiculo>
<nombre>Count Zero</nombre>
<modelo>Series I, 80"</modelo>
<fabricacion>
<inicio>
<dia>21</dia>
<mes>07</mes>
<anyo>1949</anyo>
</inicio>
<fin>
<dia>09</dia>
<mes>08</mes>
<anyo>1949</anyo>
</fin>
</fabricacion>
<modificaciones>
<modificacion>Cambiar motor</modificacion>
<modificacion>Cambiar embrague</modificacion>
<modificacion>Cambio aceite</modificacion>
</modificaciones>
</vehiculo>
</vehiculos>
417.xsd
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="vehiculos" type="vehiculos" />

<xs:complexType name="vehiculos">
<xs:sequence>
<xs:element name="vehiculo" type="vehiculo" maxOccurs="unbounded" />
</xs:sequence>
</xs:complexType>

<xs:complexType name="vehiculo">
<xs:sequence>
<xs:element name="nombre" type="xs:string" maxOccurs="unbounded" />
<xs:element name="modelo" type="xs:string" />
<xs:element name="fabricacion" type="fabricacion" />
<xs:element name="modificaciones" type="modificaciones" />
</xs:sequence>
</xs:complexType>

<xs:complexType name="fabricacion">
<xs:sequence>
<xs:element name="inicio" type="fecha" />
<xs:element name="fin" type="fecha" />
</xs:sequence>
</xs:complexType>

<xs:complexType name="fecha">
<xs:sequence>
<xs:element name="dia">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:pattern value="0[1-9]|[12][0-9]|3[01]" />
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="mes">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:pattern value="0[1-9]|1[012]" />
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="anyo">
<xs:simpleType>
<xs:restriction base="xs:positiveInteger">
<xs:minInclusive value="1900" />
<xs:maxInclusive value="2099" />
</xs:restriction>
</xs:simpleType>
</xs:element>
</xs:sequence>
</xs:complexType>

<xs:complexType name="modificaciones">
<xs:sequence>
<xs:element name="modificacion" type="xs:string" maxOccurs="unbounded" />
</xs:sequence>
</xs:complexType>
</xs:schema>