Ejercicio 405
Se quiere llevar a cabo una gestión de los paneles informativos que se pueden encontrar en una autopista. Para ello, se va a utilizar un fichero XML que debe cumplir las siguientes premisas:
- El nodo raíz
panelesdispone de uno o más elementosevento. - Cada elemento
eventoestá compuesto por los siguientes elementos obligatorios:via,pk,retencionysentido. Además, contiene un elementocarrilescortadosque es optativo. - El elemento
eventodispone de dos atributos:tipo(obligatorio) yfecha(optativo). - El elemento
viaestá formado por los siguientes elementos:nombre,ref,origen,destino. Además, podrá contener un elementodobleo un elementosentido. También, contendrá un elementocarriles. - El elemento
dobleserá un elemento vacío. - El elemento
sentidocontendrá una cadena de texto. - El elemento
retenciones un elemento vacío que contiene un atributolong. - El elemento
carrilescortadostendrá un atributo obligatorio denominadovalorel cual solo podrá tener los valores1,2,3y4.
Elabora un documento XML a modo de ejemplo, el cual incluya un DTD interno que permita validar la correcta estructura del fichero XML.
Solución
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE paneles [
<!ELEMENT paneles (evento+)>
<!ELEMENT evento (via, pk, retencion, sentido, carrilescortados?)>
<!ATTLIST evento tipo CDATA #REQUIRED>
<!ATTLIST evento fecha CDATA #IMPLIED>
<!ELEMENT via (nombre, ref, origen, destino, (doble|sentido), carriles)>
<!ELEMENT nombre (#PCDATA)>
<!ELEMENT ref (#PCDATA)>
<!ELEMENT origen (#PCDATA)>
<!ELEMENT destino (#PCDATA)>
<!ELEMENT doble EMPTY>
<!ELEMENT carriles (#PCDATA)>
<!ELEMENT pk (#PCDATA)>
<!ELEMENT retencion EMPTY>
<!ATTLIST retencion long CDATA #IMPLIED>
<!ELEMENT sentido (#PCDATA)>
<!ELEMENT carrilescortados (#PCDATA)>
<!ATTLIST carrilescortados valor (1|2|3|4) #REQUIRED>
]>
<paneles>
<evento tipo="Accidente" fecha="Mon, 31 Jan 2011 23:00:00 GMT">
<via>
<nombre>Autopista del V Centenario</nombre>
<ref>A-49</ref>
<origen>Sevilla</origen>
<destino>Huelva</destino>
<doble />
<carriles>4</carriles>
</via>
<pk>42.200</pk>
<retencion long="8.000" />
<sentido>1</sentido>
<carrilescortados valor="4" />
</evento>
<evento tipo="Retención" fecha="Tue, 1 Feb 2011 13:43:01 GMT">
<via>
<nombre>Autovía de Andalucía</nombre>
<ref>A-4</ref>
<origen>Madrid</origen>
<destino>Cádiz</destino>
<sentido>doble</sentido>
<carriles>4</carriles>
</via>
<pk>550.000</pk>
<retencion long="3.000" />
<sentido>-1</sentido>
</evento>
</paneles>