Saltar al contenido principal

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 paneles dispone de uno o más elementos evento.
  • Cada elemento evento está compuesto por los siguientes elementos obligatorios: via, pk, retencion y sentido. Además, contiene un elemento carrilescortados que es optativo.
  • El elemento evento dispone de dos atributos: tipo (obligatorio) y fecha (optativo).
  • El elemento via está formado por los siguientes elementos: nombre, ref, origen, destino. Además, podrá contener un elemento doble o un elemento sentido. También, contendrá un elemento carriles.
  • El elemento doble será un elemento vacío.
  • El elemento sentido contendrá una cadena de texto.
  • El elemento retencion es un elemento vacío que contiene un atributo long.
  • El elemento carrilescortados tendrá un atributo obligatorio denominado valor el cual solo podrá tener los valores 1, 2, 3 y 4.

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>