TEMA 4 Definición de Esquemas y Vocabulario en XML
TEMA 4 Definición de Esquemas y Vocabulario en XML
TEMA 4 Definición de Esquemas y Vocabulario en XML
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>
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
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.
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)>
]>
<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.
Caracteres especiales
=>
>
<
"
=>
=>
=>
>
<
'
=>
&
=>
&
=> π
=> &textFile
=> &miURL
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>
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)>
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
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)
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
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)
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:
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)
Prctica 2
Se quiere crear un XML con los datos de los empleados
de una empresa:
Empleado
Prctica 2
De todos los ejercicios se entregar
XML con cinco elementos principales rellenos
+DTD todo en uno
Resultado de la validacin.
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).
</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>
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>
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">
Cdigo de alumno.
Nombre.
Apellidol.
Apellido2.
D.N.I.
Fecha de nacimiento.
Curso.
Cuota pagada (booleano).
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"/>
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:
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
Prctica 3
Se quiere crear un XML con los datos de los
empleados de una empresa:
Empleado
Dni
Nombre
Direccin
Cargo
Abreviatura
Sueldo
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>
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.
<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>
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
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)
Prctica 4
Se quiere crear un XML con los datos de los
empleados de una empresa:
Empleado
Prctica 4
De todos los ejercicios se entregar
XML con cinco elementos principales rellenos
XSD
Resultado de la validacin.
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.
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).
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.