Ejercicio de DTD - Panel de vuelos
Escribir un documento XML con una DTD interna que represente la siguiente información ficticia:
Código | Diario | Origen | Destino | Hora salida | Hora llegada | Estado |
---|---|---|---|---|---|---|
V22 |
SI |
New York |
Chicago |
9:30 |
11:30 |
R |
V23 |
NO |
New York |
Miami |
10:15 |
11:15 |
C |
Consideraciones respecto a la DTD:
- Hay que guardar el nombre del aeropuerto, los datos de cada vuelo agrupados y la fecha del panel, en ese orden.
- En la DTD, sólo el código de un vuelo y su estado deben representarse mediante atributos.
- Se tiene que indicar que el código ha de ser único y obligatorio para cada vuelo.
- Los posibles estados de un vuelo son C (Cancelado), E (En hora), R (Retrasado). El valor por defecto debe ser E.
- En la DTD debe indicarse que al menos tiene que aparecer un vuelo y, para cada uno de ellos, se tiene que guardar la información en el mismo orden en el que aparece en el panel.
- Para indicar si un vuelo es diario, se debe utilizar un elemento vacío que, respecto a cada vuelo, podrá aparecer (en el caso de sí ser diario) o no aparecer (en el caso contrario).
Solución:
"panel-de-vuelos.xml"
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE aeropuerto [
<!ELEMENT aeropuerto (nombre, vuelos, fecha)>
<!ELEMENT nombre (#PCDATA)>
<!ELEMENT vuelos (vuelo+)>
<!ELEMENT vuelo (diario?, origen, destino, hora-salida, hora-llegada)>
<!ATTLIST vuelo código ID #REQUIRED>
<!ATTLIST vuelo estado (C|E|R) "E">
<!ELEMENT diario EMPTY>
<!ELEMENT origen (#PCDATA)>
<!ELEMENT destino (#PCDATA)>
<!ELEMENT hora-salida (#PCDATA)>
<!ELEMENT hora-llegada (#PCDATA)>
<!ELEMENT fecha (#PCDATA)>
]>
<aeropuerto>
<nombre>JFK</nombre>
<vuelos>
<vuelo código="V22" estado="R">
<diario />
<origen>New York</origen>
<destino>Chicago</destino>
<hora-salida>9:30</hora-salida>
<hora-llegada>11:30</hora-llegada>
</vuelo>
<vuelo código="V23" estado="C">
<origen>New York</origen>
<destino>Miami</destino>
<hora-salida>10:15</hora-salida>
<hora-llegada>11:15</hora-llegada>
</vuelo>
</vuelos>
<fecha>20/12/2013</fecha>
</aeropuerto>