DTD - Ejercicios

Estos ejercicios corresponden a lo explicado en la lección DTD.

Se pueden consultar las soluciones de estos ejercicios.

DTD - Ejercicio 1 - Elementos sin atributos - Corregir errores en los elementos

Los siguientes documentos no son válidos porque contienen uno o dos errores (los errores no están en la DTD interna). Corrija los errores y compruebe con XML Copy Editor que ya son documentos válidos.

DTD - Ejercicio 1-1 - Números

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE numeros [
  <!ELEMENT numeros (#PCDATA)>
]>

<numeros>
  <numero>25</numero>
</numeros>

DTD - Ejercicio 1-2 - Letras

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE letras [
  <!ELEMENT letras (letra)>
  <!ELEMENT letra (#PCDATA)>
]>

<letras>
  <letra>m</letra>
  <letra>uve doble</letra>
</letras>

DTD - Ejercicio 1-3 - Colores

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE colores [
  <!ELEMENT colores (color*)>
  <!ELEMENT color (#PCDATA)>
]>

<colores>
  <color>azul marino</color>
  negro
  <color>amarillo</color>
</colores>

DTD - Ejercicio 1-4 - Flores

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE flores [
  <!ELEMENT flores (flor+)>
  <!ELEMENT flor (#PCDATA)>
]>

<flores>
</flores>

DTD - Ejercicio 1-5 - Animales

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE animales [
  <!ELEMENT animales (animal*)>
  <!ELEMENT animal (#PCDATA)>
]>

<animales>
  <perro>Caniche</perro>
  <gato>Siamés</gato>
</animales>

DTD - Ejercicio 1-6 - Escritores

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE escritores [
  <!ELEMENT escritores (escritor*)>
  <!ELEMENT escritor (nombre, nacimiento)>
  <!ELEMENT nombre (#PCDATA)>
  <!ELEMENT nacimiento (#PCDATA)>
]>

<escritores>
  <escritor>
    <nombre>Mario Vargas Llosa</nombre>
    <nacimiento>28 de marzo de 1936</nacimiento>
  </escritor>
  <escritor>
    <nacimiento>1 de abril de 1929</nacimiento>
    <nombre>Milan Kundera</nombre>
  </escritor>
</escritores>

DTD - Ejercicio 1-7 - Músicos

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE musicos [
  <!ELEMENT musicos (musico*)>
  <!ELEMENT musico ((nombre | apodo), fechaNacimiento)>
  <!ELEMENT nombre (#PCDATA)>
  <!ELEMENT apodo (#PCDATA)>
  <!ELEMENT fechaNacimiento (#PCDATA)>
]>

<musicos>
  <musico>
    <nombre>Antonio Vivaldi</nombre>
    <apodo>El cura pelirrojillo</apodo>
    <fechaNacimiento>4 de marzo de 1678</fechaNacimiento>
  </musico>
  <musico>
    <nombre>Johann Sebastian Bach</nombre>
    <apodo>El viejo peluca</apodo>
    <fechaNacimiento>21 de marzo de 1685</fechaNacimiento>
  </musico>
</musicos>

DTD - Ejercicio 1-8 - Teléfonos de emergencia

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE agenda [
  <!ELEMENT agenda (contacto*)>
  <!ELEMENT contacto (nombre, telefonoFijo*, telefonoMovil+)>
  <!ELEMENT nombre (#PCDATA)>
  <!ELEMENT telefonoFijo (#PCDATA)>
  <!ELEMENT telefonoMovil (#PCDATA)>
]>

<agenda>
  <contacto>
    <nombre>Ayuntamiento</nombre>
    <telefonoFijo>010</telefonoFijo>
  </contacto>
  <contacto>
    <nombre>Emergencias</nombre>
    <telefonoFijo>112 (Unión Europea)</telefonoFijo>
    <telefonoMovil>Desconocido</telefonoMovil>
    <telefonoFijo>911 (Estados Unidos)</telefonoFijo>
  </contacto>
</agenda>

DTD - Ejercicio 1-9 - El sistema solar

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE sistemaSolar [
  <!ELEMENT sistemaSolar (cuerpo*)>
  <!ELEMENT cuerpo (planeta|satelite|asteroide)>
  <!ELEMENT planeta (#PCDATA)>
  <!ELEMENT satelite (#PCDATA)>
  <!ELEMENT asteroide (#PCDATA)>
]>

<sistemaSolar>
  <cuerpo>
    <planeta>Tierra</planeta>
    <satelite>Luna</satelite>
  </cuerpo>
  <asteroide>Ceres</asteroide>
</sistemaSolar>

DTD - Ejercicio 2 - Elementos sin atributos - Corregir errores en la DTD

Los siguientes documentos no son válidos porque contienen errores (los errores están en la DTD interna). Corrija los errores y compruebe con XML Copy Editor que ya son documentos válidos. Casi siempre habrá varias maneras de corregir la DTD, intente elegir la más sencilla.

DTD - Ejercicio 2-1 - Marcadores

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE favoritos [
  <!ELEMENT favoritos (marcador)>
  <!ELEMENT marcador (nombre, uri)>
  <!ELEMENT nombre (#PCDATA)>
  <!ELEMENT uri (#PCDATA)>
]>

<marcadores>
  <marcador>
    <nombre>W3C</nombre>
    <uri>http://www.w3.org/</uri>
  </marcador>
  <marcador>
    <nombre>Web Hypertext Application Technology Working Group (WHATWG)</nombre>
    <uri>http://www.whatwg.org/</uri>
  </marcador>
</marcadores>

DTD - Ejercicio 2-2 - Efemérides

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE efemerides [
  <!ELEMENT efemerides (efemeride)>
  <!ELEMENT efemeride (fecha, hecho)>
]>

<efemerides>
  <efemeride>
    <fecha>20 de julio de 1969</fecha>
    <hecho>Llegada del hombre a la Luna</hecho>
  </efemeride>
  <efemeride>
    <fecha>12 de octubre de 1492</fecha>
    <hecho>Llegada de Colón a América</hecho>
  </efemeride>
  <efemeride>
    <fecha>6 de abril de 1909</fecha>
    <hecho>llegada de Robert Peary al Polo Norte</hecho>
  </efemeride>
</efemerides>

DTD - Ejercicio 2-3 - Aeropuertos

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE aeropuertos [
  <!ELEMENT aeropuertos (aeropuerto*)>
  <!ELEMENT aeropuerto (nombre, cerrado)>
  <!ELEMENT nombre (#PCDATA)>
  <!ELEMENT cerrado (#PCDATA)>
]>

<aeropuertos>
  <aeropuerto>
    <nombre>Berlín Schönefeld (SFX)</nombre>
  </aeropuerto>
  <aeropuerto>
    <nombre>Berlín Tempelhof (THF)</nombre>
    <cerrado />
 </aeropuerto>
</aeropuertos>

DTD - Ejercicio 2-4 - Vuelos

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE vuelos [
  <!ELEMENT vuelos (vuelo*)>
  <!ELEMENT vuelo (origen, destino)>
  <!ELEMENT origen (#PCDATA)>
  <!ELEMENT destino (#PCDATA)>
]>

<vuelos>
  <vuelo>
    <origen>Valencia (VLC)</origen>
    <destino>Londres Heathrow (LHR)</destino>
  </vuelo>
  <vuelo>
    <destino>Berlín Schönefeld (SFX)</destino>
    <origen>París Charles de Gaulle (CDG)</origen>
  </vuelo>
</vuelos>

DTD - Ejercicio 2-5 - Reyes españoles

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE reyesEspañoles [
  <!ELEMENT reyesEspañoles (rey*, reina*)>
  <!ELEMENT rey (nombre, padre, madre)>
  <!ELEMENT nombre (#PCDATA)>
  <!ELEMENT padre (#PCDATA)>
  <!ELEMENT madre (#PCDATA)>
]>

<reyesEspañoles>
  <rey>
    <nombre>Felipe III</nombre>
    <padre>Felipe II</padre>
    <madre>Ana de Austria</madre>
  </rey>
  <reina>
    <nombre>Juana la Loca</nombre>
    <padre>Fernando el Católico</padre>
    <madre>Isabel la Católica</madre>
  </reina>
  <rey>
    <nombre>Carlos I</nombre>
    <padre>Felipe el Hermoso</padre>
    <madre>Juan la Loca</madre>
  </rey>
</reyesEspañoles>

DTD - Ejercicio 2-6 - Países

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE paises [
  <!ELEMENT pais (nombre, unionEuropea, otan)>
  <!ELEMENT nombre EMPTY>
  <!ELEMENT unionEuropea EMPTY>
  <!ELEMENT otan EMPTY>
]>

<paises>
  <pais>
    <nombre>España</nombre>
    <unionEuropea />
    <otan />
  </pais>
  <pais>
    <nombre>Noruega</nombre>
    <otan />
  </pais>
  <pais>
    <nombre>Austria</nombre>
    <unionEuropea />
  </pais>
</paises>

DTD - Ejercicio 2-7 - Códigos de colores

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE colores [
  <!ELEMENT colores (color*)>
  <!ELEMENT nombreSvg (#PCDATA)>
  <!ELEMENT rgb (#PCDATA)>
  <!ELEMENT cmyk (#PCDATA)>
]>

<colores>
  <color>
    <nombreSvg>Purple</nombreSvg>
    <codigo>
      <rgb>#800080</rgb>
    </codigo>
  </color>
  <color>
    <nombreSvg>Purple</nombreSvg>
    <codigo>
      <cmyk>#00FF007F</cmyk>
    </codigo>
  </color>
</colores>

DTD - Ejercicio 2-8 - Contabilidad

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE contabilidad [
  <!ELEMENT contabilidad ((ingreso | gasto)*)>
  <!ELEMENT fecha (#PCDATA)>
  <!ELEMENT cantidad (#PCDATA)>
  <!ELEMENT concepto (#PCDATA)>
]>

<contabilidad>
  <apunte>
    <ingreso />
    <fecha>24 de febrero de 2011</fecha>
    <cantidad>1800,00 €</cantidad>
    <concepto>Salario</concepto>
  </apunte>
  <apunte>
    <gasto />
    <fecha>28 de febrero de 2011</fecha>
    <cantidad>74,25 €</cantidad>
    <concepto>Recibo luz</concepto>
  </apunte>
</contabilidad>

DTD - Ejercicio 2-9 - Mensajes

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mensajes [
  <!ELEMENT mensajes (mensaje)>
  <!ELEMENT de (#PCDATA)>
  <!ELEMENT para (#PCDATA)>
  <!ELEMENT hora (#PCDATA)>
  <!ELEMENT texto (#PCDATA)>
  <!ELEMENT strong (#PCDATA)>
]>

<mensajes>
  <mensaje>
    <de>Pepe (pepe@example.com)</de>
    <para>Juan (juan@example.com)</para>
    <hora>28/02/2011 17:48:23,61</hora>
    <texto>¿Hola, Juan, qué haces?</texto>
  </mensaje>
  <mensaje>
    <de>Juan (juan@example.com)</de>
    <para>Pepe (pepe@example.com)</para>
    <hora>28/02/2011 17:54:20,87</hora>
    <texto>Aquí, aprendiendo <strong>XML</strong></texto>
  </mensaje>
</mensajes>

DTD - Ejercicio 3 - Elementos con atributos - Corregir errores en los elementos

Los siguientes documentos no son válidos porque contienen uno o dos errores (los errores no están en la DTD interna). Corrija los errores y compruebe con XML Copy Editor que ya son documentos válidos.

DTD - Ejercicio 3-1 - Datos personales

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE persona [
  <!ELEMENT persona EMPTY>
  <!ATTLIST persona nombre CDATA #IMPLIED>
]>

<persona dni="03141592E" />

DTD - Ejercicio 3-2 - Película

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE pelicula [
  <!ELEMENT pelicula EMPTY>
  <!ATTLIST pelicula titulo CDATA #IMPLIED>
]>

<pelicula titulo="La diligencia" genero="oeste" />

DTD - Ejercicio 3-3 - Cuadros

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE cuadros [
  <!ELEMENT cuadros (cuadro*)>
  <!ELEMENT cuadro EMPTY>
  <!ATTLIST cuadro titulo ID #REQUIRED>
  <!ATTLIST cuadro autor CDATA #REQUIRED>
]>

<cuadros>
  <cuadro titulo="Adán y Eva" autor="Alberto Durero" />
  <cuadro autor="Lucas Cranach, el viejo" titulo="Adán y Eva" />
</cuadros>

DTD - Ejercicio 3-4 - Lista de la compra

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE listaCompra [
  <!ELEMENT listaCompra (item*)>
  <!ELEMENT item EMPTY>
  <!ATTLIST item nombre CDATA #REQUIRED>
  <!ATTLIST item cantidad CDATA #REQUIRED>
]>

<listaCompra>
  <leche cantidad="12 litros" ></leche>
  <pan cantidad="3 barras de cuarto" />
</listaCompra>

DTD - Ejercicio 3-5 - Jugadores de fútbol

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE futbol [
  <!ELEMENT futbol (jugador*)>
  <!ELEMENT jugador EMPTY>
  <!ATTLIST jugador nombre NMTOKENS #REQUIRED>
  <!ATTLIST jugador codigo ID #REQUIRED>
]>

<futbol>
  <jugador nombre="Alfredo Di Stéfano" codigo="1"/>
  <jugador nombre="Edson Arantes do Nascimento, Pelé" codigo="2" />
  <jugador nombre="Diego Armando Maradona" codigo="3" />
  <jugador nombre="Johan Cruyff" codigo="4" />
</futbol>

DTD - Ejercicio 3-6 - Jugadores y equipos de fútbol

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE futbol [
  <!ELEMENT futbol ((jugador|equipo)*)>
  <!ELEMENT jugador EMPTY>
  <!ATTLIST jugador nombre NMTOKENS #REQUIRED>
  <!ATTLIST jugador codigo ID #REQUIRED>
  <!ELEMENT equipo EMPTY>
  <!ATTLIST equipo nombre CDATA #REQUIRED>
  <!ATTLIST equipo jugadores IDREFS #IMPLIED>
]>

<futbol>
  <jugador nombre="Alfredo Di Stéfano" codigo="ads"/>
  <jugador nombre="Edison Arantes do Nascimento" codigo="ean" />
  <jugador nombre="Diego Armando Maradona" codigo="dam" />
  <jugador nombre="Johan Cruyff" codigo="jc" />
  <equipo nombre="Società Sportiva Calcio Napoli" jugadores="Maradona" />
  <equipo nombre="Futbol Club Barcelona" jugadores="Cruyff, Maradona" />
</futbol>

DTD - Ejercicio 4 - Elementos con atributos - Corregir errores en la DTD

Los siguientes documentos no son válidos porque contienen errores (los errores están en la DTD interna). Corrija los errores y compruebe con XML Copy Editor que ya son documentos válidos. Casi siempre habrá varias maneras de corregir la DTD, intente elegir la más sencilla.

DTD - Ejercicio 4-1 - Libro

    <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE libro [
  <!ELEMENT libro EMPTY>
  <!ATTLIST libro autor NMTOKEN #REQUIRED>
]>

<libro autor="Mario Vargas Llosa" />

DTD - Ejercicio 4-2 - Inventores

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE inventores [
  <!ELEMENT inventores>
  <!ELEMENT inventor EMPTY>
  <!ATTLIST inventor invento CDATA #REQUIRED>
  <!ATTLIST inventor nombre ID #REQUIRED>
]>

<inventores>
  <inventor nombre="Robert Adler" invento="Mando a distancia" />
  <inventor nombre="Laszlo Josef Biro" invento="Bolígrafo" />
  <inventor nombre="Josephine Garis Cochran" invento="Lavaplatos" />
  <inventor invento="Fuego" />
</inventores>

DTD - Ejercicio 4-3 - Cosas por hacer

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE cosasPorHacer [
  <!ELEMENT cosasPorHacer (cosa)>
  <!ELEMENT cosa EMPTY>
  <!ATTLIST cosa fecha CDATA #REQUIRED>
  <!ATTLIST cosa asunto CDATA #REQUIRED>
  <!ATTLIST cosa fechaLimite CDATA #REQUIRED>
]>

<cosasPorHacer>
  <cosa fecha="20 de febrero de 2011" fechaLimite="1 de marzo de 2011">
  Preparar ejercicios de DTDs</cosa>
  <cosa fecha="21 de febrero de 2011" fechaLimite="5 de marzo de 2011">
  Preparar tema XSLT</cosa>
</cosasPorHacer>

DTD - Ejercicio 4-4 - Resoluciones de pantalla

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE resoluciones [
  <!ELEMENT resoluciones EMPTY>
  <!ATTLIST resoluciones nombre NMTOKEN #REQUIRED>
  <!ATTLIST resoluciones alto CDATA #REQUIRED>
  <!ATTLIST resoluciones ancho CDATA #REQUIRED>
]>

<resoluciones>
  <resolucion nombre="VGA" alto="480" ancho="640" />
  <resolucion nombre="XGA" alto="1024" ancho="768" />
  <resolucion nombre="HD 1080" alto="1920" ancho="1080" />
</resoluciones>

DTD - Ejercicio 4-5 - Álbumes de Mortadelo y Filemón

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE albumesMortadelo [
  <!ELEMENT albumesMortadelo (album*)>
  <!ELEMENT album (nombre, fecha)>
  <!ATTLIST album nombre CDATA #REQUIRED>
  <!ATTLIST album fecha(1969,1970,1971,1972,1973,1974) #REQUIRED>
]>

<albumesMortadelo>
  <album nombre="El sulfato atómico" fecha="1969"/>
  <album nombre="La caja de diez cerrojos" fecha="1971"/>
  <album nombre="El otro yo del profesor Bacterio" fecha="1973"/>
  <album nombre="Los cacharros majaretas" fecha="1974"/>
</albumesMortadelo>

DTD - Ejercicio 5 - DTDs alternativos

Se quiere definir un lenguaje de marcas para representar los resultados de una liga de fútbol. La información que se quiere almacenar de cada partido es:

Escribe tres documentos que incluyan los siguientes resultados:

Cada documento incluirá un DTD diferente para representar ese lenguaje de marcas: