Ejercicios prácticos de XSD

Rafa Morales 1 Diciembre 2014
10min
0
XSD
  • Diseña el esquema XSD para el siguiente archivo XML con las siguientes consideraciones:
<?xml version="1.0" encoding="UTF-8"?>
<alumno dni="12345678A"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
  xsi:noNamespaceSchemaLocation="alumno.xsd">
  <nombre>Juan Garcia</nombre>
  <direccion>
    <calle>Avenida de la Fuente</calle>
    <numero>6</numero>
    <ciudad>Zafra</ciudad>
    <provincia>Badajoz</provincia>
  </direccion>
  <telefono>924555555</telefono>
  <telefono>658741236</telefono>
</alumno>
  • El elemento número será un entero entre 0 y 500.
  • El elemento teléfono será un entero y dicho elemento podrá aparecer entre 0 y 5 veces.
  • El atributo dni será una plantilla de 8 números y una letra mayúscula.

 

  • Diseña el esquema XSD para el siguiente archivo XML con las siguientes consideraciones:
<?xml version="1.0" encoding="UTF-8"?>
<alumnos xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
         xsi:noNamespaceSchemaLocation="alumnos.xsd">
  <alumno dni="11111111A">
    <nombre>Juan Andrés</nombre>
    <direccion>
      <calle>Avenida de la Fuente</calle>
      <numero>6</numero>
      <ciudad>Zafra</ciudad>
      <provincia>Badajoz</provincia>
    </direccion>
    <telefono>924555555</telefono>
  </alumno>
  <alumno dni="22222222B">
    <nombre>Jose Sanchez</nombre>
    <direccion>
      <calle>Calle Ancha</calle>
      <numero>3</numero>
      <ciudad>Zafra</ciudad>
      <provincia>Badajoz</provincia>
    </direccion>
    <direccion>
      <calle>Calle Mayor</calle>
      <numero>33</numero>
      <ciudad>Zafra</ciudad>
      <provincia>Badajoz</provincia>
    </direccion>
    <telefono>924550000</telefono>
  </alumno>
</alumnos>
  • El elemento número será un entero entre 0 y 500.
  • El elemento teléfono será un entero y dicho elemento podrá aparecer entre 0 y 5 veces.
  • El elemento dirección podrá aparecer 1 o 2 veces.
  • El elemento provincia sólo podrá contener Badajoz o Cáceres. Modifica el alumno Juan Andrés para que su provincia sea Cáceres.
  • El atributo dni será una plantilla de 8 números y una letra mayúscula.

 

  • Diseña el esquema XSD para el siguiente archivo XML con las siguientes consideraciones:
<?xml version="1.0" encoding="UTF-8"?>
<heladeria xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:noNamespaceSchemaLocation="heladeria.xsd">
  <helado fabricación="2015-01-30">
    <chocolate>250</chocolate>
    <turron>300</turron>
  </helado>
  <helado fabricación="2015-01-30">
    <fresa>500</fresa>
    <vainilla>200</vainilla>
  </helado>
</heladeria>
  • Como primer elemento de helado podemos elegir, o bien chocolate, o bien fresa (pero no los dos al mismo tiempo). Estos elementos almacenarán la cantidad en gramos (como un número entero entre 0 y 1000).
  • Como segundo elemento de helado se podrá elegir uno de los siguientes vainilla, turrón nata. Estos elementos almacenarán la cantidad en gramos (como un número entero entre 0 y 1000).
  • El atributo fabricación indicará la fecha en la que se fabricó el mismo mediante el tipo de dato fecha.

 

  • Diseña el esquema XSD para el siguiente archivo XML con las siguientes consideraciones:
<?xml version="1.0" encoding="UTF-8"?>
<heladeria xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:noNamespaceSchemaLocation="heladeria.xsd">
  <helado>
    <fresa />
    <chocolate />
  </helado>
  <helado>
    <vainilla />
    <chocolate />
  </helado>
</heladeria>
  • El helado sólo puede ser de fresa y chocolate, o bien, de vainilla y chocolate.
  • Los sabores serán elementos vacíos.

 

  • Diseña el esquema XSD para el siguiente archivo XML con las siguientes consideraciones:
<?xml version="1.0" encoding="UTF-8" ?>
<faq>
  <info>
    <titulo>WINDOWS98? SOLO SI ME OBLIGAN!</titulo>
    <autor>Fernando Damián Lorenzo García</autor>
    <email>Fer@yahoo.es </email>
    <version>1.0</version>
    <fecha>1999-05-01</fecha>
  </info>
  <part>
    <q>
      <qtext>¿Por qué tengo que instalar W95?</qtext>
      <a> A mi también me parece una buena pregunta.</a>
    </q>
    <q>
      <qtext>Y de que me vale?</qtext>
      <a>Otra ingeniosa pregunta.</a>
    </q>
  </part>
</faq>
  • El elemento versión será una plantilla que permita números seguidos de un punto y seguido de más números.
  • El elemento fecha será de tipo fecha.
  • El elemento faq está compuesto por solo un elemento info y por uno o más elementos part.
  • El elemento info está compuesto por un titulo, un autor, y puede tener o no email, versión y fecha.
  • El elemento part puede tener uno o más elementos q.
  • El elemento está compuesto por los elementos qtext y a que son obligatorios.

 

  • Diseña el esquema XSD para el siguiente archivo XML y las siguientes consideraciones:
<?xml version="1.0" encoding="UTF-8" ?>
<libreria>
  <codigo>1263</codigo>
  <direccion>Juan de Juni, 31</direccion>
  <telefono>983555555</telefono>
  <propietario>
    <nombre>Juanito</nombre>
    <telefono>656222111</telefono>
  </propietario>
  <libro>
    <titulo>Cien años de soledad</titulo>
    <autor>Gabriel García Márquez</autor>
    <formato>Rústica</formato>
    <publicacion>1967</publicacion>
    <precio>23,5</precio>
  </libro>
</libreria>
  • La librería tiene obligatoriamente un código, una dirección, un teléfono, un propietario, y uno o más libros.
  • El código será un número entero entre 1000 y 9999.
  • El propietario tiene un nombre y puede tener ninguno o varios teléfonos.
  • El teléfono sólo se definirá una vez en el esquema, repitiendo su uso. Su contenido será una plantilla de 9 números.
  • Cada libro está formado por los elementos título, autor, puede tener o no formato, publicación, precio, cantidad.
  • El formato podrá ser rústica, tapa blanda o tapa dura.

 

  • Diseña el esquema XSD para el siguiente archivo XML y las siguientes consideraciones:
<?xml version="1.0" encoding="UTF-8" ?>
<pagos>
  <nombre>Javier Toledano</nombre>
  <fechaNacimiento>1979-02-04</fechaNacimiento>
  <hora>23:55:15</hora>
  <hora>23:55:15</hora>
  <precio>123.56</precio>
  <cantidad>678</cantidad>
  <pagado>true</pagado>
</pagos>

Añade a los elementos anteriores las siguientes propiedades:

  • El elemento nombre puede aparecer como máximo 3 veces y su valor por defecto es "A".
  • El elemento hora puede aparecer un numero infinito de veces.
  • El valor por defecto de pagado es false.
  • La cantidad es fija y es siempre 678.

Añade los atributos siguientes:

  • Atributo dni requerido obligatoriamente y con una longitud máxima de 10 caracteres en el elemento nombre.
  • Atributo edad entre 16 y 24 años, en el elemento FechaNacimiento.

 

  • Diseña el esquema XSD para el documento XML y las siguientes consideraciones:
<?xml version="1.0" encoding="UTF-8"?>
<discos>
  <grupo nom="muse">
    <nombre>MUSE</nombre>
    <miembro>Matthew Bellamy</miembro>
    <miembro>Dominic Howard</miembro>
    <miembro>Chris Wolstenholme</miembro>
    <nacionalidad>Alemania</nacionalidad>
    <web>www.ponprecioamimusica.org/muse</web>
    <email> midireccion@ponprecioamimusica.org</email>
  </grupo>
  <grupo nom="feeder">
    <nombre>FEEDER</nombre>
    <miembro>Grant Nicholas</miembro>
    <miembro>Taka Hirose</miembro>
    <miembro>Jon Henry Lee</miembro>
    <calle>Calle no existe n2</calle>
    <localidad>tampoco existe</localidad>
  </grupo>
  <grupo nom="nvnud">
    <nombre>No vendo ni un disco</nombre>
    <miembro>Marta</miembro>
    <miembro>Ramon</miembro>
    <miembro>Pedro</miembro>
  </grupo>
  <disco precio="12.80">
    <interprete nom="muse"/>
    <titulo>Showbiz</titulo>
    <discografica>Sony</discografica>
    <anio>2000</anio>
    <stock>20</stock>
  </disco>
  <disco precio="19.90">
    <interprete nom="feeder"/>
    <titulo>Echo Park</titulo>
    <discografica>Sony</discografica>
    <anio>1980</anio>
    <stock>5</stock>
  </disco>
  <disco precio="15.50">
    <interprete nom="muse"/>
    <titulo>Origin of symmetry</titulo>
    <discografica>SIRE</discografica>
    <anio mes="enero">2007</anio>
    <stock>20</stock>
  </disco>
  <disco precio="13.20">
    <interprete nom="feeder"/>
    <titulo>Comfort In Sound</titulo>
    <anio>2010</anio>
    <stock>27</stock>
  </disco>
  <disco precio="4.90">
    <interprete nom="nvnud"/>
    <titulo>Esto suena realmente mal</titulo>
    <anio>2011</anio>
    <stock>200</stock>
  </disco>
</discos>
  • El elemento nacionalidad es opcional.
  • El elemento discográfica solo puede tener los valores Sony, CBS , SIRE, OTRAS, en caso de no aparecer es CBS su valor predeterminado.
  • El elemento anio, obligatoriamente tiene 4 dígitos. Opcionalmente puede tener un atributo mes que puede tener los valores de enero a diciembre. No tiene valor por defecto.
  • El elemento grupo opcionalmente puede tener, o bien una dirección web y una dirección de correo electrónico, o bien una dirección postal formada por calle y localidad (pero no ambas a la vez).  La dirección de correo y la página deben pertenecer al dominio "ponprecioamimusica.org".
  • Los discos tiene un atributo obligatorio precio que debe ser decimal con dos decimales. 
  • Los campos de texto no pueden superar ninguno los 50 caracteres (elementos que no estén ya restringidos por otra regla).
  • El elemento stock debe tener un número entero y mayor o igual a 0. El stock máximo es 200.

 

Soluciones de algunos de los ejercicios

 

Otros ejercicios

  1. TodoXML - Ejercicios XSD Básicos (Soluciones)
  2. TodoXML - Ejercicios XSD Avanzados (Soluciones)
  3. AbrirLlave - Ejercicios XSD