Está en la página 1de 94

Repaso XML

Actividad 1 Corrige el siguiente ejemplo de XML


<alumno>
<nombre>Pablo</nombre>
<apellido>Prez</apellido>
<telefono>9155555</telefono>
<direccion></direccion>
</varn>
</alumno>
<alumno2>
<nombre>Pepe</nombre>
<apellido>Gutirrez</apellido>
<telefono>9155555</telefono>
<direccion>Manzanera 24 </direccion>
</varn>
</alumno2>

Repaso XML
<?xml version="1.0" encoding="ISO-8859-l"?>
<clase>
<alumno>
<nombre>Pablo</nombre>
<apellido>Prez</apellido>
<telefono>9155555</telefono>
<direccion></direccion>
</varon>
</alumno>
<alumno>
<nombre>Pepe</nombre>
<apellido>Gutirrez</apellido>
<telefono>9155555</telefono>
<direccion>Manzanera 24 </direccion>
</varon>
</alumno>

</clase>

Espacio de nombres
<h:html xmlns:xdc="http://www.xml.com/books" xmlns:h="http://www.w3.org/HTML/1998/html4">
<h:head>
<h:title>Book Review</h:title>

</h:head>
<h:body>
<xdc:bookreview>
<xdc:title>XML: A Primer</xdc:title>
<h:table>
<h:tr align="center">
<h:td>Author</h:td>
<h:td>Price</h:td>
<h:td>Pages</h:td>
<h:td>Date</h:td>
</h:tr>
</h:table>
</xdc:bookreview>
</h:body>
</h:html>

Actividad 2: aade el espacio de nombres


http://vallecidacos.com/datosalumno con
sinnimo alum

Documentos XML bien formados


Los documentos bien formados son aquellos que
son sintcticamente correctos.
Adems de las expuestas previamente deben
cumplir:
Un nico elemento raz.
Los elementos son case-sensitive.
El documento solo contendr caracteres vlidos
dependiendo del tipo de codificacin del documento.
Los caracteres <, > y & solo deben aparecen
para delimitar las etiquetas de los elementos y para
usar caracteres especiales.

Documentos XML Vlidos


Adems de estar bien formados cumplen con
los requisitos de una definicin de estructura.

Explicar un poco WAMP


Ensear esquema

TEMA 4 Definicin de esquemas


y vocabulario en XML
Javier Rojas

Objetivos del tema


Describir la estructura de un documento XML con DTD.
Conocer los elementos de los que se compone una
DTD.
Definicin de entidades en una DTD.
Creacin y asignacin de atributos a un elemento
desde una DTD.
Asignacin de una DTD a un documento XML.
Describir la estructura de un documento XML con un
esquema.
Describir la estructura de un documento XML con un
esquema.

Objetivos del tema


Describir la estructura de un documento XML con un
esquema.
Creacin y asignacin de atributos a un elemento desde un
esquema.
Asignacin de un esquema a un documento XML.
Tipos bsicos en los elementos de un esquema.
Asignacin de elementos hijos con modificacin de
ocurrencias.
Distinguir entre documento bien formado y documento
vlido.
Conocer que herramientas de validacin existen va web o
aplicacin local.

ndice
4.1 DTD
4.1.1 Bloques para construir una DTD
4.1.2 Secuencias de elementos: estructura con hijos

4.2 ESQUEMAS
4.2.1 Elemento raz
4.2.2 Elementos simples
4.2.3 Atributos
4.2.4 Restricciones
4.2.5 Elementos complejos
4.2.6 Secuencia de elementos

4.3 VALIDACIN DE DOCUMENTOS XML


4.3.1 Documentos bien formados
4.3.2 Documentos vlidos
4.3.3 Herramientas para validar
4.4 CASO PRCTICO

Introduccin
Para comunicar datos mediante XML es
imprescindible:
Que el documento est bien formado (con las
etiquetas de apertura y cierre bien ubicadas, que
la codificacin sea correcta)
Que ambos actores (emisor y receptor) se cian a
un formato de fichero definido previamente. Para
ello, se ha de definir una estructura fija del
documento que conozcan las partes que
intercambian la informacin.

Cmo?
DTD (Document Type Definition)
XML Schema

4.1. DTD
DTD (Document Type Definition)
Establece qu elementos son aceptados y en qu
posiciones deben estar dentro de un documento
XML
Cuando se define una DTD y se referencia dentro
de un documento XML, se establece una relacin
de:
Qu lxico es el que se espera.
Qu reglas sintcticas debe cumplir nuestro lenguaje.

Por qu resulta importante la


creacin de DTD?
Para que todos los que lo utilicen (en
consultas, inserciones, modificaciones,
borrados, etc.); se asegure que est bien
formado y resulte vlido para el uso por
terceras aplicaciones. Si en el proceso de
acceso y modificacin del documento XML se
incumple su estructura, nos encontraremos
con un documento no vlido y con un futuro
problema en su futura utilizacin.

Cmo incluirlo en un XML?


La creacin de una DTD resulta muy simple y
se ver ms adelante pero resulta interesante
como ubicar estas declaraciones:
La DTD se puede ubicar dentro del propio
documento XML.
La DTD se ubica fuera del documento XML (en un
fichero externo).

De la misma forma que un CSS en HTML.

Ejemplo
Se quiere almacenar los mensajes de mviles
que se envan a un servidor. Los datos que se
guardarn son los siguientes:
Nmero de telfono del usuario.
Fecha de envo.
Hora de envo.
Contenido del mensaje.

Ejemplo XML
<?xml version="1.0" encoding="ISO-8859-l"?>
<!DOCTYPE BDsms SYSTEM "BDsms.dtd">
<BDsms>
<sms>
<telefono>955 55 66 55</telefono>
<fecha> 1/7/201 l</fecha>
<hora>23:55</hora> <mensaje>Juegol: Tetris</mensaje>

</sms>
<sms>
<telefono>745 15 56 ll</telefono>
<fecha>22/9/2011</fecha>
<hora>15:05</hora>
<mensaje>Juego2: Arkanoid</mensaje>

</sms>
<sms>
<telefono>842 35 22 00</telefono>
<fecha> 10/11/201 l</fecha>
<hora>09:22</hora>
<mensaje>Juego3: Comecocos</mensaje>

</sms>
</BDsms>

Ejemplo DTD
<!ELEMENT BDsms (sms*)>
<!ELEMENT sms (telefono, fecha, hora, mensaje)>
<!ELEMENT telefono (#PCDATA)>
<!ELEMENT fecha (#PCDATA)>
<!ELEMENT hora (#PCDATA)>
<!ELEMENT mensaje (#PCDATA)>

(Nota, el fichero debe llamarse "BDsms.dtd")

Si se quisiera incluir en el mismo XML


<?xml version="1.0" encoding="ISO-8859-l"?>
<!DOCTYPE BDsms [
<!ELEMENT BDsms (sms*)>
<!ELEMENT sms (telefono, fecha, hora, mensaje)>
<!ELEMENT telefono (#PCDATA)>
<!ELEMENT fecha (#PCDATA)>
<!ELEMENT hora (#PCDATA)>
<!ELEMENT mensaje (#PCDATA)>

]>
<BDsms>
<sms>.
</BDsms>

Actividad 3
Busca un ejemplo de XML con su DTD
correspondiente en un archivo aparte. (debe
contener ms de 5 etiquetas diferentes y
menos de 8)
Busca servicios 3 de validacin de DTDs en
Intenert. Copia su URL y capturas con los
resultados sobre tu ejmplo.
Modifica el XML para que incluya el DTD en el
mismo XML.

4.1.1. Bloques para construir un DTD


Elementos definidos en una DTD:
Elemento: Es el bloque principal con el que se
construye los documentos XML.
Atributo: Es una manera de aadir ms
informacin a un elemento.
Entidad: En XML existen algunos caracteres que
tienen un significado especial. La aparicin de
estos caracteres como datos almacenables hace
que se puedan confundir con entidades propias
de un documento XML. Son entidades las
siguientes:

Caracteres especiales
&nbsp;

=>

'' // Espacio en blanco

&gt;
&lt;
&quot;

=>
=>
=>

>
<

&apos;

=>

&amp;

=>

&

Tambin se pueden definir entidades


propias
<!ENTITY pi "3.141592">
<!ENTITY textFile SYSTEM "fichero.txt">
<!ENTITY miURL SYSTEM "http://www.as.com">

=> &pi;
=> &textFile
=> &miURL

PCData: su significado en ingles es Parsed Character


Data. Indica que entre la etiqueta de apertura y cierre
de ese elemento, se almacenarn caracteres como
texto y sern analizados por un parser.
CDATA: su significado en ingles es Character Data. A
efectos es prcticamente igual que PCData pero el
contenido de ese elemento, entre sus etiquetas de
apertura y cierre, no se analizar por el parser de
anlisis de entidades y elementos XML.
ANY: permite indicar que cualquier combinacin de
elementos conocidos seran vlidos en ese caso.

Declaracin de los elementos


Dentro de los elementos se puede indicar si
estn compuestos por nodos hijos, o son
vacos (EMPTY), o contienen informacin
(PCDATA, CDATA, ANY).
<!ELEMENT nombre_del_elemento categoria>
<!ELEMENT nombre_del_elemento EMPTY>
<!ELEMENT nombre_del_elemento (nodos_hijos)>

Declaracin de los Atributos


<!ATTLIST nombre_elemento nombre_atributo tipo_atributo valor_por_defecto>
nombre_elemento: es el elemento al que se le quiere aadir el atributo.
nombre atributo: es el nombre del atributo que se quiere aadir.
tipo_atributo: existen muchos tipos de atributos, destacan:
CDATA: es un texto. Podrn tener cualquier carcter.
ID: es un identificador que permite identificar al elemento de manera nica en todo un documento XML.
IDREF: es un identificador de otro elemento del propio documento XML.
IDREFS: es una lista de identificadores a otros elementos. (tipol | tipo2 | tipo3 | ...): el valor es uno de los
indicados en esta lista enumerada (definida por el usuario).
NMTOKEN: es un texto que solo podr tener letras, dgitos, guin "-", subrayado "_", punto "." y dos
puntos ":". Es lo que se llama nombres vlidos XML.
NMTOKENS: es una lista de nombres XML vlidos. Es como un NMTOKEN pero se incluyen los espacios
en blanco " ", tabuladores o retornos de carro.
ENTITY: el tipo del atributo es una entidad que se ha declarado anteriormente.
ENTITIES: Es una lista de entidades.

Los atributos podrn ser declarados como obligatorios #REQUIRED, optativos #IMPLIED o fijos #FIXED.
Este ltimo obliga al usuario que el atributo sea siempre el mismo, sin que pueda cambiarlo (si se
cambia no estara conforme a la DTD declarada y devolvera un error)

Ejemplo:

<hora zona="GMT+l">09:22</hora>

<!ATTLIST hora zona CDATA "GMT+1" #REQUIRED>

4.1.2. Secuencias de elementos con


hijos
En el ejemplo de los SMS: Podemos ver que el
elemento sms est compuesto por telefono,
fecha, hora y mensaje. Esta es una relacin
padre- hijos. Imaginemos que una vez definida
una DTD, nos damos cuenta que, por cada
SMS recibido se pueden almacenar varios
mensajes. En un primer momento se puede
pensar que para salir del paso la solucin sera
sta:

INCORRECTO
<!ELEMENT BDsms (sms*)>
<!ELEMENT sms (telefono, fecha, hora, mensaje, mensaje2)>
<!ELEMENT telefono (#PCDATA)>
<!ELEMENT fecha (#PCDATA)>
<!ELEMENT hora (#PCDATA)>
<!ELEMENT mensaje (#PCDATA)>
<!ELEMENT mensaje2 (#PCDATA)>

Obligamos a que tenga dos mensajes siempre.

Actividad 4
Propn una solucin al ejemplo anterior,
busca en internet cmo se puede representar
en un DTD que haya uno o varios elementos
hijos

4.1.2. Secuencias de elementos con


hijos
En este caso debera cambiar la ocurrencia de la aparicin
de los elementos, justo cuando los indicamos en el
elemento padre. Las ocurrencias que pueden aparecer se
indican con los siguientes operadores:
": indica que aparece obligatoriamente una vez. Es el caso inicial
en cuanto se declara un hijo al elemento sms.
'+': indica que puede haber una o ms ocurrencias del elemento
indicado. <!ELEMENT sms (telfono, fecha, hora, mensaje+)>
'*': indica que puede haber cero o ms ocurrencias del
elemento indicado.
<!ELEMENT sms (telfono, fecha, hora, mensaje*)>
'?': indica que puede haber cero o una ocurrencia del elemento
indicado (tambin llamado opcionalidad).
<!ELEMENT sms (telfono, fecha, hora, mensaje?)>

Opcionalidad
Tambin podramos definir que queremos
almacenar o la hora o el mensaje pero no las dos
simultneamente pero s obligatoriamente una de
las dos, por lo que quedara as:
<!ELEMENT BDsms (sms*)>
<!ELEMENT sms (telefono, fecha, (hora | mensaje)>
<!ELEMENT telefono (#PCDATA)>
<!ELEMENT fecha (#PCDATA)>
<!ELEMENT hora (#PCDATA)>
<!ELEMENT mensaje (#PCDATA)>

Prctica 1
Se quiere crear una biblioteca de libros en un
documento XML. Para ello se necesita crear una DTD
que almacene los siguientes campos de un libro:

Cdigo de libro.
Ttulo.
Editorial.
Edicin.
ISBN.
Nmero de pginas.
Autor o autores (puede haber varios o ninguno)

Crea un XML, su DTD correspondiente y verifica su


validez.

Prctica 1
Se quiere crear un taller de vehculos en un documento XML. Para
ello se necesita crear una DTD que almacene los siguientes campos:

modelo.
matrcula.
ao.
reparacin. (puede tener cero o varias)

Nmero de reparacin.
Precio.
Descripcin
Piezas necesitadas (cero o varias)
mecnico (puede haber varios o ninguno)
Dni
nombre

Crea un XML, su DTD correspondiente y verifica su validez.

Prctica 1
Se quiere crear un XML con los datos de los empleados
de una empresa:
Empleado

Dni
Nombre
Direccin
Cargo (empleado, encargado o jefe)
Abreviatura
Sueldo (atributo)
Personas al cargo(elemento que a su vez contiene cero o varios
elementos empleado)

Horas semanales que trabaja

Crea un XML, su DTD correspondiente y verifica su


validez.

Prctica 1
De todos los ejercicios se entregar
XML con cinco elementos principales rellenos
DTD
XML+DTD todo en uno
Resultado de la validacin.

Prctica 2
Se quiere crear una biblioteca de libros en un documento
XML. Para ello se necesita crear una DTD que almacene los
siguientes campos de un libro:

Cdigo de libro. (atributo id)


<!ATTLIST libro codigo ID #REQUIRED>
Ttulo.
Editorial. (atributo)
Edicin.
ISBN. (atributo)
Nmero de pginas.
Autor o autores (puede haber varios o ninguno)

Crea un XML, su DTD incluido dentro y verifica su validez.

Prctica 2
Se quiere crear un taller de vehculos en un documento XML. Para
ello se necesita crear una DTD que almacene los siguientes campos:

modelo.
matrcula. (atributo id)
ao. (atributo)
reparacin. (puede tener cero o varias)

Nmero de reparacin. (atributo id)


Precio.
Descripcin
Piezas necesitadas (cero o varias)
mecnico (puede haber varios o ninguno)
Dni
nombre

Crea un XML, su DTD correspondiente y verifica su validez.

Prctica 2
Se quiere crear un XML con los datos de los empleados
de una empresa:
Empleado

Dni (atributo id)


Nombre
Direccin
Cargo (empleado, encargado o jefe)
Abreviatura (id atributo)
Sueldo (atributo)
Personas al cargo(elemento que a su vez contiene cero o varios
elementos empleado)

Horas semanales que trabaja (atributo)

Crea un XML, su DTD correspondiente y verifica su


validez.

Prctica 2
De todos los ejercicios se entregar
XML con cinco elementos principales rellenos
+DTD todo en uno
Resultado de la validacin.

4.2. XML Schema


Otra manera de formalizar esas reglas es con
un lenguaje llamado XML Schema (tambin
llamado XSD o XML Schema Definition)
Permite expresar con mayor potencia,
gramticas ms complejas utilizando la misma
sintaxis de XML
Naci en el 1998 y se recomend el uso en el
2001 por el W3C

Caractersticas
Define qu elementos pueden aparecer en un
documento XML.
Define qu atributos pueden aparecer en un
documento XML.
Define qu elementos son compuestos, indicando qu
elementos hijos deben aparecer y en qu orden.
Define qu elementos pueden ser vacios o que pueden
incluir texto asociado.
Define los tipos que pueden utilizarse en cada
elemento o atributo.
Define la obligatoriedad, la optatividad de elementos
y/o atributos.

qu diferencia un DTD de un
esquema XSD si sirven para lo mismo?
La principal ventaja de XSD es que al estar
basado en XML, es fcilmente extensible a las
futuras modificaciones o necesidades que se
identifiquen. Adems no es necesario
aprender un nuevo lenguaje (en
contraposicin con los DTD).

Ejemplo XML Schema


<?xml version="1.0" encoding="ISO-8859-l"?>
<BDsms xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.gmrv.es BDsmsSchema.xsd">
<sms>
<telefono>955 55 66 55</telefono>
<fecha>l/7/2011</fecha>
<hora>23:55</hora>
<mensaje>Juego1: Tetris</mensaje>

</sms>
<sms>
<telefono>745 15 56 ll</telefono>
<fecha>22/9/2011</fecha>
<hora>15:05</hora>
<mensaje>Juego2: Arkanoid</mensaje>

</sms>
<sms>
<telefono>842 35 22 00</telefono>
<fecha> 10/11/201 l</fecha>
<hora>09:22</hora>
<mensaje>Juego3: Comecocos</mensaje>

</sms>

</BDsms>

Si el esquema est en un fichero local, en vez


de usar xsi:schemaLocation indicando una
ubicacin en la red, podemos utilizar esta otra
forma:
<?xml version="1.0" encoding="ISO-8859-l"?>
<BDsms xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="BDsmsSchema.xsd">

XML Schema
(fichero BDsmsSchema.xsd)
<?xml version="1.0" ?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" version="0.1" xml:lang="es">
<xs:element name="BDsms">
<xs:complexType>
<xs:sequence>
<xs:element name="sms" maxOccurs="unbounded">
<xs: complexType>
<xs:sequence>
<xs:element name="telefono" type="xs:string"/>
<xs:element name="fecha" type="xs:string"/>
<xs:element name="hora" type="xs:string"/>
<xs:element name="mensaje" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>

4.2.1. Elemento raz


Un esquema se puede componer de muchos elementos enlazados. El
elemento principal es el elemento raz, y deber estar siempre.
<?xml version="1.0" ?> <xs:schema>
</xs:schema>
Este elemento raz puede contener algunos atributos interesantes. En
el ejemplo anterior se vio que se indicaba el espacio de nombres, una
versin y un lenguaje predefinido. Entre los atributos ms importantes
se encuentra el siguiente:
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
</xs:schema>
Indica cul es el espacio de nombres en el que se basa para saber qu
elementos y tipos de datos son los soportados en el esquema.

4.2.2 Elementos simples


La sintaxis a seguir es la siguiente:
<xs:element name="nombre_elemento" type="tipo_elemento">

El nombre puede ser el que desee el usuario


(mientras que no est repetido). Sin embargo,
el tipo tiene que ser uno de los siguientes:

Tipos de datos
xs:string
<xs:element name="nombre" type="xs:string">
<nombre>Javier Rojas</nombre>
xs:date
<xs:element name="fechaNacimiento" type="xs:date">
<fechaNacimiento>1979-02-04</fechaNacimiento>
<fechaNacimiento>1979-02-04+01:00</fechaNacimiento>
xs:time
<xs:element name="hora" type="xs:date">
<hora>23:55:15</hora>
<hora>23:55:15+01:00</hora>

Tipos de datos
xs:dateTime
<xs:element name="fecha" type="xs:date">
<fecha>1979-02-04T23:55:15</fecha>
<fecha>1979-02-04T23:55:15+01:00</fecha>
<fecha>1979-02-04T23:55:15.1</fecha>
xs:decimal
<xs:element name="precio" type="xs:decimal">
<precio>1205.74</precio>
<precio>-1205.74</precio>
xs:integer
<xs:element name="vueltas" type="xs:integer">
<vueltas> 1205</vueltas>
<vueltas>-1205</vueltas>

Tipos de datos
xs:boolean
<xs:element name="pagado" type="xs:boolean">
<pagado>true</pagado> <pagado>false</pagado>
xs:hexBinary
<xs:element name="imagen" type="xs:hexBinary">
<xs:element name="foto" type="xs:base64Binary">

Ejemplo para tipos de datos


Imaginemos que queremos establecer un conjunto de
elementos simples para almacenar la informacin de
un alumno de una escuela. Los datos a almacenar
seran:

Cdigo de alumno.
Nombre.
Apellidol.
Apellido2.
D.N.I.
Fecha de nacimiento.
Curso.
Cuota pagada (booleano).

Ejemplo para tipos de datos


Podramos definir los siguientes elementos:
<xs:element name="codigo" type="xs:integer"/>
<xs:element name="nombre" type="xs:string"/>
<xs:element name="apellidol" type="xs:string"/>
<xs:element name="apellido2" type="xs:string"/>
<xs:element name="dni" type="xs:string"/>
<xs:element name="fechaNacimiento" type="xs:date"/>
<xs:element name="curso" type="xs:integer"/>
<xs:element name="cuotaPagada" type="xs:boolean"/>

Ejercicio
Imaginemos que se quiere indicar, por
defecto, que todo alumno tiene la cuota sin
pagar. Cuando se define el elemento
cuotaPagada, que tendramos que aadir?
Y si quisiramos que tuviera un valor fijo?

Solucin
Cuando se define el elemento cuotaPagada
podemos aadir ese valor por defecto de la
siguiente forma:
<xs:element name="cuotaPagada" type="xs:boolean" default="false"/>

En cambio, si lo que se quiere es que tenga un


valor fijo siempre, el cambio sera el siguiente:
<xs:element name="cuotaPagada" type="xs:boolean" fixed="false"/>

Prctica 3
Se quiere crear una biblioteca de libros en un
documento XML. Para ello se necesita crear un XSD
que almacene los siguientes campos de un libro:

Cdigo de libro. (habr entre 1 y 100 libros)


Ttulo.
Editorial.(ser siempre el valor BH)
Edicin.
ISBN.
Nmero de pginas.
Autor

Crea un XML, su XSD correspondiente y verifica su


validez.

Prctica 3
Se quiere crear un taller de vehculos en un documento XML:

modelo.
matrcula.
ao.
reparacin. (puede tener de cero hasta diez)

Nmero de reparacin.
Precio.
Descripcin
Piezas necesitadas (cero o varias)
mecnico (puede haber varios o ninguno)
Dni
nombre

Crea un XML, su XSD correspondiente y verifica su validez.

Prctica 3
Se quiere crear un XML con los datos de los
empleados de una empresa:
Empleado

Dni
Nombre
Direccin
Cargo
Abreviatura
Sueldo

Horas semanales que trabaja

Crea un XML, su XSD correspondiente y verifica


su validez.

Prctica 3
De todos los ejercicios se entregar
XML con cinco elementos principales rellenos
XSD
Resultado de la validacin.

4.2.3 Atributos
La sintaxis de un atributo es la siguiente:
<xs:attribute name="nombre_atributo" type="tipoatributo">
Siguiendo con el ejemplo de los alumnos de una escuela, nos
piden aadir un atributo al elemento curso puesto que en un
colegio puede darse el caso de tener varios cursos concurrentes
y no pertenecer a la misma clase (por ejemplo, Io letra A, Io letra
B...). Ej:
Para que el XML quede asi:
<curso letra="A">l</curso>

Debemos modificar lo siguiente en el esquema:


<xs:element name="curso" type="xs:integer"/>
<xs:attribute name="letra" type="xs:string"/>
Para terminar, es necesario indicar que valores por defecto,
fijos o valores opcionales puede tomar un atributo. A
continuacin se ven ejemplos de los tres casos:
<xs:attribute name="letra" type="xs:string" default="A"/>
<xs:attribute name="letra" type="xs:string" fixed="A"/>
<xs:attribute name="letra" type="xs:string" use="required"/>

4.2.4 Restricciones
En algunos momentos es importante
establecer un rango de valores en los que un
elemento puede moverse.
Imaginemos que los alumnos anteriores
deben cumplir la condicin de estar entre los
16 y los 24 aos para poder hacerse el carnet
joven.

Vlido para elementos y atributos


<xs:element name=edad">
<xs:simpleType>
<xs:restriction base="xs:integer">
<xs:minlnclusive value="16"/>
<xs:maxlnclusive value="24"/>
</xs :restriction>
</xs: simpleType>
</xs:element>

Las restricciones se pueden aplicar a los


atributos tambin. En este caso vamos a
declarar una restriccin sobre el atributo
"letra", para que tome uno de los valores
determinados en una lista ("A", "B", "C", "D").

<xs:attribute name="letra">
<xs:simpleType>
<xs:restriction base="xs :string">
<xs:enumeration value="A"/>
<xs:enumeration value="B"/>
<xs:enumeration value="C'7>
<xs:enumeration value="D"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>

Otra opcin: definir tipos


<xs:attribute name="letra" type="letrasCursos"/>
<xs:simpleType name="letrasCursos"/>
<xs:restriction base="xs:string">
<xs:pattern value="[A-D]/>
</xs:restriction>
</xs:attribute>
Otras opciones:
<xs:pattern value="[ABCD]"/>
<xs:pattern value="A |B|C| D"/>

Tambin hay posibilidad de establecer


restricciones sobre la longitud de lo contenido
por un elemento:
<xs:element name="dni">
<xs: simpleType>
<xs:restriction base="xs:string">
<xs:lenght value="10"/>
</xs :restriction>
</xs:simpleType>
</xs:element>

Y si queremos permitir elementos con


espacios en blanco:
<xs:element name="direccion">
<xs: simpleType>
<xs:restriction base="xs:string">
<xs:whiteSpace value="preserve"/>
</xs:restriction>
</xs: simpleType>
</xs:element>

preserve: mantiene los espacios en blanco que


almacene entre sus etiquetas de apertura y cierre
(realmente mantiene los espacios, tabuladores,
saltos de lnea y retornos de carro).
collapse: borra todos los espacios en blanco que
encuentre entre sus etiquetas de apertura y
cierre (espacios, tabuladores, saltos de lnea y
retornos de carro).
replace: sustituye todos los espacios en blanco,
tabuladores, saltos de lnea y retornos de carro
por un nico espacio en blanco.

4.2.5 Elementos complejos


Podemos identificar como elementos
complejos los siguientes:
Elementos que contienen otros elementos en su
interior.
Elementos que contienen atributos en su interior.
Elementos que contienen otros elementos y
atributos en su interior.

En el ejemplo de la base de datos de SMS, un


elemento complejo, por tener otros
elementos en su interior, podra ser el
elemento BDsms.
Podemos ver que el elemento BDsms se
compone de elementos sms.
Un sms se compone de elementos de tipo
telefono, fecha, hora y mensaje.

A la hora de definir un elemento complejo en el


esquema, hay que indicarlo de alguna manera.
Esta manera es aadiendo, a continuacin, un
elemento llamado <xs:complexType>.
Justo despus de aadirlo, se inserta otro
elemento llamado <xs:sequence> que permite
indicar que los siguientes elementos a definir se
declaran como hijos del elemento inicial (en esa
determinada secuencia). As se define un
elemento con hijos como subelementos.

<?xml version="1.0" ?>


<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" version="0.1" xml:lang="es">
<xs:element name="BDsms">
<xs:complexType>
<xs:sequence>
<xs:element name="sms" maxOccurs="unbounded">
<xs: complexType>
<xs:sequence>
<xs:element name="telefono" type="xs:string"/>
<xs:element name="fecha" type="xs:string"/>
<xs:element name="hora" type="xs:string"/>
<xs:element name="mensaje" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>

Secuencias de elementos
En el punto anterior, se hablaba del elemento
<xs:sequence>, que permite indicar el orden
derminado de elementos hijos.
Un indicador permite determinar los siguientes
patrones:
El orden en el que se establecen los elementos hijos.
La ocurrencia con la que aparecen los elementos hijos.
El grupo al que pertenecen los elementos hijos.

indicadores de orden
Los indicadores de orden permiten saber cmo
se pueden ubicar los elementos hijos. Dentro de
este tipo de indicador podemos encontrarnos
tres:
<xs:all>: especifica que todos los elementos hijos
pueden aparecer en cualquier orden determinado,
siempre que solo aparezcan una nica vez.
<xs:Choice>: especifica que de entre los elementos
hijos solo pueden aparecer o uno u otro.
<xs:sequence>: ya lo conocemos y permite indicar el
orden especfico en el que deben aparecer los
elementos hijos.

indicadores de ocurrencia
Los indicadores de ocurrencia permiten
conocer cuantas veces pueden repetirse cada
elemento hijo. Podemos distinguir los
siguientes:
<xs:maxOccurs>: indica el mximo nmero de
veces que un elemento hijo puede aparecer.
<xs:minOccurs>: indica el mnimo nmero de
veces que un elemento hijo puede aparecer.

indicadores de grupo
Los indicadores de grupo facilitan la manera de
establecer un conjunto de elementos asociados
entre si. La mejor manera de ver su funcionalidad
es con un ejemplo. Imaginemos que queremos
representar las caractersticas de un coche. Nos
gustara almacenar lo siguiente:
Marca.
Modelo.
Caballos.

<xs:group name="grupoCoche">
<xs:sequence>
<xs:element name="marca" type="xs:string"/>
<xs:element name="modelo" type="xs:string"/>
<xs:element name="caballos" type="xs:integer"/>
</xs:sequence>
</xs:group>
<xs:element name="coche" type="TipoCoche"/>
<xs:complexType name="TipoCoche">
<xs:sequence>
<xs:element name="codigo" type="xs:integer"/>
<xs:group ref="grupoCoche"/>
<xs:element name="combustible" type="xs:string"/>
</xs:sequence>
</xs: complexType>

Prctica 4
Se quiere crear una biblioteca de libros en un documento XML. Para
ello se necesita crear un XSD que almacene los siguientes campos
de un libro(habr entre 1 y 1000 libros)
Cdigo de libro. Habr cdigo o ttulo, pero nunca los dos.
Ttulo. Habr cdigo o ttulo, pero nunca los dos.
Editorial.(atributo, ser uno de los valores A1, A2o A3)
Edicin.(atributo nmero entre el 1 y el 100)
ISBN.(elemento, tipo string, limitado a 10 caracteres)
Nmero de pginas.
Autor

Crea un XML, su XSD correspondiente y verifica su validez.

Prctica 4
Se quiere crear un taller de vehculos en un documento XML:
Nota: no importa el orden de aparicin de los subelementos de coche,
pero slo pueden aparecer una vez.

modelo.(mximo 10 caracteres)
matrcula.(atributo, de mximo 7 caracteres)
ao. (atributo, valores entre 1900 y 2100)
reparacin. (puede tener de 0 a 10, los elementos de reparacin deben
aparecer en el siguiente orden)

Nmero de reparacin. (atributo, valores entre 1 y 100)


Precio.
Descripcin
Piezas necesitadas (cero o varias)
mecnico (puede haber varios o ninguno)
Dni (atributo de 9 caracteres)
Nombre (atributo)

Crea un XML, su XSD correspondiente y verifica su validez.

Prctica 4
Se quiere crear un XML con los datos de los
empleados de una empresa:
Empleado

Dni (atributo de 9 caracteres)


Nombre
Direccin
Cargo
Abreviatura (atributo, debe ser A, B,C,D)
Sueldo (atributo valor entre 800 y 5000)

Horas semanales que trabaja (valor entre 30 y 50)

Crea un XML, su XSD correspondiente y verifica


su validez.

Prctica 4
De todos los ejercicios se entregar
XML con cinco elementos principales rellenos
XSD
Resultado de la validacin.

4.3 VALIDACIN DE DOCUMENTOS XML


Cuando se habla de documento bien formado
se quiere decir que se siguen las normas y
reglas bsicas que se establecen en todos los
documentos XML.
Cuando se habla de un documento vlido,
quiere decir que adems de estar bien
formado, su estructura es acorde con las
normas que se dictan en la definicin del tipo
de documento o esquema asociado.

por qu son necesarios los


procesos de validacin?
Porque nos permite asegurar que en una
transferencia de informacin XML entre un
emisor y un receptor, ambos interpretarn su
contenido de igual manera.
Porque nos permite asegurar que el
documento contiene toda la informacin
declarada como obligatoria.
Porque los datos vendrn en un formato
conocido y correcto.

4.3.1 DOCUMENTOS BIEN FORMADOS


Al principio del documento se debe declarar una
cabecera (en formato etiqueta) que indique lo
siguiente:
Versin del documento XML. Actualmente se puede
indicar la versin 1.0 1.1
Tipo de codificacin utilizada. De esta manera se sabe que
juego de caracteres se estn utilizando. Lo normal es
utilizar una codificacin UTF-8, ISO-8859-1 o ISO-8859-15.
Si est basado en un documento de estructura externo
(DTD o esquema). Si es as, se indicara en el atributo
standalone="yes". Por defecto es que no.
<?xml version="1.0" encoding="UTF-8" standalone="no"?>

4.3.1 DOCUMENTOS BIEN FORMADOS


Todas las entidades, elementos y atributos deben tener una
sintaxis correcta:
XML distingue entre maysculas y minsculas.
Los nombres de los elementos pueden ser alfanumricos pero
empezando obligatoriamente por letra. Elemento que se abra
<etiq>, deber cerrarse </etiq>.
Los valores que se indiquen en los atributos debern ir entre
comillas dobles o simples. <etiq atributo="l">.
Si hay un elemento vaco EMPTY, deber autocerrarse. <etiq/>.
En la estructura del documento XML, se encadenarn los
elementos en un formato jerrquico, en el que solamente habr
un elemento raz.
Si se usan entidades definidas por el usuario dentro del
documento XML, en la DTD debern estar declaradas.

4.3.2 DOCUMENTOS VLIDOS


Cuando se valida un documento XML se comprueban las
siguientes cuestiones:
Solo se pueden utilizar elementos o atributos definidos en el
DTD o esquema. Cualquier elemento no declarado har que el
documento no pase el proceso de validacin (anlisis lxico).
Que los elementos y atributos estn en el orden definido en el
DTD o esquema. Adems se comprueba que los atributos o
elementos obligatorios estn presentes dentro del documento
(anlisis sintctico).
Si se declaran valores que deben ser nicos, como por ejemplo,
atributos ID, debe asegurarse que en todo el documento XML se
cumple esta condicin.
Si se define un tipo concreto para los atributos o elementos, los
valores que tomen estarn tipados a la definicin anterior. No es
lo mismo declarar un tipo entero que un tipo string.

4.3.3 HERRAMIENTAS PARA VALIDAR


Aunque se puede validar echando un simple vistazo en
el documento XML, cuando los tamaos a manejar son
grandes no es la mejor manera. En la actualidad existen
muchas herramientas que nos permiten comprobar
que se tienen documentos bien formados y que
cumplen los criterios de validez. A continuacin
enumeraremos algunas herramientas bastante
conocidas que permitirn realizar esta tarea de manera
fcil y sencilla:
XmlSpy
XMLCopyEditor

Ejercicio
Busca informacin sobre 5 programas de
escritorio que sirvan para elaborar XML, DTDs y
XSD. Debes especificar:

Nombre
Caractersticas
Licencia
Descargarlos, probarlos y dar tu opinin.

4.4 CASO PRCTICO


Una comunidad de propietarios, en su Junta General Ordinaria,
decide crear un sistema de almacenamiento de la informacin para
almacenar datos de la Comunidad. De esta manera podrn realizar
las gestiones de manera ms gil y con un estndar de
comunicacin con el resto de acreedores y deudores de la
Comunidad. En principio los campos a almacenar son los siguientes:

Cdigo de vecino.
Nombre.
Apellidos.
Portal. (puede tener los valores 12,13, o 14)
Piso y letra. (entre 1a1c y 5a5c)
Cdigo de Cuenta Corriente (CCC). Entero de 20 dgitos.
Cargo (Presidente, Vicepresidente, Secretario, Vocal, Ninguno).

4.4 CASO PRCTICO


Se pide lo siguiente:
Generar una DTD que defina esta estructura
de informacin.
Generar un esquema que defina esta
estructura de informacin.
Generar un documento XML, con al menos 10
vecinos. Dos de ellos tendrn el cargo de
Presidente y Vicepresidente (al menos).

Ejercicios
1. Crear una DTD que permita definir el
almacenamiento de coches de un concesionario
de coches de segunda mano. Para ello, los
campos a almacenar sern los siguientes:

Cdigo de coche.
Marca.
Modelo.
Matrcula.
Potencia (caballos).
Plazas.
Nmero de puertas.

2. Crear un esquema para el mismo ejemplo


anterior.
3. Crear un documento XML que almacene un
conjunto de coches. Asignar a dicho
documento la DTD y comprobar su validez.
Una vez hecho, realizar lo mismo pero con el
esquema anteriormente declarado.

También podría gustarte