Está en la página 1de 33

Archivo con ejercicios.

ejercicios_dtd.rar

Elementos (Corregir errores en el DTD sin modificar el XML).

1. FUENTE: Propio.

Corrige el DTD para que se corresponda con el XML:

<?xml version="1.0" encoding="UTF-8"?>


<!DOCTYPE empresa [
<!ELEMENT empresa (jefazo+)>
<!ELEMENT jefazo (hombre, mujer)>
<!ELEMENT hombre (nombre, apellido)>
<!ELEMENT nombre (#PCDATA)>
<!ELEMENT apellido (#PCDATA)>
]>

<empresa>
<jefazo>
<hombre>
<nombre>Juanjo</nombre>
<apellido>Perez</apellido>
</hombre>
</jefazo>
<jefazo>
<mujer>
<nombre>Maira</nombre>
<apellido>Palomares</apellido>
</mujer>
</jefazo>
<jefazo>
<hombre>
<nombre>Pablo</nombre>
<apellido>Ayuso</apellido>
</hombre>
</jefazo>
</empresa>
2. FUENTE: Propio.
Corrige el DTD para que se corresponda con el XML:

<?xml version="1.0" encoding="UTF-8"?>


<!DOCTYPE centro_Comercial [
<!ELEMENT centro_Comercial (tienda, cine?)>
<!ELEMENT tienda (tipo, trabajadores, estado)>
<!ELEMENT estado (abierta?, cerrada?)>
<!ELEMENT abierta (#PCDATA)>
<!ELEMENT cerrada (#PCDATA)>
<!ELEMENT tipo (#PCDATA)>
<!ELEMENT trabajadores (#PCDATA)>
]>

<centro_Comercial>
<tienda>
<tipo>Comida</tipo>
<trabajadores>4</trabajadores>
<estado>
<abierta></abierta>
</estado>
</tienda>
<tienda>
<tipo>Ropa</tipo>
<trabajadores>4</trabajadores>
<estado>
<cerrada></cerrada>
</estado>
</tienda>
</centro_Comercial>

3. FUENTE: (Gomez, 2016).

Tenemos el documento XML “agenda.xml” el cual se encuentra bien estructura, pero


debes encontrar los errores en el DTD externo y corregirlo:
<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE agenda SYSTEM "agenda.dtd">

<agenda>

<contacto>

<nombre>Juan</nombre>

<apellido>Rodriguez </apellido>

<apellido>Ramirez</apellido>

<telefono pais="España">624125454</telefono>

<email>juanito@enorden.com</email>

<direccion>

<calle>nuevo baztan</calle>

<numero>2</numero>

<cp>3035</cp>

</direccion>

</contacto>

</agenda>

4. FUENTE: Propio.

El siguiente documento XML ("tartas.xml") no es válido. Para que lo sea, realizar los
cambios necesarios en la DTD interna de dicho documento.

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE tartas [

<!ELEMENT tartas (tarta)>

<!ELEMENT tarta (nombre,precio,cobertura)>

<!ELEMENT nombre (#PCDATA)>

<!ELEMENT precio (#PCDATA)>

<!ELEMENT cobertura (#PCDATA)>

]>

<tartas>
<tarta>

<nombre>Golosa</nombre>

<precio>50</precio>

<cobertura>frambuesas</cobertura>

</tarta>

<tarta>

<nombre>selva negra</nombre>

<precio>70</precio>

<cobertura>chocolate belga</cobertura>

</tarta>

</tartas>
Elementos (Corregir errores en el XML sin modificar el DTD).

1. FUENTE: PROPIO.

Corrige el XML para que se cumplan los requisitos del DTD.

<?xml version="1.0" encoding="UTF-8"?>


<!DOCTYPE hotel [

<!ELEMENT hotel (habitacion+, empleado+)>


<!ELEMENT habitacion (numero, cama+, banio+)>
<!ELEMENT empleado (nombre, dni)>

<!ELEMENT numero (#PCDATA)>


<!ELEMENT cama (#PCDATA)>
<!ELEMENT banio (#PCDATA)>
<!ELEMENT nombre (#PCDATA)>
<!ELEMENT dni (#PCDATA)>
]>

<hotel>
<habitacion>
<numero>211</numero>
<cama></cama>
<cama></cama>
</habitacion>
<habitacion>
<numero>213</numero>
<cama></cama>
<banio></banio>
</habitacion>
<empleado>
<nombre>Manuel</nombre>
<apellido>Gomez</apellido>
<dni>1234</dni
</empleado>
</hotel>

2. FUENTE: (Gomez, 2016)


Unos programadores necesitan un formato de fichero para que sus distintos programas
intercambien información sobre ventas. El acuerdo al que han llegado es que su XML
debería tener esta estructura:
-El elemento raíz será <listaventas>
-Toda <listaventas> tiene una o más ventas.
-Toda <venta> tiene los siguientes datos:
-Importe, deberá aparecer una vez.
-Comprador.
-Vendedor.
-Fecha (optativa).
-Un código de factura.

En este documento XML debemos encontrarnos los errores sin tocar el DTD interno:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE listaventas[
<!ELEMENT listaventas (venta+)>
<!ELEMENT venta (importe+, comprador+,
vendedor, fecha?, codigofactura)>
<!ELEMENT importe ( #PCDATA)>
<!ELEMENT comprador (#PCDATA)>
<!ELEMENT vendedor (#PCDATA)>
<!ELEMENT fecha (#PCDATA)>
<!ELEMENT codigofactura (#PCDATA)>

]>
<listaventas>
<venta>
<comprador>Wile E.Coyote</comprador>
<vendedor>ACME</vendedor>
<codigofactura>E17</codigofactura>
</venta>
<venta>
<importe>750</importe>
<vendedor>ACME</vendedor>
<fecha>27-2-2015</fecha>
<codigofactura>E18</codigofactura>
</venta>
</listaventas>

3. FUENTE: (Gomez, 2016)


Supongamos que en nuestros ficheros deseamos indicar que el elemento raíz es
<listaclientes>. Dentro de <listaclientes> deseamos permitir uno o más elementos
<cliente>. Dentro de <cliente> todos deberán tener <cif> y <nombre> y en ese orden.
Dentro de <cliente> puede aparecer o no un elemento <diasentrega> para indicar que
ese cliente exige un máximo de plazos. Como no todo el mundo usa plazos el
<diasentrega> es optativo.

Indicar cuál de estos ejemplos es el correcto:

A.
<listaclientes>

<cliente>

<cif>5676443</cif>

<nombre>Mercasa</nombre>

</cliente>

</listaclientes>
B.

<listaclientes>
</listaclientes>

C.
<cliente>
<nombre>Mercasa</nombre>
<cif>5676443</cif>
</cliente>
<cliente>
<cif>5121554</cif>
<nombre>Acer SL</nombre>
</cliente>
</listaclientes>

D.

<cliente>
<cif>5676443</cif>
<nombre>Mercasa</nombre>
<diasentrega>30</diasentrega>
</cliente>
<cliente>
<cif>5121554</cif>
<nombre>Acer SL</nombre>
</cliente>
</listaclientes>
4. FUENTE: Propio.

El siguiente documento XML ("parcelas.xml") no es válido. Realizar los cambios necesarios


en dicho documento, pero sin modificar la DTD interna.

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE parcelas [

<!ELEMENT parcelas (parcela)*>

<!ELEMENT parcela (ciudad,tipo,codigo)>

<!ELEMENT ciudad (#PCDATA)>

<!ELEMENT tipo (#PCDATA)>

<!ELEMENT codigo (#PCDATA)>

]>

</parcelas>

<parcela>

<ciudad>Madrid</ciudad>

<codigo>3841</codigo>

</parcela>

</parcelas>

5. FUENTE: Propio.

El siguiente documento XML ("party.xml") no es válido. Realizar los cambios necesarios en


dicho documento, pero sin modificar la DTD interna.

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE party [

<!ELEMENT party (jugador)+>

<!ELEMENT jugador (nombre,clase,vida,(mana|rabia))>

<!ELEMENT nombre (#PCDATA)>


<!ELEMENT clase (#PCDATA)>

<!ELEMENT vida (#PCDATA)>

<!ELEMENT mana (#PCDATA)>

<!ELEMENT rabia (#PCDATA)>

]>

<party>

<jugador>

<nombre>DF</nombre>

<clase>mago</clase>

<vida>3200</vida>

<mana>5900</mana>

</jugador>

<jugador>

<nombre>DM</nombre>

<clase>guerrero</clase>

<vida>6000</vida>

<rabia>100</rabia>

</jugador>

<jugador>

<nombre>Ojetoso Pasalomoco</nombre>

<clase>warlock</clase>

<vida>5000</vida>

<mana>5200</mana>

</jugador>

<jugador>
<nombre>Zapp</nombre>

<clase>paladin</clase>

<vida>4500</vida>

<mana>5000</mana>

<rabia>100</rabia>

</jugador>

</party>

6. FUENTE: Propio.

Corregir los elementos sin modificar DTD.

<!DOCTYPE animales [
<!ELEMENT animales (canidos, felinos)>
<!ELEMENT canidos (perros, lobos)>
<!ELEMENT felinos (gatos, tigres)>
<!ELEMENT gatos (#PCDATA)>
<!ELEMENT perros (#PCDATA)>
<!ELEMENT tigres (#PCDATA)>
<!ELEMENT lobos (#PCDATA)>
]>

<animales>
<canidos>
labrador
<perros></perros>
<lobos> </lobos>
</canidos>
<felinos>
bengala
<tigres> </tigres>
<gatos> </gatos>
</felinos>
</animales>
Tipos de atributos (Corregir errores en el XML sin modificar DTD).

1. FUENTE: Propio.
Corrige el XML para que se cumplan los requisitos del DTD:

<?xml version="1.0" encoding="UTF-8"?>


<!DOCTYPE libreria [
<!ELEMENT libreria (libro*)>
<!ELEMENT libro EMPTY>
<!ATTLIST libro titulo ID #REQUIRED>
<!ATTLIST libro autor CDATA #REQUIRED>
]>

<libreria>
<libro titulo="Sombras de Grey" autor="Manolo" />
<libro autor="Pedro" titulo="Sombras de Grey" />
</libreria>

2. FUENTE: (Gomez, 2016)

Unos programadores necesitan estructurar la información que intercambiarán los


ficheros de sus aplicaciones para lo cual han determinado los requisitos siguientes.

-Los ficheros deben tener un elemento <listafacturas>.

-Dentro de la lista debe haber una o más facturas.

-Las facturas tienen un atributo fecha que es optativo.

-Toda factura tiene un emisor, que es un elemento obligatorio y que debe tener un
atributo cif que es obligatorio. Dentro de emisor debe haber un elemento nombre, que
es obligatorio y puede o no haber un elemento volumenventas.

-Toda factura debe tener un elemento pagador, el cual tiene exactamente la misma
estructura que emisor.

-Toda factura tiene un elemento importe.

Corregir el siguiente XML “ListaFacturas.XML” sin modifica la estructura externa del DTD.
<!DOCTYPE listafacturas SYSTEM <!ELEMENT listafacturas (factura+)>
"ListaFacturas.dtd">
<!ELEMENT factura (emisor, pagador,
<listafacturas> importe)>

<factura> <!ATTLIST factura fecha CDATA #IMPLIED>

<emisor>//falta el cif <!ELEMENT emisor (nombre, volumenventas?)>

<nombre>ACME</nombre> <!ELEMENT nombre (#PCDATA)>

</emisor> <!ATTLIST emisor cif CDATA #REQUIRED>

<nombre>ACME Inc</nombre> <!ELEMENT volumenventas (#PCDATA)>

<!ELEMENT pagador (nombre, volumenventas?)>


<volumenventas>2000</volumenventas>
<!ATTLIST pagador cif CDATA #REQUIRED>
<importe>2500</importe>
<!ELEMENT importe (#PCDATA)>

</factura>

</listafacturas>

3. FUENTE: Propia.

El siguiente documento XML ("agenda.xml") no es válido. Realizar los cambios necesarios en


dicho documento, pero sin modificar la DTD interna:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE agenda [
<!ELEMENT agenda (persona)*>
<!ELEMENT persona (nombre,telefono+)>
<!ELEMENT nombre (#PCDATA)>
<!ELEMENT telefono (#PCDATA)>
<!ATTLIST telefono tipo CDATA #REQUIRED>
<!ATTLIST telefono prefijo CDATA #REQUIRED>
]>

<agenda>
<persona>
<nombre>Raul</nombre>
<telefono tipo= "fijo"
prefijo="91">3897845</telefono>
</persona>
<persona>
<nombre>Sergio</nombre>
<telefono tipo= "fijo"
prefijo="91">3689232</telefono>
<telefono tipo=
"movil">645232161</telefono>
</persona>
</agenda>

Tipos de atributos. (Corregir errores en el DTD sin modificar el XML).

1. FUENTE: Propia.
Corrige el DTD para que se corresponda con el XML:
<?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>

2. FUENTE: (Gomez, 2016)

Se necesita un formato de archivo para intercambiar productos entre almacenes de productos


de librería y se desea una DTD que incluya estas restricciones:
• Debe haber un elemento raíz pedido que puede constar de libros, cuadernos y/o
lápices. Los tres elementos pueden aparecer repetidos y en cualquier orden. También
pueden aparecer por ejemplo 4 libros, 2 lápices y luego 4 lápices de nuevo.
• Todo libro tiene un atributo obligatorio título.
• Los elementos cuaderno tiene un atributo optativo num_hojas.
• Todo elemento lápiz debe tener dentro un elemento obligatorio número.
Corregiremos los errores sin tocar el DTD.

<!ELEMENT pedido <?xml version="1.0"


(libro,cuaderno,lapiz)> encoding="UTF-8"?>
<!DOCTYPE pedido SYSTEM
<!ELEMENT libro (#PCDATA)> "libreria.dtd">
<pedido>
<!ATTLIST libro titulo CDATA
<cuaderno></cuaderno>
#REQUIRED> <libro titulo="Java 8"></libro>
<!ELEMENT cuaderno (#PCDATA)> <libro titulo="HTML y CSS"/>
<libro titulo="SQL para
<!ELEMENT lapiz (numero)> Dummies"/>
<cuaderno num_hojas="150"/>
<!ELEMENT numero (#PCDATA)> <lapiz>
<numero>2H</numero>
</lapiz>
<cuaderno num_hojas="250"/>
<cuaderno num_hojas="100"/>
<lapiz>
<numero>2B</numero>
</lapiz>
<lapiz>
<numero>1HB</numero>
</lapiz>
</pedido>
3. FUENTE: Propia.

El siguiente documento XML ("deceit.xml") no es válido. Realizar los cambios necesarios en


dicho documento, pero sin modificar la DTD interna.

<?xml version="1.0" encoding="UTF-8"?>


<!DOCTYPE deceit [
<!ELEMENT deceit (jugador)*>
<!ELEMENT jugador (nombre)>
<!ELEMENT nombre (#PCDATA)>
<!ATTLIST nombre infectado CDATA
#REQUIRED>
<!ATTLIST nombre sangre CDATA #REQUIRED>
]>

<deceit>
<jugador>
<nombre infectado= "si"
sangre="100">DF</nombre>
</jugador>
<jugador>
<nombre infectado=
"no">Markus</nombre>
</jugador>
<jugador>
<nombre infectado= "no"
>Zapp</nombre>
</jugador>
<jugador>
<nombre infectado= "si"
sangre="50">DM</nombre>
</jugador>
<jugador>
<nombre infectado= "no">Ojetoso
Pasalomoco</nombre>
</jugador>
<jugador>
<nombre infectado= "no">Mr
Boolean</nombre>
</jugador>
</deceit>
Corregir errores DTD y XML (MIXTO).

1) 2)

<!DOCTYPE familiatradicional [ <!DOCTYPE lanparty [


<!ELEMENT familiatradicional
(progenitores+|hijos?)> <!ELEMENT lanparty (ordenadores+,
<!ELEMENT progenitores jugadores+)>
(hombre|mujer)> <!ELEMENT ordenadores (raton,teclado,
<!ELEMENT hijos (hombre? | mujer?)> juegos+)>
<!ELEMENT hombre (nombre)> <!ELEMENT jugadores (nombre, ganas)>
<!ELEMENT mujer (nombre, apellido)> <!ELEMENT raton (#PCDATA)>
<!ELEMENT nombre> <!ELEMENT teclado (#PCDATA)>
<!ELEMENT apellido (#PCDATA)> <!ELEMENT juegos (#PCDATA)>
]> <!ELEMENT nombre (#PCDATA)>
<!ELEMENT ganas (#PCDATA)>
<familiatradicional> ]>
<progenitores>
<hombre> <lanparty>
<nombre>Antonio</nombre> <ordenadores>
<apellido>Jimenez</apellido> <raton>Marca genérica1</raton>
</hombre> <teclado>Marca genérica2</teclado>
<mujer> </ordenadores>
<nombre>Lola</nombre> <ordenadores>
<apellido>Vidal</apellido> <raton>Marca genérica41</raton>
</mujer> <teclado>Marca genérica45</teclado>
</progenitores> <teclado>Marca genérica415</teclado>
<hijos> <juegos>Deceit</juegos>
<mujer> <juegos>Spellsworn</juegos>
<nombre>Jimena</nombre> </ordenadores>
<apellido>Garcia</apellido> <jugadores>
</mujer> <nombre>Jorge Vallejo</nombre>
</hijos> <nombre>David Marcos</nombre>
</familiatradicional> <ganas>Muchas</ganas>
</jugadores>
<jugadores>
<nombre>David Lorenzo</nombre>
<ganas>Intermedias</ganas>
</jugadores>
</lanparty>
Crear documentos. FUENTE: https://www.youtube.com/watch?v=BJsCautAB08&t=3684s

1. Cree el documento XML más pequeño posible a partir del siguiente archivo DTD.

<?xml version="1.0" encoding="UTF-8"?>


<!DOCTYPE aa
[
<!ELEMENT aa (aa1,aa2?)>
<!ELEMENT aa1 (#PCDATA)>
<!ELEMENT aa2 (#PCDATA)>
]>

2. Crear un documento XML que sea válido para este DTD:

<!DOCTYPE carnet[
<!ELEMENT carnet (personas+) >
<!ELEMENT persona EMPTY >
<!ATTLIST persona
apellido CDATA #REQUIRED
nombre CDATA #IMPLIED
telefono CDATA #REQUIRED
]>

3.
Queremos crear un archivo DTD que permita describir un formato para almacenar una
lista de estudiantes y los módulos que siguen. Para cada alumno queremos:
el nombre del curso(s) que está siguiendo,
El nombre de cada módulo (con precisión si es un módulo libre o no),
su calificación si ya tiene una (solo una calificación por módulo),
su contacto (opcional).
a. Dar un DTD respondiendo el problema.
b. Cree un archivo XML con 2 estudiantes y valide todo.

4. Escribir un DTD para una bibliografía.


Esta bibliografía puede contener libros y artículos. La información requerida para un
libro es:
Su título general, el nombre del autor(es), sus volúmenes y para cada volumen, su
número de páginas, información general sobre su edición, como por ejemplo el nombre
de la editorial, el lugar de publicación, el lugar de impresión, su número ISBN. También
reservaremos un campo opcional para una opinión personal. La información necesaria
para un artículo es:
su título, el nombre del autor(es), sus referencias de publicación: nombre de la revista,
número de página, año de publicación y número de la revista.
Misceláneas.

1. ¿Cuáles de las siguientes etiquetas XML son válidas y cuáles no? Justifica tus
respuestas: (Picazo, n.d.)

- <leccion>
- <alumno y profesor>
- <alumnoyprofesor>
- <alumnøyprøfesør>
- <TebeoDeGarfield>
- <XMLmeEncanta>
- <33df>
- <alumno.y.profesor>
- <>

2. Entendiendo como árbol binario un árbol del cual cada nodo puede o bien crear dos
nuevas ramas o bien presentar una hoja (en nuestro ejemplo, un valor): (Picazo, n.d.)

Diseñar un DTD para representar árboles binarios y nada más que eso. Cuando se
creen 2 ramas, estas no deben llevar ninguna información, mientras que cada hoja
debería llevar un valor que puede ser cualquier string (#PCDATA).

3. Teniendo en cuenta el archivo DTD que acabas de crear, diseña un archivo XML que
represente el árbol binario en la figura incluida en el ejercicio 4, por supuesto que sea
conforme con tu archivo DTD. (Picazo, n.d.)

4. Considera una aplicación que almacena los resultados de un partido de fútbol en un


documento XML. (Qiu, n.d.)

- Para cada partido, queremos que represente dos equipos (uno local y uno
visitante), qué jugadores han anotado (pudiendo haberlo hecho de penalty) y el
minuto en el que lo han hecho. Finalmente, también queremos registrar aquellos
jugadores a los que se les ha amonestado (con amarilla o roja). Se pueden usar
atributos.
5. Estás creando una aplicación para móviles para predicciones del tiempo. Para ello, vas
a comunicarte con tu servidor a través de documentos XML (en ambas direcciones;
móvil-servidor, servidor-móvil). (Picazo, n.d.)

a. Escribe un XML para la petición al servidor. Debe contener el lugar y la fecha


para el cual estamos haciendo la petición. Puedes añadir otros detalles si lo
crees necesario.
b. Escribe un XML para la respuesta del servidor. Debe contener una breve
descripción y una predicción algo más detallada. Añade otra información que
permita a tu aplicación dar información más amplia, como, por ejemplo,
temperaturas durante el día y la noche.
SOLUCIONES.

Elementos (errores detectados y corregidos en el DTD sin modificar el XML).

EJERCICIO 1:

<?xml version="1.0" encoding="UTF-8"?>


<!DOCTYPE empresa [
<!ELEMENT empresa (jefazo+)>
<!ELEMENT jefazo (hombre | mujer)>
<!ELEMENT hombre (nombre, apellido)>
<!ELEMENT mujer (nombre, apellido)>
<!ELEMENT nombre (#PCDATA)>
<!ELEMENT apellido (#PCDATA)>
]>

<empresa>
<jefazo>
<hombre>
<nombre>Juanjo</nombre>
<apellido>Perez</apellido>
</hombre>
</jefazo>
<jefazo>
<mujer>
<nombre>Maira</nombre>
<apellido>Palomares</apellido>
</mujer>
</jefazo>
<jefazo>
<hombre>
<nombre>Pablo</nombre>
<apellido>Ayuso</apellido>
</hombre>
</jefazo>
</empresa>
EJERCICIO 2:

<?xml version="1.0" encoding="UTF-8"?>


<!DOCTYPE centro_Comercial [
<!ELEMENT centro_Comercial (tienda+, cine?)>
<!ELEMENT tienda (tipo, trabajadores, estado)>
<!ELEMENT estado (abierta | cerrada)>
<!ELEMENT abierta (#PCDATA)>
<!ELEMENT cerrada (#PCDATA)>
<!ELEMENT tipo (#PCDATA)>
<!ELEMENT trabajadores (#PCDATA)>
<!ELEMENT cine (#PCDATA)>
]>

<centro_Comercial>
<tienda>
<tipo>Comida</tipo>
<trabajadores>4</trabajadores>
<estado>
<abierta></abierta>
</estado>
</tienda>
<tienda>
<tipo>Ropa</tipo>
<trabajadores>4</trabajadores>
<estado>
<cerrada></cerrada>
</estado>
</tienda>
</centro_Comercial>
EJERCICIO 3:

<!ELEMENT agenda (contacto*)>

<!ELEMENT contacto (nombre,apellido,telefono,


email? , direccion) >

<!ELEMENT nombre (#PCDATA) >

<!ELEMENT apellido (#PCDATA) >

<!ELEMENT telefono (#PCDATA) >

<!ELEMENT email (#PCDATA) >

<!ELEMENT direccion>

<!ELEMENT calle (#PCDATA) >

<!ELEMENT numero (#PCDATA) >

<!ELEMENT cp (#PCDATA) >

<!ATTLIST telefono pais CDATA #REQUIRED>

- Para que pueda tener mínimo 1 apellido y máximo los que quiera tener se añadirá un
“+” en el respectivo hijo:
-
<!ELEMENT contacto (nombre,apellido,telefono, email? , direccion) >

- Los elementos calle, numero, cp, deben estar declarados como hijos del elemento
dirección.
<!ELEMENT direccion (calle,numero,cp)>
EJERCICIO 4:

En este caso sólo podría aparecer una tarta, nos valdría con el indicador + de 1 o más o el * de
cero o más ocurrencias, en esta solución utilizaremos ese. El DTD interno quedaría así:

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE tartas [

<!ELEMENT tartas (tarta)*>

<!ELEMENT tarta (nombre,precio,cobertura)>

<!ELEMENT nombre (#PCDATA)>

<!ELEMENT precio (#PCDATA)>

<!ELEMENT cobertura (#PCDATA)> ]>

Elementos (errores corregidos en el XML sin modificar el DTD).

EJERCICIO 1:

<hotel>
<?xml version="1.0" encoding="UTF- <habitacion>
8"?> <numero>211</numero>
<!DOCTYPE hotel [ <cama></cama>
<!ELEMENT hotel (habitacion+, <cama></cama>
empleado+)> <banio></banio>
<!ELEMENT habitacion (numero, </habitacion>
cama+, banio+)> <habitacion>
<!ELEMENT empleado (nombre, dni)> <numero>213</numero>
<cama></cama>
<!ELEMENT numero (#PCDATA)> <banio></banio>
<!ELEMENT cama (#PCDATA)> </habitacion>
<!ELEMENT banio (#PCDATA)> <empleado>
<!ELEMENT nombre (#PCDATA)> <nombre>Manuel</nombre>
<!ELEMENT dni (#PCDATA)> <dni>1234</dni>
]> </empleado>
</hotel>
EJERCICIO 2:

 El hijo “importe” del elemento VENTA deberá añadirse en la primera VENTA:

<importe>750</importe>
<comprador>Manolo
Lamas</comprador>
<vendedor>ACME</vendedor>
<fecha>27-2-2015</fecha>

<codigofactura>E18</codigofactura>

 El hijo “comprador” del elemento VENTA debe aparecer la segunda VENTA:

<importe>18</importe>
<comprador>Wile
E.Coyote</comprador>
<vendedor>ACME</vendedor>

<codigofactura>E17</codigofactura>

EJERCICIO 3:

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE listaclientes[

<!ELEMENT listaclientes (cliente+)>

<!ELEMENT cliente (cif,nombre,diasentrega?)>

<!ELEMENT cif (#PCDATA)>

<!ELEMENT nombre (#PCDATA)>

<!ELEMENT diasentrega (#PCDATA)>

]>

A. El primer ejemplo es válido, contiene todos los elementos en orden y aunque no


incluye los “diasentrega” es válido por ser opcional.
B. El ejemplo 2 no es válido porque no contiene el elemento cliente y era obligatorio
que aparezca al menos una vez.
C. El archivo no contiene el nombre del cliente, habría que añadirlo
D. El ejercicio 3 no es válido porque no respeta el orden ---> cif y después nombre.

EJECICIO 4:

El elemento parcelas debe de contener los 3 elementos que se indican, falta tipo.

<parcelas>

<parcela>

<ciudad>Madrid</ciudad>

<tipo>Urbanizable</tipo>

<codigo>3841</codigo>

</parcela>

</parcelas>

EJERCICIO 5:

EL jugador Zapp tiene mana y rabia cuando el DTD especifica que sólo puede tener mana o
rabia, solo uno de los dos. En este caso sólo corregiremos ese jugador por ver la corrección
más clara. Le quitamos rabia ya que es un paladin y se soluciona.

<jugador>

<nombre>Zapp</nombre>

<clase>paladin</clase>

<vida>4500</vida>

<mana>5000</mana>

</jugador>

EJERCICIO 6:

Canidos y felinos no puede contener un nombre de una raza, deben de ponerse dentro de
perros, tigres.
<!DOCTYPE animales [
<!ELEMENT animales (canidos,
felinos)>
<!ELEMENT canidos (perros, lobos)>
<!ELEMENT felinos (gatos, tigres)>
<!ELEMENT gatos (#PCDATA)>
<!ELEMENT perros (#PCDATA)>
<!ELEMENT tigres (#PCDATA)>
<!ELEMENT lobos (#PCDATA)>
]>

<animales>
<canidos>
<perros> Labrador </perros>
<lobos> Utonagan </lobos>
</canidos>
<felinos>
<tigres> Bengala </tigres>
<gatos> Persa </gatos>
</felinos>
</animales>

Tipos de atributos (errores corregidos en el XML sin modificar el DTD).

EJERCICIO 1:

<?xml version="1.0" encoding="UTF-8"?>


<!DOCTYPE libreria [
<!ELEMENT libreria (libro*)>
<!ELEMENT libro EMPTY>
<!ATTLIST libro titulo ID #REQUIRED>
<!ATTLIST libro autor CDATA #REQUIRED>
]>

<libreria>
<libro titulo="Sombras_de_Grey" autor="Manolo" />
<libro autor="Pedro" titulo="Cortilandia" />
</libreria>
EJERCICIO 2:

- Debemos de poner el valor del atributo cif que pertenece al emisor emisor porque es
obligatorio.

<emisor cif="123">

- El atributo padre “PAGADOR” junto con el valor del atributo “CIF” porque son
obligatorios, se debe de poner antes de declarar a sus hijos.
-
<pagador cif="234">
<nombre>ACME Inc</nombre>
<volumenventas>2000</volumenventas>
</pagador>

- La fecha no es necesaria ponerla porque es opcional. Se haría de la siguiente forma:

<factura fecha="11-2-2015">

EJERCICIO 3:

El atributo prefijo es necesario en todos los teléfonos sean móviles fijos o lo que sea. En este
caso en el segundo teléfono de Sergio falta.

El XML quedaría así después de corregirlo:

<agenda>
<persona>
<nombre>Raul</nombre>
<telefono tipo= "fijo"
prefijo="91">3897845</telefono>
</persona>
<persona>
<nombre>Sergio</nombre>
<telefono tipo= "fijo"
prefijo="91">3689232</telefono>
<telefono tipo="movil"
prefijo="34">645232161</telefono>
</persona>

</agenda>
Tipos de atributos (errores corregidos en el DTD sin modificar el XML).

EJERCICIO 1:

<?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>

EJERCICIO 2:

Al declarar PEDIDO con sus respectivos hijos:


<!ELEMENT pedido (libro,cuaderno,lapiz)>

Obligamos a que estos aparezcan en orden, aunque si se puedan repetir, la solución sería
añadir el símbolo “|” por la “,” para que se pueda poner en cualquier orden y añadir el símbolo
“+” después del paréntesis cerrando, porque queremos que se puedan repetir varias veces.
<!ELEMENT pedido (libro|cuaderno|lapiz)+>

Después de haber declarado el elemento cuaderno, habría que crear su atributo que sería
“num_hojas”, de cadena de carácter, con su valor de tipo opcional “#IMPLIED”.
<!ATTLIST cuaderno num_hojas CDATA #IMPLIED>

EJERCICIO 3:

En este caso como pone que sangre es un atributo obligatorio habría 2 opciones, o bien ponerlo
en todos los jugadores, o no ponerlo obligatorio, ponerlo IMPLIED, en nuestro caso como el
enunciado nos pide modificar el DTD interno sería lo segundo, además en este caso no tiene
sentido poner el nivel de sangre si no estás infectado. El DTD interno quedaría así:

<?xml version="1.0" encoding="UTF-8"?>


<!DOCTYPE deceit [
<!ELEMENT deceit (jugador)*>
<!ELEMENT jugador (nombre)>
<!ELEMENT nombre (#PCDATA)>
<!ATTLIST nombre infectado CDATA
#REQUIRED>
<!ATTLIST nombre sangre CDATA #IMPLIED>
]>
CORREGIR ERRORES (MIXTO).

1. Se ha cambiado "|" por "," en progenitores e hijos. Se ha añadido "apellido" a hombre,


se ha añadido "#PCDATA" a nombre:

<!DOCTYPE familiatradicional [ <familiatradicional>


<!ELEMENT familiatradicional <progenitores>
(progenitores+,hijos?)> <hombre>
<!ELEMENT progenitores <nombre>Antonio</nombre>
(hombre,mujer)> <apellido>Jimenez</apellido>
<!ELEMENT hijos (hombre? | </hombre>
mujer?)> <mujer>
<!ELEMENT hombre (nombre, <nombre>Lola</nombre>
apellido)> <apellido>Vidal</apellido>
<!ELEMENT mujer (nombre, </mujer>
apellido)> </progenitores>
<!ELEMENT nombre (#PCDATA)> <hijos>
<!ELEMENT apellido (#PCDATA)> <mujer>
]> <nombre>Jimena</nombre>
<apellido>Garcia</apellido>
</mujer>
</hijos>
</familiatradicional>

2. Ordenador necesita juegos, ordenador no puede tener más de un teclado, jugadores


no pueden tener más de un nombre:

<lanparty>
<!DOCTYPE lanparty [
<ordenadores>
<raton>Marca genérica1</raton>
<!ELEMENT lanparty (ordenadores+,
<teclado>Marca genérica2</teclado>
jugadores+)>
<juegos>Deceit</juegos>
<juegos>Spellsworn</juegos>
<!ELEMENT ordenadores (raton,teclado,
</ordenadores>
juegos+)>
<ordenadores>
<raton>Marca genérica41</raton>
<!ELEMENT jugadores (nombre, ganas)>
<teclado>Marca genérica45</teclado>
<juegos>Deceit</juegos>
<!ELEMENT raton (#PCDATA)>
<juegos>Spellsworn</juegos>
<!ELEMENT teclado (#PCDATA)>
</ordenadores>
<!ELEMENT juegos (#PCDATA)>
<jugadores>
<!ELEMENT nombre (#PCDATA)>
<nombre>Jorge Vallejo</nombre>
<!ELEMENT ganas (#PCDATA)>
<ganas>Muchas</ganas>
]>
</jugadores>
<jugadores>
<nombre>David Lorenzo</nombre>
<ganas>Intermedias</ganas>
</jugadores>
</lanparty>
Creación de documentos.

EJERCICIO 1:

<aa>
<aa1> Mensaje1 de tipo texto
</aa1>
<aa2> Mensaje2 de tipo texto
</aa2>
</aa>

EJERCICIO 2:

<carnet>
<persona apellido="Lorenzo"
telefono="65654312">
<persona apellido="Ballejo" nombre="Jonas"
telefono="65345634">
<Personas apellido="Morales" nombre="Sifredi"
telefono="6546456">
</carnet>

EJERCICIO 3:

<!DOCTYPE lista_estudiante [ <lista_estudiante>


<!ELEMENT lista_estudiante (estudiante+)> <estudiante>
<!ELEMENT estudiante <curso> aa </curso>
(curso+,modulos+,contacto+)> <curso> aaa </curso>
<!ELEMENT curso (#PCDATA) > <curso> aaaaa
<!ATTLIST module type CDATE #REQUIRED > </curso>
<!ATTLIST module note CDATA #REQUIRED > <module type=" "
<!ELEMENT contacto note=" "></modulo>
(apellido,telefono,direccion)> <module type=" "
<!ELEMENT apellido (#PCDATA) > note=" "></modulo>
<!ELEMENT telefono (#PCDATA) > <module type=" "
<!ELEMENT direccion (#PCDATA) > note=" "></modulo>
]> <contacto>

<apellido></apellido>

<telefono></telefono>

<direccion></direccion>
<contacto>
</estudiante>
</lista_estudiante>
EJERCICIO 4:

<!DOCTYPE bibliografia [
<!-- Elemento Bibliografia -->
<!ELEMENT bibliografia (libro,articulo+) >
<!-- Elemento libro -->
<!ELEMENT libro (titulo,
autor+,volumenes+,edicion,opinion?) >
<!ELEMENT titulo (#PCDATA) >
<!ELEMENT autor (#PCDATA) >
<!ELEMENT volumen (paginas) >
<!ELEMENT paginas (#PCDATA) >
<!ELEMENT edicion
(editor,lugarEdicion,lugarImpresion,ISBN) >
<!ELEMENT editor (#PCDATA) >
<!ELEMENT lugarEdicion (#PCDATA) >
<!ELEMENT lugarImpresion (#PCDATA) >
<!ELEMENT ISBN (#PCDATA) >
<!-- ELEMENTO ARTICULO -->
<!ELEMENT articulo (titulo,autor+,publicacion)
>
<!ELEMENT autor (#PCDATA) >
<!ELEMENT publicacion
(nombreRevista,numeroPaginas,Anio,NumeroRevista) >
<!ELEMENT NombreRevista (#PCDATA) >
<!ELEMENT NumeroPaginas (#PCDATA) >
<!ELEMENT Anio (#PCDATA) >
<!ELEMENT NumeroRevista (#PCDATA) >
]>

Misceláneas.

EJERCICIO 1:
<lección> <alumno y profesor> <alumno&profesor>

Válido; consta de letras No válido; una etiqueta no No válido; la etiqueta no puede


únicamente puede contener espacios contener caracteres que no sean
letras, dígitos, puntos, dos puntos,
guiones o barras bajas.
<alumnøyprøfesør> <TebeoDeGarfield> <XMLmeEncanta>

Válido; ø es parte de los Válido, letras mayúsculas y Válido; letras mayúsculas y


caracteres Unicode. minúsculas. minúsculas, habría limitación si
intentase usar “xml” en minúsculas.
<33df> <alumno.y.profesor> <>

No válido: el nombre de la Válido: el nombre está formado No válido; no puede haber


etiqueta no puede empezar con por letras, números y puntos; y ausencia de nombre
un número empieza por una letra

EJERCICIO 2:

<!DOCTYPE AB [
<!ELEMENT AB ((AB,AB) | Hojas)>
<!ELEMENT Hoja (#PCDATA)>]>

EJERCICIO 3:

<AB>
<AB><Hoja>1</Hoja></AB>
<AB>
<AB>
<AB><Hoja>2</Hoja></AB>
<AB><Hoja>3</Hoja></AB>
</AB>
<AB><Hoja>4</Hoja></AB>
</AB>
</AB>

EJERCICIO 4:

<?xml version="1.0"?>
<!DOCTYPE partidos[
<!ELEMENT partido(partido)*>
<!ELEMENT partido(equipo-local, equipo-visitante, goles, amarillas,
rojas)>
<!ELEMENT equipo-local(#PCDATA)>
<!ELEMENT equipo-visitante(#PCDATA)>
<!ELEMENT goles(gol)*>
<!ELEMENT amarillas(jugador)*>
<!ELEMENT rojas(jugador)*>
<!ELEMENT gol(jugador)*>
<!ELEMENT jugador(#PCDATA)>
<!ATTLIST partido gol CDATA #REQUIRED>
<!ATTLIST gol minuto CDATA #REQUIRED>
<!ATTLIST gol tipo(normal|penalty)#IMPLIED>
]>

EJERCICIO 5:

XML PETICIÓN A SERVIDOR

<?xml version="1.0"?>
<peticion-prevision-tiempo>
<ciudad>Madrid</ciudad >
<fecha>23.03.2020</fecha>
<idioma>Español</idioma>
<sistema>Celsius</sistema>
</peticion-prevision-tiempo>

XML SERVIDOR A APLICACIÓN

<?xml version="1.0"?>
<respuesta-prevision-tiempo idioma="Español">
<ciudad>Madrid</ciudad>
<fecha>23.03.2020</fecha>
<descripcion-corta>
Granizo y cuarentena.
</short-description>
<descripción-larga>
Debido a un nuevo virus, no se puede salir de casa, así que no importa
mucho el tiempo que haga. En cualquier caso…
</descripcion-larga>
<temperaturas sistema="Celsius">
<temperatura when="día">
15.0
</temperatura>
<temperatura when="noche">
5.0
</temperatura>
</temperaturas>
</weather-forecast-reply>

Bibliografía
Gomez, O. (n.d.). Retrieved from
https://oscarmaestre.github.io/lenguajes_marcas/tema5.html

Gomez, O. (2016). Retrieved from


https://oscarmaestre.github.io/lenguajes_marcas/tema5.html

Picazo, P. (n.d.). University of Gothenburg. Retrieved from


https://www.google.com/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&ved=2ahUK
EwjXvpqR-
LDoAhUGdBQKHRKaA6oQFjAAegQIBhAB&url=http%3A%2F%2Fwww.cse.chalmers.se%
2Fedu%2Fyear%2F2017%2Fcourse%2FTDA357%2FVT2017%2Ftutorials%2FEx6-incl.-
solutions.pdf&usg=AOvVaw0DD6sWQkC

Qiu, D. (n.d.). Exercises: DTD. Retrieved from


https://www.google.com/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&ved=2ahUK
EwjNoauM_LDoAhUSDxQKHb5QBqgQFjAAegQIBhAB&url=http%3A%2F%2Fwww.dia.u
niroma3.it%2F~atzeni%2Fdidattica%2FBD%2F20112012%2FEx%252001%2520DTD.pdf
&usg=AOvVaw1D6m4SMZfEDoqD9zgAfpw7

También podría gustarte