
Después de formarte con el curso de XML y el tutorial de DTD, es necesario practicar tus habilidades con ejercicios DTD. En esta sección encontrarás una recopilación de ejercicios DTD que incluyen prácticas resueltas y desafíos tipo examen. Estos recursos están diseñados para ayudarte a consolidar tus conocimientos, ofreciendo tanto ejemplos detalladamente resueltos como retos para poner a prueba tus habilidades y practicar para un examen de Lenguajes de Marcas y Sistemas de Gestión de la Información.
1. Ejercicios DTD: prácticas resueltas
Si no lo has hecho ya, antes de comenzar con los ejercicios de DTD, es recomendable que veas los ejercicios resueltos de XML.
1.1. Ejercicio DTD resuelto: Biblioteca XML
Crea un archivo XML que represente una biblioteca virtual. La biblioteca debe contener tanto libros como revistas, cada uno con su información correspondiente. Sigue las instrucciones y utiliza el DTD proporcionado para validar el documento XML.
Instrucciones:
- Crea un documento XML que cumpla con el DTD proporcionado para una biblioteca.
- Agrega al menos dos libros a la biblioteca. Cada libro debe tener un título, autor, editorial, año de publicación, precio y una descripción opcional.
- Asegúrate de incluir también una imagen para cada libro.
- Agrega al menos una revista a la biblioteca. La revista debe tener un título, editorial, año de publicación, precio y al menos un artículo.
- Cada artículo debe tener un título, autor y contenido.
DTD:
biblioteca.dtd
<!ELEMENT biblioteca (libro*, revista*)> <!ELEMENT libro (titulo, autor, editorial, anio, precio, descripcion?, imagen?)> <!ELEMENT titulo (#PCDATA)> <!ELEMENT autor (#PCDATA)> <!ELEMENT editorial (#PCDATA)> <!ELEMENT anio (#PCDATA)> <!ELEMENT precio (#PCDATA)> <!ELEMENT descripcion (#PCDATA)> <!ELEMENT imagen (#PCDATA)> <!ELEMENT revista (titulo, editorial, anio, precio, articulo*)> <!ELEMENT articulo (titulo, autor, contenido)> <!ELEMENT contenido (#PCDATA)> <!ATTLIST libro id CDATA #REQUIRED> <!ATTLIST libro formato (impreso|digital) "impreso"> <!ATTLIST libro idioma CDATA #IMPLIED> <!ENTITY % desc "Un libro interesante sobre programación"> <!ENTITY % imagen "portada.jpg"> <!ENTITY euro "€">
Solución:
biblioteca.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE biblioteca SYSTEM "biblioteca.dtd">
<biblioteca>
<libro id="L1" formato="impreso" idioma="es">
<titulo>XML en profundidad</titulo>
<autor>John Smith</autor>
<editorial>Editorial A</editorial>
<anio>2020</anio>
<precio>25€</precio>
<descripcion>%desc;</descripcion>
<imagen>%imagen;</imagen>
</libro>
<libro id="L2" formato="digital" idioma="en">
<titulo>Web Design Principles</titulo>
<autor>Emily Johnson</autor>
<editorial>Editorial B</editorial>
<anio>2019</anio>
<precio>19.99€</precio>
<descripcion>Learn the fundamental principles of web design.</descripcion>
<imagen>web-design.jpg</imagen>
</libro>
<revista>
<titulo>Revista de Diseño Web</titulo>
<editorial>Editorial Pixel Vivo</editorial>
<anio>2021</anio>
<precio>12.50€</precio>
<articulo>
<titulo>Las tendencias actuales en diseño web</titulo>
<autor>Jorge Juan Oliva</autor>
<contenido>Este artículo explora las últimas tendencias en diseño web...</contenido>
</articulo>
</revista>
</biblioteca>
1.2. Ejercicio DTD resuelto. Gestión de tareas
Considera un sistema de gestión de tareas que se va a implementar en XML. Diseña un DTD que permita representar las tareas con sus respectivos atributos, como el título, la descripción, la fecha de creación y la prioridad. Además, cada tarea puede tener subtareas anidadas.
Define el elemento raíz «tareas» que puede contener una o más tareas. Cada tarea está compuesta por elementos obligatorios como «titulo», «descripcion», «fecha» y «prioridad», y puede tener un elemento opcional «subtareas» para anidar subtareas. Además, agrega un atributo «id» a cada tarea para identificarlas de forma única.
Solución:
tareas.dtd
<!ELEMENT tareas (tarea+)> <!ELEMENT tarea (titulo, descripcion, fecha, prioridad, subtareas?)> <!ELEMENT titulo (#PCDATA)> <!ELEMENT descripcion (#PCDATA)> <!ELEMENT fecha (#PCDATA)> <!ELEMENT prioridad (#PCDATA)> <!ELEMENT subtareas (tarea+)> <!ATTLIST tarea id ID #REQUIRED>
1.3. Ejercicio DTD resuelto. Sistema de gestión de eventos
Imagina que estás diseñando un sistema de gestión de eventos. Cada evento tiene un título, una descripción, una fecha y una ubicación. Además, puede tener una lista de invitados. Diseña un DTD que permita representar estos eventos de manera válida.
Define el elemento raíz «eventos» que puede contener uno o más elementos «evento». Cada evento está compuesto por elementos obligatorios como «titulo», «descripcion», «fecha» y «ubicacion». Además, agrega un elemento opcional «invitados» que puede contener una lista de invitados representados por el elemento «invitado». El contenido de «invitado» defínelo como texto, pero podría ser una estructura más compleja según los requisitos del sistema de gestión de eventos.
Crea también un documento XML que cumpla con el DTD.
Solución:
eventos.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE eventos [
<!ELEMENT eventos (evento+)>
<!ELEMENT evento (titulo, descripcion, fecha, ubicacion, invitados?)>
<!ELEMENT titulo (#PCDATA)>
<!ELEMENT descripcion (#PCDATA)>
<!ELEMENT fecha (#PCDATA)>
<!ELEMENT ubicacion (#PCDATA)>
<!ELEMENT invitados (invitado+)>
<!ELEMENT invitado (#PCDATA)>
]>
<eventos>
<evento>
<titulo>Conferencia de Diseño Web</titulo>
<descripcion>Una conferencia para diseñadores web</descripcion>
<fecha>2023-10-15</fecha>
<ubicacion>Centro de Convenciones</ubicacion>
<invitados>
<invitado>Andrea Lluch</invitado>
<invitado>Jorge Juan Oliva</invitado>
</invitados>
</evento>
<evento>
<titulo>Taller de Programación</titulo>
<descripcion>Un taller práctico sobre programación</descripcion>
<fecha>2023-11-02</fecha>
<ubicacion>IES Severo Ochoa</ubicacion>
</evento>
</eventos>
2. Ejercicios DTD: prácticas tipo examen sin solución
2.1. Ejercicio práctico sin resolver: Crea un XML que cumpla con el DTD proporcionado
Crea un archivo XML que cumpla con el DTD proporcionado. Este archivo XML debe contener información sobre al menos tres lenguajes de programación diferentes. Cada lenguaje de programación debe incluir los siguientes elementos: name, creator, year_created y description.
DTD interno:
<!DOCTYPE programming_library [ <!ELEMENT programming_library (language+)> <!ELEMENT language (name, creator, year_created, description)> <!ELEMENT name (#PCDATA)> <!ELEMENT creator (#PCDATA)> <!ELEMENT year_created (#PCDATA)> <!ELEMENT description (#PCDATA)> ]>
Ejemplo de información a contener:
| Language | Creator | Year Created | Description |
| Python | Guido van Rossum | 1991 | Python is a high-level, interpreted, and general-purpose programming language that emphasizes readability with its notable use of significant whitespace. |
| Java | James Gosling | 1995 | Java is a class-based, object-oriented programming language that is designed to have as few implementation dependencies as possible. |
| C++ | Bjarne Stroustrup | 1985 | C++ is a general-purpose programming language created as an extension of the C programming language, or «C with Classes». |
2.2. Ejercicio práctico sin resolver: Crea un DTD para un catálogo de libros en XML
Desarrolla un DTD que se ajuste a la estructura del archivo XML proporcionado, el cual representa un catálogo de libros. Puedes crear un DTD interno o externo.
XML:
<?xml version="1.0" encoding="UTF-8"?>
<catalog>
<book>
<title>Clean Code: A Handbook of Agile Software Craftsmanship</title>
<author>Robert C. Martin</author>
<year>2008</year>
<publisher>Prentice Hall</publisher>
</book>
<book>
<title>Introduction to Algorithms</title>
<author>Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, and Clifford Stein</author>
<year>2009</year>
<publisher>MIT Press</publisher>
</book>
<book>
<title>Design Patterns: Elements of Reusable Object-Oriented Software</title>
<author>Erich Gamma, Richard Helm, Ralph Johnson, and John Vlissides</author>
<year>1994</year>
<publisher>Addison-Wesley</publisher>
</book>
<book>
<title>Effective Java</title>
<author>Joshua Bloch</author>
<year>2018</year>
<publisher>Addison-Wesley</publisher>
</book>
</catalog>
2.3. Ejercicio práctico sin resolver: Crea un DTD para un catálogo de componentes hardware de un ordenador
Desarrolla un DTD que se ajuste a la estructura del archivo XML proporcionado, el cual representa un catálogo de componentes de hardware de ordenador. Puedes crear un DTD interno o externo.
XML:
<?xml version="1.0" encoding="UTF-8"?>
<hardwareCatalog>
<item>
<id>1</id>
<type>Processor</type>
<brand>Intel</brand>
<model>Core i7-9700K</model>
<specifications>8-Core, 3.6 GHz</specifications>
</item>
<item>
<id>2</id>
<type>RAM</type>
<brand>Corsair</brand>
<model>Vengeance LPX 16GB</model>
<specifications>DDR4, 3200MHz</specifications>
</item>
<item>
<id>3</id>
<type>Graphics Card</type>
<brand>NVIDIA</brand>
<model>GeForce RTX 3080</model>
<specifications>10GB GDDR6X</specifications>
</item>
<item>
<id>4</id>
<type>Hard Drive</type>
<brand>Western Digital</brand>
<model>WD Blue 1TB</model>
<specifications>SATA, 7200 RPM</specifications>
</item>
<item>
<id>5</id>
<type>Motherboard</type>
<brand>ASUS</brand>
<model>ROG Strix Z390-E</model>
<specifications>Socket LGA1151, ATX</specifications>
</item>
</hardwareCatalog>
2.4. Ejercicio práctico sin resolver: Crea un DTD y un XML que representen información sobre estudiantes
Diseña un DTD y crea un documento XML que represente información sobre estudiantes. La tabla proporcionada incluye detalles sobre el ID de cada estudiante, nombre, edad y (opcionalmente) estado.
Especificaciones:
- El elemento raíz del documento XML debe ser
<school>. - Cada estudiante está representado por el elemento
<student>. - El atributo
iddel elemento<student>es obligatorio (#REQUIRED) y debe ser único para todos los estudiantes. - Los elementos
<name>y<age>son obligatorios para cada estudiante. - El atributo adicional
statuses opcional (#IMPLIED) para cada estudiante. - Si el atributo
statusestá presente, solo puede tener los valores: «Active», «Inactive» o «Graduated».
Tabla de referencia:
| Student ID | Name | Age | Student Status |
| a1 | Juan Pérez | 22 | Active |
| a2 | Maria González | 20 | N/A (Not Available) |
| a3 | Carlos Rodríguez | 21 | Inactive |
| a4 | Laura Martínez | 23 | Graduated |
| a5 | Andrés López | 19 | Active |
2.5. Ejercicio práctico sin resolver: Entidades en una tienda de componentes electrónicos
Diseña un documento DTD para representar información sobre una tienda de componentes electrónicos. Cada producto en la tienda tiene un nombre, un precio y una categoría. Además, utiliza entidades internas para definir algunas categorías comunes, como «Phone», «Tablet» y «Laptop».
La información debe estar estructurada de la siguiente manera:
- El elemento raíz del documento es <store> .
- Cada producto está representado por el elemento <product> .
- Cada producto tiene tres elementos secundarios: <name>, <price> y <category> .
Ejemplo de especificación del uso de entidades en el documento XML:
<?xml version="1.0" encoding="UTF-8"?> <store> <product> <name>iPhone 13</name> <price>999.99</price> <category>☎</category> </product> <product> <name>iPad Air</name> <price>599.99</price> <category>&tablet;</category> </product> <product> <name>MacBook Pro</name> <price>1999.99</price> <category>&laptop;</category> </product> </store>
Esperamos que esta sección te haya sido de utilidad para fortalecer tus habilidades en XML y DTD. ¡Continúa practicando y explorando nuevas oportunidades para seguir mejorando en tu dominio de los Lenguajes de Marcas y Sistemas de Gestión de la Información con los tutoriales de XPath o XSD!