Está en la página 1de 35

Disea el esquema XSD para el siguiente archivo XML con las siguientes consideraciones:

<?xml version="1.0" encoding="UTF-8"?>

<alumno dni="12345678A"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:noNamespaceSchemaLocation="alumno.xsd">

<nombre>Juan Garcia</nombre>

<direccion>

<calle>Avenida de la Fuente</calle>

<numero>6</numero>

<ciudad>Zafra</ciudad>

<provincia>Badajoz</provincia>

</direccion>

<telefono>924555555</telefono>

<telefono>658741236</telefono>

</alumno>

El elemento nmero ser un entero entre 0 y 500.


El elemento telfono ser un entero y dicho elemento podr aparecer entre 0 y 5 veces.
El atributo dni ser una plantilla de 8 nmeros y una letra mayscula.
Disea el esquema XSD para el siguiente archivo XML con las siguientes consideraciones:

<?xml version="1.0" encoding="UTF-8"?>

<alumnos xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:noNamespaceSchemaLocation="alumnos.xsd">

<alumno dni="11111111A">

<nombre>Juan Andrs</nombre>

<direccion>

<calle>Avenida de la Fuente</calle>

<numero>6</numero>

<ciudad>Zafra</ciudad>

<provincia>Badajoz</provincia>

</direccion>

<telefono>924555555</telefono>

</alumno>

<alumno dni="22222222B">

<nombre>Jose Sanchez</nombre>

<direccion>

<calle>Calle Ancha</calle>

<numero>3</numero>

<ciudad>Zafra</ciudad>

<provincia>Badajoz</provincia>

</direccion>

<direccion>

<calle>Calle Mayor</calle>

<numero>33</numero>

<ciudad>Zafra</ciudad>

<provincia>Badajoz</provincia>

</direccion>

<telefono>924550000</telefono>

</alumno>
</alumnos>

El elemento nmero ser un entero entre 0 y 500.


El elemento telfono ser un entero y dicho elemento podr aparecer entre 0 y 5 veces.
El elemento direccin podr aparecer 1 o 2 veces.
El elemento provincia slo podr contener Badajoz o Cceres. Modifica el alumno Juan
Andrs para que su provincia sea Cceres.
El atributo dni ser una plantilla de 8 nmeros y una letra mayscula.
Disea el esquema XSD para el siguiente archivo XML con las siguientes consideraciones:

<?xml version="1.0" encoding="UTF-8"?>

<heladeria xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:noNamespaceSchemaLocation="heladeria.xsd">

<helado fabricacin="2015-01-30">

<chocolate>250</chocolate>

<turron>300</turron>

</helado>

<helado fabricacin="2015-01-30">

<fresa>500</fresa>

<vainilla>200</vainilla>

</helado>

</heladeria>

Como primer elemento de helado podemos elegir, o bien chocolate, o bien fresa (pero no los dos
al mismo tiempo). Estos elementos almacenarn la cantidad en gramos (como un nmero entero entre 0 y
1000).
Como segundo elemento de helado se podr elegir uno de los
siguientes vainilla, turrno nata. Estos elementos almacenarn la cantidad en gramos (como un nmero
entero entre 0 y 1000).
El atributo fabricacin indicar la fecha en la que se fabric el mismo mediante el tipo de dato
fecha.
Disea el esquema XSD para el siguiente archivo XML con las siguientes consideraciones:

<?xml version="1.0" encoding="UTF-8"?>

<heladeria xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:noNamespaceSchemaLocation="heladeria.xsd">

<helado>

<fresa />

<chocolate />

</helado>

<helado>

<vainilla />

<chocolate />

</helado>

</heladeria>

El helado slo puede ser de fresa y chocolate, o bien, de vainilla y chocolate.


Los sabores sern elementos vacos.
Disea el esquema XSD para el siguiente archivo XML con las siguientes consideraciones:

<?xml version="1.0" encoding="UTF-8" ?>

<faq>

<info>

<titulo>WINDOWS98? SOLO SI ME OBLIGAN!</titulo>

<autor>Fernando Damin Lorenzo Garca</autor>

<email>Fer@yahoo.es </email>

<version>1.0</version>

<fecha>1999-05-01</fecha>

</info>

<part>

<q>

<qtext>Por qu tengo que instalar W95?</qtext>

<a> A mi tambin me parece una buena pregunta.</a>

</q>

<q>

<qtext>Y de que me vale?</qtext>

<a>Otra ingeniosa pregunta.</a>

</q>

</part>

</faq>

El elemento versin ser una plantilla que permita nmeros seguidos de un punto y seguido de
ms nmeros.
El elemento fecha ser de tipo fecha.
El elemento faq est compuesto por solo un elemento info y por uno o ms elementos part.
El elemento info est compuesto por un titulo, un autor, y puede tener o no email, versin yfecha.
El elemento part puede tener uno o ms elementos q.
El elemento q est compuesto por los elementos qtext y a que son obligatorios.
Disea el esquema XSD para el siguiente archivo XML y las siguientes consideraciones:

<?xml version="1.0" encoding="UTF-8" ?>

<libreria>

<codigo>1263</codigo>

<direccion>Juan de Juni, 31</direccion>

<telefono>983555555</telefono>

<propietario>

<nombre>Juanito</nombre>

<telefono>656222111</telefono>

</propietario>

<libro>

<titulo>Cien aos de soledad</titulo>

<autor>Gabriel Garca Mrquez</autor>

<formato>Rstica</formato>

<publicacion>1967</publicacion>

<precio>23,5</precio>

</libro>

</libreria>

La librera tiene obligatoriamente un cdigo, una direccin, un telfono, un propietario, y uno o


ms libros.
El cdigo ser un nmero entero entre 1000 y 9999.
El propietario tiene un nombre y puede tener ninguno o varios telfonos.
El telfono slo se definir una vez en el esquema, repitiendo su uso. Su contenido ser una
plantilla de 9 nmeros.
Cada libro est formado por los elementos ttulo, autor, puede tener o
no formato, publicacin,precio, cantidad.
El formato podr ser rstica, tapa blanda o tapa dura.
Disea el esquema XSD para el siguiente archivo XML y las siguientes consideraciones:

<?xml version="1.0" encoding="UTF-8" ?>

<pagos>

<nombre>Javier Toledano</nombre>

<fechaNacimiento>1979-02-04</fechaNacimiento>

<hora>23:55:15</hora>

<hora>23:55:15</hora>

<precio>123.56</precio>

<cantidad>678</cantidad>

<pagado>true</pagado>

</pagos>

Aade a los elementos anteriores las siguientes propiedades:

El elemento nombre puede aparecer como mximo 3 veces y su valor por defecto es "A".
El elemento hora puede aparecer un numero infinito de veces.
El valor por defecto de pagado es false.
La cantidad es fija y es siempre 678.

Aade los atributos siguientes:

Atributo dni requerido obligatoriamente y con una longitud mxima de 10 caracteres en el


elemento nombre.
Atributo edad entre 16 y 24 aos, en el elemento FechaNacimiento.
Disea el esquema XSD para el documento XML y las siguientes consideraciones:

<?xml version="1.0" encoding="UTF-8"?>

<discos>

<grupo nom="muse">

<nombre>MUSE</nombre>

<miembro>Matthew Bellamy</miembro>

<miembro>Dominic Howard</miembro>

<miembro>Chris Wolstenholme</miembro>

<nacionalidad>Alemania</nacionalidad>

<web>www.ponprecioamimusica.org/muse</web>

<email> midireccion@ponprecioamimusica.org <email>

</grupo>

<grupo nom="feeder">

<nombre>FEEDER</nombre>

<miembro>Grant Nicholas</miembro>

<miembro>Taka Hirose</miembro>

<miembro>Jon Henry Lee</miembro>

<calle>Calle no existe n2</calle>

<localidad>tampoco existe</localidad>

</grupo>

<grupo nom="nvnud">

<nombre>No vendo ni un disco</nombre>

<miembro>Marta</miembro>

<miembro>Ramon</miembro>

<miembro>Pedro</miembro>

</grupo>

<disco precio=12.80>

<interprete nom="muse"/>

<titulo>Showbiz</titulo>
<discografica>Sony</discografica>

<anio>2000</anio>

<stock>20</stock>

</disco>

<disco precio=19.90>

<interprete nom="feeder"/>

<titulo>Echo Park</titulo>

<discografica>Sony</discografica>

<anio>1980</anio>

<stock>5</stock>

</disco>

<disco precio=15.50>

<interprete nom="muse"/>

<titulo>Origin of symmetry</titulo>

<discografica>SIRE</discografica>

<anio mes=enero>2007</anio>

<stock>20</stock>

</disco>

<disco precio=13.20>

<interprete nom="feeder"/>

<titulo>Comfort In Sound</titulo>

<anio>2010</anio>

<stock>27</stock>

</disco>

<disco precio=4.90>

<interprete nom="nvnud"/>

<titulo>Esto suena realmente mal</titulo>

<anio>2011</anio>

<stock>200</stock>
</disco>

</discos>

El elemento nacionalidad es opcional.


El elemento discogrfica solo puede tener los valores Sony, CBS , SIRE, OTRAS, en caso de no
aparecer es CBS su valor predeterminado.
El elemento anio, obligatoriamente tiene 4 dgitos. Opcionalmente puede tener un
atributo mesque puede tener los valores de enero a diciembre. No tiene valor por defecto.
El elemento grupo opcionalmente puede tener, o bien una direccin web y una direccin de
correo electrnico, o bien una direccin postal formada por calle y localidad (pero no ambas a la vez). La
direccin de correo y la pgina deben pertenecer al dominio "ponprecioamimusica.org".
Los discos tiene un atributo obligatorio precio que debe ser decimal con dos decimales.
Los campos de texto no pueden superar ninguno los 50 caracteres (elementos que no estn ya
restringidos por otra regla).
El elemento stock debe tener un nmero entero y mayor o igual a 0. El stock mximo es 200.
Soluciones:
<alumno xmlns:xsi="http://www.w3.org/2001/XMLSchema-
instance" dni="12345678A" xsi:noNamespaceSchemaLocation="alumnos1.xsd"
>
<nombre>Juan Garcia</nombre>
<direccion>
<calle>Avenida de la Fuente</calle>
<numero>6</numero>
<ciudad>Zafra</ciudad>
<provincia>Badajoz</provincia>
</direccion>
<telefono>924555555</telefono>
<telefono>658741236</telefono>
</alumno>

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefa


ult="qualified">
<xs:element name="alumno">
<xs:complexType>
<xs:sequence>
<xs:element name="nombre" type="xs:string" minOccurs="1" maxOccurs="1"
/>
<xs:element ref="direccion" minOccurs="1" maxOccurs="1"/>
<xs:element name="telefono" type="xs:integer" minOccurs="0" maxOccurs=
"5"/>
</xs:sequence>
<xs:attribute name="dni" use="required">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:pattern value="[0-9]{8}[A-Z]"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:complexType>
</xs:element>
<xs:element name="direccion">
<xs:complexType>
<xs:sequence>
<xs:element name="calle" type="xs:string" minOccurs="1" maxOccurs="1"/
>
<xs:element name="numero" minOccurs="1" maxOccurs="1">
<xs:simpleType>
<xs:restriction base="xs:integer">
<xs:minInclusive value="0"/>
<xs:maxInclusive value="500"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="ciudad" type="xs:string" minOccurs="1" maxOccurs="1"
/>
<xs:element name="provincia" type="xs:string" minOccurs="1" maxOccurs=
"1"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>

Ejercicio2
<alumnos xmlns:xsi="http://www.w3.org/2001/XMLSchema-
instance" xsi:noNamespaceSchemaLocation="alumnos2.xsd">
<alumno dni="11111111A">
<nombre>Juan Andrs</nombre>
<direccion>
<calle>Avenida de la Fuente</calle>
<numero>6</numero>
<ciudad>Zafra</ciudad>
<provincia>Badajoz</provincia>
</direccion>
<telefono>924555555</telefono>
</alumno>
<alumno dni="22222222B">
<nombre>Jose Sanchez</nombre>
<direccion>
<calle>Calle Ancha</calle>
<numero>3</numero>
<ciudad>Zafra</ciudad>
<provincia>Badajoz</provincia>
</direccion>
<direccion>
<calle>Calle Mayor</calle>
<numero>33</numero>
<ciudad>Zafra</ciudad>
<provincia>Badajoz</provincia>
</direccion>
<telefono>924550000</telefono>
</alumno>
</alumnos>

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefa


ult="qualified">
<xs:element name="alumnos">
<xs:complexType>
<xs:sequence>
<xs:element ref="alumno" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="alumno">
<xs:complexType>
<xs:sequence>
<xs:element name="nombre" type="xs:string"/>
<xs:element ref="direccion" minOccurs="1" maxOccurs="2"/>
<xs:element name="telefono" type="xs:integer" minOccurs="0" maxOccurs=
"5"/>
</xs:sequence>
<xs:attribute name="dni" use="required">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:pattern value="[0-9]{8}[A-Z]"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:complexType>
</xs:element>
<xs:element name="direccion">
<xs:complexType>
<xs:sequence>
<xs:element name="calle" type="xs:string"/>
<xs:element name="numero" minOccurs="1" maxOccurs="1">
<xs:simpleType>
<xs:restriction base="xs:integer">
<xs:minInclusive value="0"/>
<xs:maxInclusive value="500"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="ciudad" type="xs:string"/>
<xs:element name="provincia" minOccurs="1" maxOccurs="1">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="Badajoz"/>
<xs:enumeration value="Cceres"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
Ejercicio 3
<heladeria xmlns:xsi="http://www.w3.org/2001/XMLSchema-
instance" xsi:noNamespaceSchemaLocation="heladeria1.xsd">
<helado fabricacin="2015-01-30">
<chocolate>250</chocolate>
<turron>300</turron>
</helado>
<helado fabricacin="2015-01-30">
<fresa>500</fresa>
<vainilla>200</vainilla>
</helado>
</heladeria>

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefa


ult="qualified">
<xs:element name="heladeria">
<xs:complexType>
<xs:sequence>
<xs:element ref="helado" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="helado">
<xs:complexType>
<xs:sequence>
<xs:choice>
<xs:element name="chocolate">
<xs:simpleType>
<xs:restriction base="xs:integer">
<xs:minInclusive value="0"/>
<xs:maxInclusive value="1000"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="fresa">
<xs:simpleType>
<xs:restriction base="xs:integer">
<xs:minInclusive value="0"/>
<xs:maxInclusive value="1000"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
</xs:choice>
<xs:choice>
<xs:element name="vainilla">
<xs:simpleType>
<xs:restriction base="xs:integer">
<xs:minInclusive value="0"/>
<xs:maxInclusive value="1000"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="turron">
<xs:simpleType>
<xs:restriction base="xs:integer">
<xs:minInclusive value="0"/>
<xs:maxInclusive value="1000"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="nata">
<xs:simpleType>
<xs:restriction base="xs:integer">
<xs:minInclusive value="0"/>
<xs:maxInclusive value="1000"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
</xs:choice>
</xs:sequence>
<xs:attribute name="fabricacin" type="xs:date" use="required"/>
</xs:complexType>
</xs:element>
</xs:schema>
Ejercicio 4 heladeria 2
<heladeria xmlns:xsi="http://www.w3.org/2001/XMLSchema-
instance" xsi:noNamespaceSchemaLocation="heladeria2.xsd">
<helado>
<fresa/>
<chocolate/>
</helado>
<helado>
<vainilla/>
<chocolate/>
</helado>
</heladeria>

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefa


ult="qualified">
<xs:element name="heladeria">
<xs:complexType>
<xs:sequence>
<xs:element ref="helado" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="helado">
<xs:complexType>
<xs:sequence>
<xs:choice>
<xs:element name="fresa">
<xs:complexType/>
</xs:element>
<xs:element name="vainilla">
<xs:complexType/>
</xs:element>
</xs:choice>
<xs:element name="chocolate">
<xs:complexType/>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
Ejercicio 5

<faq xmlns:xsi="http://www.w3.org/2001/XMLSchema-
instance" xsi:noNamespaceSchemaLocation="faq.xsd">
<info>
<titulo>WINDOWS98? SOLO SI ME OBLIGAN!</titulo>
<autor>Fernando Damin Lorenzo Garca</autor>
<email>Fer@yahoo.es</email>
<version>1.0</version>
<fecha>1999-05-01</fecha>
</info>
<part>
<q>
<qtext>Por qu tengo que instalar W95?</qtext>
<a>A mi tambin me parece una buena pregunta.</a>
</q>
<q>
<qtext>Y de que me vale?</qtext>
<a>Otra ingeniosa pregunta.</a>
</q>
</part>
</faq>

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefa


ult="qualified">
<xs:element name="faq">
<xs:complexType>
<xs:sequence>
<xs:element ref="info" minOccurs="1" maxOccurs="1"/>
<xs:element ref="part" minOccurs="1" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="info">
<xs:complexType>
<xs:sequence>
<xs:element name="titulo" type="xs:string" minOccurs="1" maxOccurs="1"
/>
<xs:element name="autor" type="xs:string" minOccurs="1" maxOccurs="1"/
>
<xs:element name="email" type="xs:string" minOccurs="0" maxOccurs="1"/
>
<xs:element name="version" minOccurs="0" maxOccurs="1">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:pattern value="[0-9]*.[0-9]*"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="fecha" type="xs:date" minOccurs="0" maxOccurs="1"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="part">
<xs:complexType>
<xs:sequence>
<xs:element ref="q" minOccurs="1" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="q">
<xs:complexType>
<xs:sequence>
<xs:element name="qtext" type="xs:string"/>
<xs:element name="a" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
Ejercicio 6
<libreria xmlns:xsi="http://www.w3.org/2001/XMLSchema-
instance" xsi:noNamespaceSchemaLocation="libreria.xsd">
<codigo>1263</codigo>
<direccion>Juan de Juni, 31</direccion>
<telefono>983555555</telefono>
<propietario>
<nombre>Juanito</nombre>
<telefono>656222111</telefono>
</propietario>
<libro>
<titulo>Cien aos de soledad</titulo>
<autor>Gabriel Garca Mrquez</autor>
<formato>Rstica</formato>
<publicacion>1967</publicacion>
<precio>23,5</precio>
</libro>
</libreria>

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefa


ult="qualified">
<xs:element name="libreria">
<xs:complexType>
<xs:sequence>
<xs:element name="codigo" minOccurs="1" maxOccurs="1">
<xs:simpleType>
<xs:restriction base="xs:integer">
<xs:minInclusive value="1000"/>
<xs:maxInclusive value="9999"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="direccion" type="xs:string" minOccurs="1" maxOccurs=
"1"/>
<xs:element ref="telefono" minOccurs="1" maxOccurs="1"/>
<xs:element ref="propietario" minOccurs="1" maxOccurs="1"/>
<xs:element ref="libro" minOccurs="1" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="telefono">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:pattern value="[0-9]{9}"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="propietario">
<xs:complexType>
<xs:sequence>
<xs:element name="nombre" type="xs:string" minOccurs="1" maxOccurs="1"
/>
<xs:element name="telefono" type="xs:integer" minOccurs="0" maxOccurs=
"unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="libro">
<xs:complexType>
<xs:sequence>
<xs:element name="titulo" type="xs:string" minOccurs="1" maxOccurs="1"
/>
<xs:element name="autor" type="xs:string" minOccurs="1" maxOccurs="1"/
>
<xs:element name="formato" minOccurs="0" maxOccurs="1">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="Rstica"/>
<xs:enumeration value="Tapa blanda"/>
<xs:enumeration value="Tapa dura"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="publicacion" type="xs:string" minOccurs="0" maxOccur
s="1"/>
<xs:element name="precio" type="xs:string" minOccurs="0" maxOccurs="1"
/>
<xs:element name="cantidad" type="xs:string" minOccurs="0" maxOccurs="
1"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
PANEL DE VUELOS DE SALIDA DEL AEROPUERTO JFK
20/12/2013

Cdigo Diario Origen Destino Hora Hora Estado


salida llegada

V22 SI New Chicago 9:30 11:30 R


York

V23 NO New Miami 10:15 11:15 C


York

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 cdigo="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 cdigo="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 cdigo 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 cdigo ha de ser nico (esto se puede hacer
definindolo 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 restriccin slo
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 informacin en el mismo
orden en el que aparece en el panel.
Para indicar si un vuelo es diario, se debe utilizar un elemento vaco
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 ms apropiado, de entre los proporcionados por XML
Schema.

Solucin:
"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="cdigo" 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>
Si para representar la informacin contenida en la siguiente factura ficticia:

FACTURA NMERO 27 FECHA: 18/12/2013

DATOS EMISOR: DATOS CLIENTE:

Librera Prez Biblioteca Txantrea

CIF: 44555666B CIF: 33111222A

Telfono: 777888999 Telfono: 333999444

DETALLE FACTURA:

CDIGO- TIPO DESCRIP CANTIDAD OFERTA PVP


ARTCULO CIN

AW7 Libro Analtica Web 1 SI 25.12


2.0

CP5 DVD Curso de 2 NO 30.5


HTML

IMPORTE: 86.12

se ha escrito el siguiente documento XML:

<?xml version="1.0" encoding="UTF-8"?>


<factura xmlns:xsi="http://www.w3.org/2001/XMLSchema-
instance"
xsi:noNamespaceSchemaLocation="factura.xsd"
nmero="27" fecha="2013-12-18" moneda="Euro">
<datos-emisor>
<nombre>Librera Prez</nombre>
<cif>44555666-B</cif>
<telfono>777888999</telfono>
</datos-emisor>
<datos-cliente>
<nombre>Biblioteca Txantrea</nombre>
<cif>33111222-A</cif>
<telfono>333999444</telfono>
</datos-cliente>
<detalle-factura importe="86.12">
<lnea cdigo-artculo="AW7" tipo="Libro">
<descripcin>Analtica Web 2.0</descripcin>
<cantidad>1</cantidad>
<oferta />
<pvp>25.12</pvp>
</lnea>
<lnea cdigo-artculo="CP5" tipo="DVD">
<descripcin>Curso de HTML</descripcin>
<cantidad>2</cantidad>
<pvp>30.5</pvp>
</lnea>
</detalle-factura>
</factura>
Escribir el cdigo del archivo "factura.xsd" que permita validarlo, teniendo
en cuenta que:

Exceptuando los elementos datos-emisor, datos-cliente y detalle-


factura, que no tienen porqu aparecer en este orden, el resto de
elementos representados en el documento XML, s deben escribirse
obligatoriamente en el orden en el que aparecen.
Excepto para los hijos directos del elemento factura, siempre que sea
posible agrupar al menos dos elementos o dos atributos, se debe
usar group oattributeGroup, respectivamente.
Respecto al nmero de la factura (que debe ser un valor entero mayor
que 0) y su fecha de emisin (de tipo xs:date), hay que indicar que
son atributos obligatorios.
El atributo moneda debe indicarse que es un valor fijo.
Los nombres del emisor y cliente, as como, la descripcin de cada
artculo, deben ser del mismo tipo, al que llamaremos tipoTexto, y
donde debe indicarse que los valores admitidos para dichos elementos
pueden ser cadenas de un mnimo de 5 caracteres y un mximo de 20.
Haciendo uso pattern hay que indicar que el valor del cif debe estar
formado por una cadena de ocho dgitos del 0 al 9, seguidos de un guin
"-" y una letra mayscula de la "A" a la "Z". Dicha restriccin slo debe
poder ser utilizada por el elemento cif.
Haciendo uso pattern hay que indicar que el valor del telfono debe
estar formado por una cadena de nueve dgitos del 0 al 9. Dicha
restriccin slo debe poder ser utilizada por el telfono.
Al menos tiene que aparecer una lnea de detalle y como mximo 15.
El importe debe indicarse que es obligatorio.
El importe y el pvp deben ser del mismo tipo, al que
llamaremos tipoPrecio, y donde debe indicarse, sin hacer uso
de pattern, que los valores admitidos por este tipo pueden ser
nmeros decimales mayores que 0, pero no mayores que 999. Adems,
dichos valores podrn contener cinco dgitos como mximo y, de ellos,
slo dos podrn ser decimales.
El cdigo del artculo ha de ser nico y obligatorio para cada artculo.
Sin hacer uso pattern indicar que los posibles tipos de un artculo
son Libro,DVD o Varios, no permitindose otro valor. Para ello, se debe
definir un tipo de dato llamado tipoArtculo, que debe poder ser utilizado
por otros atributos o elementos. Ahora bien, hay que tener en cuenta que
este atributo es opcional.
La cantidad de artculos indicada en cada lnea, debe ser un valor
entero mayor que 0.
Para indicar si un artculo est de oferta, se debe utilizar un elemento
vaco que, respecto a cada artculo, podr aparecer (en el caso de s
estar de oferta) o no aparecer (en el caso contrario).
No hay que definir ms tipos de datos que los especificados en el
ejercicio:tipoTexto, tipoArtculo y tipoPrecio.

Solucin:
"factura.xsd"

<?xml version="1.0" encoding="UTF-8"?>


<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">

<xs:element name="factura">
<xs:complexType>
<xs:all>

<xs:element name="datos-emisor">
<xs:complexType>
<xs:sequence>
<xs:group ref="datosEmpresa"/>
</xs:sequence>
</xs:complexType>
</xs:element>

<xs:element name="datos-cliente">
<xs:complexType>
<xs:sequence>
<xs:group ref="datosEmpresa"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="detalle-factura">
<xs:complexType>
<xs:sequence>
<xs:element name="lnea" maxOccurs="15">
<xs:complexType>
<xs:sequence>
<xs:group ref="datosLnea"/>
</xs:sequence>
<xs:attributeGroup ref="atributosLnea"/>
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute name="importe" type="tipoPrecio"
use="required"/>
</xs:complexType>
</xs:element>

</xs:all>
<xs:attributeGroup ref="atributosFactura"/>
</xs:complexType>
</xs:element>

<xs:group name="datosEmpresa">
<xs:sequence>
<xs:element name="nombre" type="tipoTexto"/>
<xs:element name="cif">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:pattern value="\d{8}-[A-Z]"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="telfono">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:pattern value="\d{9}"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
</xs:sequence>
</xs:group>

<xs:group name="datosLnea">
<xs:sequence>
<xs:element name="descripcin" type="tipoTexto"/>
<xs:element name="cantidad"
type="xs:positiveInteger"/>
<xs:element name="oferta" minOccurs="0"/>
<xs:element name="pvp" type="tipoPrecio"/>
</xs:sequence>
</xs:group>

<xs:attributeGroup name="atributosFactura">
<xs:attribute name="nmero" type="xs:positiveInteger"
use="required"/>
<xs:attribute name="fecha" type="xs:date"
use="required"/>
<xs:attribute name="moneda" fixed="Euro"/>
</xs:attributeGroup>

<xs:attributeGroup name="atributosLnea">
<xs:attribute name="cdigo-artculo" type="xs:ID"
use="required"/>
<xs:attribute name="tipo" type="tipoArtculo"/>
</xs:attributeGroup>

<xs:simpleType name="tipoTexto">
<xs:restriction base="xs:string">
<xs:minLength value="5"/>
<xs:maxLength value="20"/>
</xs:restriction>
</xs:simpleType>

<xs:simpleType name="tipoArtculo">
<xs:restriction base="xs:string">
<xs:enumeration value="Libro"/>
<xs:enumeration value="DVD"/>
<xs:enumeration value="Varios"/>
</xs:restriction>
</xs:simpleType>

<xs:simpleType name="tipoPrecio">
<xs:restriction base="xs:decimal">
<xs:minExclusive value="0"/>
<xs:maxInclusive value="999"/>
<xs:totalDigits value="5"/>
<xs:fractionDigits value="2"/>
</xs:restriction>
</xs:simpleType>

</xs:schema>
Si para representar la siguiente informacin ficticia:

REGISTRO DE CONEXIONES DE USUARIOS Y EMPLEADOS DE


UNA EMPRESA

USUARIOS:

IDENTIFICADOR NOMBRE APELLIDOS CONEXIONES (FECHA


EMAIL HORA TIEMPO)

U123&Ana&Sanz Tapia&asanz@jmail.com 2014-02-23&19:15:40&122


2014-02-23&20:30:22&617
2014-02-24&11:18:31&25

U96&Pedro&Ruiz Hierro&pruiz@jotmail.com 2014-02-25&20:33:55&390

EMPLEADOS:

IDENTIFICADOR NOMBRE APELLIDOS CONEXIONES (FECHA


EMAIL DEPARTAMENTO HORA TIEMPO)

E4&Marta&Vera (Ninguna)
Gil&mvera@yajoo.es&Marketing

se ha escrito el siguiente documento XML:

<?xml version="1.0" encoding="UTF-8"?>


<registro xmlns:xsi="http://www.w3.org/2001/XMLSchema-
instance"
xsi:noNamespaceSchemaLocation="registro.xsd">
<usuario identificador="U123">
<apellidos-y-nombre>Sanz Tapia,Ana</apellidos-y-nombre>
<email>asanz@jmail.com</email>
<conexiones>
<conexin fecha="2014-02-23"
hora="19:15:40">122</conexin>
<conexin fecha="2014-02-23"
hora="20:30:22">617</conexin>
<conexin fecha="2014-02-24"
hora="11:18:31">25</conexin>
</conexiones>
</usuario>
<usuario identificador="U96">
<apellidos-y-nombre>Ruiz Hierro,Pedro</apellidos-y-
nombre>
<email>pruiz@jotmail.com</email>
<conexiones>
<conexin fecha="2014-02-25"
hora="20:33:55">390</conexin>
</conexiones>
</usuario>
<empleado identificador="E4">
<apellidos-y-nombre>Vera Gil,Marta</apellidos-y-nombre>
<email>mvera@yajoo.es</email>
<conexiones/>
<departamento>
<marketing />
</departamento>
</empleado>
</registro>
Escribir el cdigo del archivo "registro.xsd" que permita validarlo, teniendo
en cuenta que:

Todos los elementos y atributos son obligatorios, a menos que se


indique lo contrario.
Siempre que sea posible agrupar al menos dos elementos o dos
atributos, se debe utilizar group o attributeGroup ,
respectivamente.
Pueden aparecer de cero a ilimitados usuarios y, a continuacin, de
cero a ilimitados empleados.
Usuario debe ser de un tipo definido por nosotros al que
llamaremostipoPersona, donde hay que definir los elementos apellidos-
y-nombre, emaily conexiones. Por otro lado, empleado ha de ser de
otro tipo llamadotipoPersonaAmpliado, definido como una extensin
de tipoPersonaaadindosele el elemento departamento. El orden en
que tienen que aparecer los elementos hijo de usuario y empleado,
debe ser obligatoriamente el escrito en el documento XML.
El valor del identificador debe ser una cadena formada por una letra "U"
"E" mayscula, seguida de uno a cinco dgitos del 0 al 9.
El valor del elemento apellidos-y-nombre debe ser una cadena de entre
1 a 30 caracteres (de la "a" a la "z", maysculas o minsculas, o el
carcter espacio en blanco) para los apellidos, seguida del carcter
coma "," y de entre 1 a otras 20 letras (de la "a" a la "z", tambin
maysculas o minsculas, o el carcter espacio en blanco) para el
nombre.
El valor del email puede ser una cadena formada por 1 a 15 caracteres
de la "a" a la "z", seguida del carcter "@", seguido de entre 1 a otras 25
letras de la "a" a la "z", seguidas del carcter punto "." y de entre otras 2
a 4 letras de la "a" a la "z".
De cada usuario y empleado se reflejan sus conexiones, indicando para
cadaconexin la cantidad de segundos que dur, que debe ser un
nmero entero mayor que cero. Hay que tener en cuenta que, como se
puede ver en el documento XML, pueden aparecer desde cero hasta
ilimitados elementosconexin.
Respecto a los atributos fecha y hora, cada uno de ellos debe definirse
del tipo que se considere ms apropiado, de entre los proporcionados
por XML Schema.
Los posibles departamentos de la empresa a los que puede pertenecer
unempleado son administracin, informtica o marketing. De tal
forma que, para cada empleado, slo uno de ellos debe escribirse en el
documento XML mediante un elemento vaco, como en este caso se ha
escrito <marketing />.
No hay que definir ms tipos de datos que los indicados en el
ejercicio:tipoPersona y tipoPersonaAmpliado.

Solucin:
"registro.xsd"

<?xml version="1.0" encoding="UTF-8"?>


<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">

<xs:element name="registro">
<xs:complexType>
<xs:sequence>
<xs:group ref="personas"/>
</xs:sequence>
</xs:complexType>
</xs:element>

<xs:group name="personas">
<xs:sequence>
<xs:element name="usuario" minOccurs="0"
maxOccurs="unbounded" type="tipoPersona"/>
<xs:element name="empleado" minOccurs="0"
maxOccurs="unbounded" type="tipoPersonaAmpliado"/>
</xs:sequence>
</xs:group>

<xs:complexType name="tipoPersonaAmpliado">
<xs:complexContent>
<xs:extension base="tipoPersona">
<xs:sequence>
<xs:element name="departamento">
<xs:complexType>
<xs:sequence>
<xs:group ref="departamentosEmpresa"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>

<xs:complexType name="tipoPersona">
<xs:sequence>
<xs:group ref="datosPersona"/>
</xs:sequence>
<xs:attribute name="identificador" use="required">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:pattern value="[UE]\d{1,5}"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:complexType>

<xs:group name="datosPersona">
<xs:sequence>

<xs:element name="apellidos-y-nombre">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:pattern value="[a-zA-Z ]{1,30},[a-zA-Z
]{1,20}"/>
</xs:restriction>
</xs:simpleType>
</xs:element>

<xs:element name="email">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:pattern value="[a-z]{1,15}@[a-z]{1,25}[.][a-
z]{2,4}"/>
</xs:restriction>
</xs:simpleType>
</xs:element>

<xs:element name="conexiones">
<xs:complexType>
<xs:sequence>
<xs:element name="conexin" minOccurs="0"
maxOccurs="unbounded">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:positiveInteger">
<xs:attributeGroup
ref="atributosConexion"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>

</xs:sequence>
</xs:group>

<xs:attributeGroup name="atributosConexion">
<xs:attribute name="fecha" type="xs:date"
use="required"/>
<xs:attribute name="hora" type="xs:time"
use="required"/>
</xs:attributeGroup>

<xs:group name="departamentosEmpresa">
<xs:choice>
<xs:element name="administracin"/>
<xs:element name="informtica"/>
<xs:element name="marketing"/>
</xs:choice>
</xs:group>

</xs:schema>

También podría gustarte