Ejercicio de XSD - Panel de vuelos
Si para representar 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 |
se ha escrito el siguiente documento XML:
<?xml version="1.0" encoding="UTF-8"?>
<aeropuerto xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="aeropuerto.xsd">
<nombre>JFK</nombre>
<vuelos>
<vuelo código="V22" estado="R">
<diario />
<origen>New York</origen>
<destino>Chicago</destino>
<hora-salida>09:30:00</hora-salida>
<hora-llegada>11:30:00</hora-llegada>
</vuelo>
<vuelo código="V23" estado="C">
<origen>New York</origen>
<destino>Miami</destino>
<hora-salida>10:15:00</hora-salida>
<hora-llegada>11:15:00</hora-llegada>
</vuelo>
</vuelos>
<fecha>2013-12-20</fecha>
</aeropuerto>
Escribir el código del archivo "aeropuerto.xsd" que permita validarlo, teniendo en cuenta que:
- No debe utilizarse ni group ni attributeGroup.
- El nombre del aeropuerto, los vuelos y la fecha pueden aparecer en distinto orden.
- Se tiene que indicar que el código ha de ser único (esto se puede hacer definiéndolo de tipo xs:ID) y obligatorio para cada vuelo.
- Haciendo uso pattern indicar que los posibles estados de un vuelo son C (Cancelado), E (En hora), R (Retrasado). Dicha restricción sólo debe poder ser utilizada por el atributo estado. El valor por defecto debe ser E.
- Debe permitirse aparecer desde cero hasta ilimitados elementos 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).
- Respecto a los elementos nombre, origen, destino, hora-llegada, hora-salida y fecha, cada uno de ellos debe definirse del tipo que se considere más apropiado, de entre los proporcionados por XML Schema.
Solución:
"aeropuerto.xsd"
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="aeropuerto">
<xs:complexType>
<xs:all>
<xs:element name="nombre" type="xs:string"/>
<xs:element name="vuelos">
<xs:complexType>
<xs:sequence>
<xs:element name="vuelo" minOccurs="0" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name="diario" minOccurs="0"/>
<xs:element name="origen" type="xs:string"/>
<xs:element name="destino" type="xs:string"/>
<xs:element name="hora-salida" type="xs:time"/>
<xs:element name="hora-llegada" type="xs:time"/>
</xs:sequence>
<xs:attribute name="código" type="xs:ID" use="required"/>
<xs:attribute name="estado" default="E">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:pattern value="[CER]"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="fecha" type="xs:date"/>
</xs:all>
</xs:complexType>
</xs:element>
</xs:schema>