1. Catálogo de una editorial: XPath, XQuery, XSLT y XSD
Difícil · 90 minutos · apuntesdam.com/ejercicios/xml/catalogo-de-una-editorial-xml
Una editorial pequeña publica su catálogo en XML para que las librerías lo carguen en sus programas. El documento tiene un elemento libro por título, con el código, el género y los ejemplares en stock como atributos, y el título, los autores (uno o varios), el año, el precio y las páginas como elementos.
Con ese único documento vas a hacer lo que se hace en el día a día con XML: buscar datos con XPath, sacar informes y construir XML nuevo con XQuery, presentarlo como página web con XSLT y, por último, escribir el XML Schema que garantiza que el documento que reciben las librerías es correcto.
Los apartados se pueden hacer en cualquier orden, pero conviene seguirlo: cada herramienta se apoya en la anterior (XQuery y XSLT usan expresiones XPath, y el XSD formaliza lo que has aprendido de la estructura).
Requisitos
Resuelve cada apartado con la herramienta que indica, sobre el documento
catalogo.xml.Cada apartado se corrige por separado. Las consultas XPath y XQuery se comparan con el resultado de la solución sobre el documento (importan los valores y su orden); las transformaciones XSLT, con la salida esperada (sin contar espacios y saltos de línea); y los esquemas, con documentos que deben aceptar y otros que deben rechazar.
Cuando un apartado pide «el texto» de algo, la consulta debe devolver cadenas (con
text()ostring()), no elementos.
<?xml version="1.0" encoding="UTF-8"?><catalogo editorial="Ediciones del Sur" actualizado="2026-09-30"> <libro codigo="L001" genero="novela" stock="12"> <titulo>La casa de las palabras</titulo> <autor>Marta Ruiz</autor> <anio>2019</anio> <precio>18.90</precio> <paginas>320</paginas> </libro> <libro codigo="L002" genero="poesia" stock="0"> <titulo>Mar adentro, versos</titulo> <autor>Julio Peña</autor> <anio>2021</anio> <precio>12.50</precio> <paginas>96</paginas> </libro> <libro codigo="L003" genero="ensayo" stock="5"> <titulo>Breve historia de la imprenta</titulo> <autor>Ana Gil</autor> <autor>Luis Mora</autor> <anio>2017</anio> <precio>24.00</precio> <paginas>410</paginas> </libro> <libro codigo="L004" genero="novela" stock="3"> <titulo>El último faro</titulo> <autor>Marta Ruiz</autor> <anio>2023</anio> <precio>21.50</precio> <paginas>288</paginas> </libro> <libro codigo="L005" genero="infantil" stock="25"> <titulo>Lola y el dragón azul</titulo> <autor>Pablo Sanz</autor> <anio>2022</anio> <precio>9.95</precio> <paginas>48</paginas> </libro> <libro codigo="L006" genero="novela" stock="0"> <titulo>Ciudades de niebla</titulo> <autor>Elena Ríos</autor> <anio>2015</anio> <precio>19.90</precio> <paginas>352</paginas> </libro> <libro codigo="L007" genero="ensayo" stock="8"> <titulo>Pensar con datos</titulo> <autor>Luis Mora</autor> <anio>2024</anio> <precio>27.50</precio> <paginas>264</paginas> </libro> <libro codigo="L008" genero="infantil" stock="14"> <titulo>El bosque que cantaba</titulo> <autor>Sara Molina</autor> <autor>Pablo Sanz</autor> <anio>2020</anio> <precio>11.00</precio> <paginas>40</paginas> </libro></catalogo>Apartados
El texto de los títulos de las novelas, en el orden del documento.
El texto del título del libro más caro.
Cuántos libros no tienen ningún ejemplar en stock.
El texto de los títulos de los libros escritos por más de un autor, en el orden del documento.
Un informe por género, en orden alfabético: una cadena por género con el formato
género (N): precio medio X €, donde N es el número de libros y X el precio medio redondeado a dos decimales (sin ceros sobrantes:25.75,20.1).La oferta del mes: para cada libro con más de 10 ejemplares, construye
<oferta codigo="…"><titulo>…</titulo><precio>…</precio></oferta>con su código, su título y su precio rebajado un 20 % redondeado a dos decimales, ordenadas de menor a mayor precio rebajado.Transforma el catálogo en una tabla HTML:
<table>con la fila de cabecera<tr><th>Título</th><th>Autores</th><th>Precio</th></tr>y una fila por libro, ordenadas por título, con los autores separados por coma y espacio, el precio con dos decimales seguido de un espacio y€(18.90 €), y el atributoclass="agotado"en las filas de los libros sin stock.Escribe el XML Schema del catálogo:
catalogocon los atributos obligatorioseditorial(texto) yactualizado(fecha) y uno o máslibro; cada libro con los atributos obligatorioscodigo(una L y tres cifras),genero(novela, poesia, ensayo o infantil) ystock(entero no negativo), y los elementos, en este orden,titulo, uno o másautor,anio(entero de 1450 a 2026),precio(decimal no negativo con dos decimales como mucho) ypaginas(entero positivo).