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 elementosevento
. - Cada elemento
evento
está compuesto por los siguientes elementos obligatorios:via
,pk
,retencion
ysentido
. Además, contiene un elementocarrilescortados
que es optativo. - El elemento
evento
dispone de dos atributos:tipo
(obligatorio) yfecha
(optativo). - El elemento
via
está formado por los siguientes elementos:nombre
,ref
,origen
,destino
. Además, podrá contener un elementodoble
o un elementosentido
. También, contendrá un elementocarriles
. - 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 atributolong
. - El elemento
carrilescortados
tendrá un atributo obligatorio denominadovalor
el cual solo podrá tener los valores1
,2
,3
y4
.
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>