Ejercicio 404
Consideremos el siguiente documento XML:
<factura id="876">
<emision>2012-02-28T08:25:02</emision>
<vendedor id="12">
<nombre>Felipe Cuesta Pérez</nombre>
</vendedor>
<cliente id="9878">
<nombre>Raquel Rengo Suárez</nombre>
<direccion>
<via>Calle Alonso Cano, 2, 3º A</via>
<cp>41700</cp>
<localidad>Dos Hermanas</localidad>
<provincia>Sevilla</provincia>
</direccion>
<telefono num="666111666"/>
<telefono num="954666111"/>
</cliente>
<articulo id="121" iva="18">
<denominacion>Silla giratoria modelo C-121</denominacion>
<precio>98.23</precio>
<cantidad>1</cantidad>
</articulo>
<articulo id="9341" iva="18">
<denominacion>Mesa estudio 120x80 haya modelo A2-456-X</denominacion>
<precio>193.23</precio>
<cantidad>1</cantidad>
</articulo>
<articulo id="1124" iva="18">
<denominacion>Lámpara mesa con pantalla naranja modelo AK-987</denominacion>
<precio>23.12</precio>
<cantidad>2</cantidad>
</articulo>
<descuento>20</descuento>
</factura>
Elabora un documento DTD que permita validar la estructura del documento XML anterior, teniendo en cuenta los siguientes aspectos:
- Toda
factura
tiene un identificador obligatorio. - Los elementos
emision
,vendedor
,cliente
yarticulo
son obligatorios, mientras quedescuento
es opcional. - El elemento
articulo
puede aparecer varias veces. Los demás sólo una vez. vendedor
tiene el atributo obligatorioid
y debe contener obligatoriamente un elementonombre
.cliente
tiene el atributo obligatorioid
y contiene los elementosnombre
,direccion
yteléfono
.nombre
ydireccion
son obligatorios, mientras quetelefono
es opcional y además puede aparecer más de una vez.- Cada
articulo
tiene los atributos obligatoriosid
eiva
y los elementos obligatoriosdenominacion
,precio
ycantidad
.
Solución
XML
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE factura SYSTEM "404.dtd">
<factura id="876">
<emision>2012-02-28T08:25:02</emision>
<vendedor id="12">
<nombre>Felipe Cuesta Pérez</nombre>
</vendedor>
<cliente id="9878">
<nombre>Raquel Rengo Suárez</nombre>
<direccion>
<via>Calle Alonso Cano, 2, 3º A</via>
<cp>41700</cp>
<localidad>Dos Hermanas</localidad>
<provincia>Sevilla</provincia>
</direccion>
<telefono num="666111666"/>
<telefono num="954666111"/>
</cliente>
<articulo id="121" iva="18">
<denominacion>Silla giratoria modelo C-121</denominacion>
<precio>98.23</precio>
<cantidad>1</cantidad>
</articulo>
<articulo id="9341" iva="18">
<denominacion>Mesa estudio 120x80 haya modelo A2-456-X</denominacion>
<precio>193.23</precio>
<cantidad>1</cantidad>
</articulo>
<articulo id="1124" iva="18">
<denominacion>Lámpara mesa con pantalla naranja modelo AK-987</denominacion>
<precio>23.12</precio>
<cantidad>2</cantidad>
</articulo>
<descuento>20</descuento>
</factura>
404.dtd
<!ELEMENT factura (emision, vendedor, cliente, articulo+, descuento?)>
<!ATTLIST factura id CDATA #REQUIRED>
<!ELEMENT emision (#PCDATA)>
<!ELEMENT vendedor (nombre)>
<!ATTLIST vendedor id CDATA #REQUIRED>
<!ELEMENT nombre (#PCDATA)>
<!ATTLIST cliente id CDATA #REQUIRED>
<!ELEMENT cliente (nombre, direccion, telefono*)>
<!ELEMENT direccion (via, cp, localidad, provincia)>
<!ELEMENT via (#PCDATA)>
<!ELEMENT cp (#PCDATA)>
<!ELEMENT localidad (#PCDATA)>
<!ELEMENT provincia (#PCDATA)>
<!ELEMENT telefono (#PCDATA)>
<!ATTLIST telefono num CDATA #REQUIRED>
<!ATTLIST articulo id CDATA #REQUIRED>
<!ATTLIST articulo iva CDATA #REQUIRED>
<!ELEMENT articulo (denominacion, precio, cantidad)>
<!ELEMENT denominacion (#PCDATA)>
<!ELEMENT precio (#PCDATA)>
<!ELEMENT cantidad (#PCDATA)>
<!ELEMENT descuento (#PCDATA)>