Tema 4
Tema 4
Caso práctico
María había salido a dar un paseo por el puerto, como
todos los domingos por la mañana iba acompañada de su
marido José Ramón y su hijo.
Caso práctico
Al día siguiente, cuando habla con Juan, sus dudas quedan disipadas. Resulta que
hay varias posibilidades para asegurar una normalización en el formato de los
documentos XML.Juan comienza por describir la estructura de un documento XML y
Félix y María descubren que puede ser un poco más compleja que la que habían estado
usando hasta entonces para generar sus documentos.
Hasta ahora hemos trabajado con documentos básicos de XML. En la primera unidad vimos que un
documento XML básico estaba formado por un prólogo y un ejemplar. Recordamos que cada una de
esas partes tiene el siguiente cometido:
Prólogo: Informa al intérprete encargado de procesar el documento de todos aquellos datos que
necesita para realizar su trabajo. Consta de dos partes:
Definición de XML: Donde se indica la versión de XML que se utiliza, el código de los datos
a procesar y la autonomía del documento. Este último dato hasta ahora siempre ha sido
"yes" ya que los documentos generados eran independientes.
Declaración del tipo de documento: Hasta el momento solo hemos dicho que es el
nombre del ejemplar precedido de la cadena <!DOCTYPE y separado de ésta por, al menos
un espacio.
Ejemplar: Contiene los datos del documento que se quiere procesar. Es el elemento raíz del
documento y ha de ser único. Está compuesto de elementos estructurados según una estructura
de árbol en la que el elemento raíz es el ejemplar y las hojas los elementos terminales, es decir,
aquellos que no contienen elementos. Los elementos pueden estar a su vez formados por
atributos.
Estos documentos básicos están incompletos, ya que solo hemos declarado el tipo de documento que
va a ser (qué ejemplar vamos a definir), pero no hemos definido qué cualidades tiene ese ejemplar.
Para completarlos y definir en profundidad las cualidades del ejemplar, usaremos o bien DTDs o bien
XML Schemas.
Autoevaluación
Marcar los componentes de un documento XML:
Prólogo.
Ejemplar.
Definición de codificación del documento.
Cabecera.
Mostrar retroalimentación
Solución
1. Correcto
2. Correcto
3. Correcto
4. Incorrecto
1.1.- Declaración de tipo de documento
Autoevaluación
La definición de tipo de documento ha de ser:
Única.
No es correcta ya que un documento puede tener una definición DTD interna u otra
externa definidas simultáneamente.
Solución
1. Opción correcta
2. Incorrecto
3. Incorrecto
4. Incorrecto
1.2.- Definición de la sintaxis de documentos
XML
Recordamos que en estos documentos las etiquetas de marcado
describen la estructura del documento.
Sabemos que los atributos no pueden tener nodos que dependan de ellos, por tanto solo pueden
corresponder con hojas de la estructura de árbol que jerarquiza los datos. ¿Significa esto que todas las
hojas van a ser atributos? Pues no, es cierto que los atributos son hojas, pero las hojas pueden ser
atributos o elementos.
En ese caso, ¿qué criterios podemos utilizar para decidir si un dato del documento que se pretende
estructurar ha de representarse mediante un elemento o un atributo? Aunque no siempre se respetan,
podemos usar los siguientes criterios:
Diferenciar entre los elementos y atributos de distintos vocabularios con diferentes significados
que comparten nombre.
Agrupar todos los elementos y atributos relacionados de una aplicación XML para que el software
pueda reconocerlos con facilidad.
¿Cómo se declaran?
xmnls:"URI_namespace"
¿Y si se usa un prefijo que nos informe sobre cuál es el vocabulario al que está asociada esa
definición?
xmnls:prefijo="URI_namespace"
En ambos casos URI_namespace es la localización del conjunto del vocabulario del espacio de
nombres al que se hace referencia.
Autoevaluación
Marcar las afirmaciones válidas que hacen referencia a un espacio de nombres.
Mostrar retroalimentación
Solución
1. Correcto
2. Incorrecto
3. Correcto
4. Incorrecto
2.- Definiciones de tipo de documento, DTD.
Caso práctico
Según Juan el método más sencillo para intentar normalizar los documentos con los
que trabajan, consiste en definir unos vocabularios que han de cumplir los documentos
que generan, estos se llaman Definición de Tipo de Documento. Además, aunque no es
un lenguaje XML, tiene una sintaxis sencilla y fácil para que ella y Félix puedan
comprenderla y utilizarla.
Están formadas por una relación precisa de qué elementos pueden aparecer en un documento y
dónde, así como el contenido y los atributos del mismo. Garantizan que los datos del documento
XML cumplen las restricciones que se les haya impuesto en el DTD, ya que estas últimas permiten:
Su sintaxis no es XML.
No soportan espacios de nombres.
No definen tipos para los datos. Solo hay un tipo de elementos terminales, que son los datos
textuales.
No permite las secuencias no ordenadas.
No es posible formar claves a partir de varios atributos o elementos.
Una vez que se define un DTD no es posible añadir nuevos vocabularios.
Cuando están definidas dentro del documento XML se ubican entre corchetes después del nombre del
ejemplar en el elemento <!DOCTYPE> pero, cuando está definido en un fichero externo ¿a qué tipo de
fichero corresponde? Definimos el DTD externo en un fichero de texto plano con extensión dtd.
2.1.- Declaraciones de tipos de elementos
terminales
Los tipos terminales son aquellos elementos que se corresponden con hojas
de la estructura de árbol formada por los datos del documento XML asociado
al DTD. La declaración de tipos de elementos está formada por la cadena
<!ELEMENT> separada por, al menos un espacio del nombre del elemento
XML que se declara, y seguido de la declaración del contenido que puede
tener dicho elemento.
En el caso de elementos terminales, es decir, aquellos que no contienen más elementos, esta
declaración de contenido es dada por uno de los siguientes valores:
EMPTY: Indica que el elemento no es contenedor. Por ejemplo, la siguiente definición muestra un
elemento A que no contiene nada:
<!ELEMENT A EMPTY>
ANY: Permite que el contenido del elemento sea cualquier cosa. Un ejemplo de definición de un
elemento de este tipo es:
<!ELEMENT A ANY>
(#PCDATA): Indica que los datos son analizados en busca de etiquetas, resultando que el
elemento no puede contener elementos, es decir solo puede contener datos de tipo carácter
exceptuando los siguientes: <, &, ]], >. Si es de este tipo, el elemento A tendrá una definición
como:
<!ELEMENT A (#PCDATA)>
EJEMPLO
Autoevaluación
Los elementos terminales de tipo ANY son aquellos que están:
Vacíos
No es correcta, los elementos terminales son aquellos que no están formados por
otros elementos.
Solución
1. Incorrecto
2. Incorrecto
3. Opción correcta
4. Incorrecto
2.2.- Declaraciones de tipos de elementos no
terminales
Una vez que sabemos el modo de definir las hojas de un árbol de datos veamos
cómo definir sus ramas, es decir los elementos que están formados por otros
elementos.
Para definirlos utilizamos referencias a los grupos que los componen tal y como
muestra el ejemplo:
¿Y qué sucede cuando un elemento puede aparecer en el documento varias veces, hay que indicarlo de
algún modo? Pues sí, también hay que indicar cuando un elemento puede no aparecer. Para ello
usamos los siguientes operadores, que nos permiten definir la cardinalidad de un elemento:
Operador cero-o-mas, *. Define un componente presente cero, una o varias veces. En el ejemplo
el grupo (cp, ciudad) puede no aparecer o hacerlo varias veces.
EJEMPLO
1 <alumno>
2 <nombre>Olga</nombre>
3 <dirección>El Percebe 13</dirección>
4 </alumno>
Autoevaluación
La diferencia entre el operador ? y el + es que el primero permite que el elemento
sobre el que se aplica esté presente una vez, como máximo, mientras que el
operador + no limita el número máximo de veces que está presente el elemento en
el documento XML.
Verdadero.
Falso.
Solución
1. Opción correcta
2. Incorrecto
2.3.- Declaraciones de listas de atributos para
los tipos de elementos
Ya sabemos cómo declarar elementos, ahora veamos el modo de
declarar los atributos asociados a un elemento. Para ello utilizamos la
cadena <!ATTLIST seguida del nombre del elemento asociado al
atributo que se declara, luego el nombre de éste último seguido del tipo
de atributo y del modificador. Este elemento puede usarse para
declarar una lista de atributos asociada a un elemento, o repetirse el
número de veces necesario para asociar a dicho elemento esa lista de
atributos, pero individualmente.
Al igual que los elementos no todos los atributos son del mismo tipo,
los más destacados son:
(lunes|martes|miércoles|jueves|viernes|sábado|domingo) #REQUIRED>
¿También hemos de declarar si el valor de un atributo es obligatorio o no? Si, para ello se usan los
siguientes modificadores:
EJEMPLO
1 <alumno edad=15>
2 <nombre>Olga</nombre>
3 <apellidos>Velarde Cobo</apellidos>
4 <dirección>El Percebe 13</dirección>
5 </alumno>
Un DTD que podría ajustarse sería:
Autoevaluación
¿Cuál de los siguientes atributos permite añadir a los datos una restricción de
integridad referencial?
MTOKEN.
ID.
IDREF.
CDATA.
Incorrecto, los datos de este tipo garantizan que tienen un nombre que cumple las
normas de XML.
No es correcto. Este atributo impone la restricción que ese valor debe ser único para
ese atributo dentro de un documento XML.
Genial, es correcto.
Solución
1. Incorrecto
2. Incorrecto
3. Opción correcta
4. Incorrecto
2.4.- Declaraciones de entidades
¿Qué sucede si queremos declarar valores constantes
dentro de los documentos? ¿podemos?
Las entidades nos permiten definir constantes en un
documento XML. Cuando se usan dentro del documento
XML se limitan por "&" y ";", por ejemplo &entidad;
¿Se puede definir una entidad diferente? ¿Cómo? Utilizando la siguiente sintaxis: <!ENTITY
nombre_entidad "valor de la entidad"> Por ejemplo,
Externas: Permiten establecer una relación entre el documento XML y otro documento a través de
la URL de éste último. Un ejemplo de declaración de una entidad externa es:
En este caso el contenido de los ficheros es analizado, por lo que deben seguir la sintaxis XML.
Cuando es necesario incluir ficheros con formatos binarios, es decir ficheros que no se analicen, se
utiliza la palabra reservada NDATA en la definición de la entidad y habrá que asociar a dicha entidad
una declaración de notación, tal y como muestra el ejemplo del apartado siguiente.
De parámetro: Permite dar nombres a partes de un DTD y hacer referencia a ellas a lo largo del
mismo. Son especialmente útiles cuando varios elementos del DTD comparten listas de atributos o
especificaciones de contenidos. Se denotan por %entidad;
Autoevaluación
Las entidades permiten definir elementos cuyo valor es constante dentro de un
DTD.
Verdadero.
Falso.
Genial, es correcto.
Solución
1. Incorrecto
2. Opción correcta
2.5.- Declaraciones de notación
Cuando se incluyen ficheros binarios en un fichero, ¿cómo le decimos
qué aplicación ha de hacerse cargo de ellos? La respuesta es utilizando
notaciones. La sintaxis para declarar notaciones es:
Por ejemplo, una notación llamada gif donde se indica que se hace referencia a un editor de formatos
gif para visualizar imágenes será:
Para asociar una entidad externa no analizada a esta notación basta declarar dicha entidad del
siguiente modo:
Autoevaluación
Las notaciones permiten:
Solución
1. Incorrecto
2. Opción correcta
3. Incorrecto
4. Incorrecto
2.6.- Secciones condicionales
Permiten incluir o ignorar
partes de la declaración de
un DTD. Para ello se usan
dos tokens:
<![INCLUDE [Declaraciones vi
Por ejemplo:
IGNORE, permite ocultar esa sección de declaraciones dentro del DTD. La forma de uso es:
Por ejemplo:
Autoevaluación
Las sentencias condicionales permiten definir unos elementos u otros dentro del
fichero XML en función de una determinada condición.
Verdadero.
Falso.
Solución
1. Incorrecto
2. Opción correcta
3.- XML Schema
Caso práctico
Félix, quien considera que la normalización de los documentos XML que manejan
en la empresa va a ser un duro trabajo para María, él y otros trabajadores inexpertos,
plantea la posibilidad de que se encargue de ello algún trabajador de la consultoría
informática que dirige Juan.
Al final se va a encargar de ello Marina. Les explica que, en lugar de trabajar con DTD's le
parece mejor hacerlo con un lenguaje XML llamado XML Schema, el cual tiene, entre
otras, la ventaja de permitir definir el tipo de datos de cada uno de los componentes de
cada documento.
¿También se definen en
ficheros planos? Si, ya que son
documentos XML, pero en este
caso la extensión de los
archivos es xsd, motivo por el
cual también se les denomina
documentos XSD.
psd - www.flickr.com (CC BY)
Los elementos XML que se
utilizan para generar un
esquema han de pertenecer al espacio de nombre XML Schema, que es:
http://www.w3.org/2001/XMLSchema.
El ejemplar de estos ficheros es <xs:schema>, contiene declaraciones para todos los elementos y
atributos que puedan aparecer en un documento XML asociado válido. Los elementos hijos inmediatos
de este ejemplar son <xs:element> que nos permiten crear globalmente un elemento. Esto significa
que el elemento creado puede ser el ejemplar del documento XML asociado.
EJEMPLO
Debes conocer
En este primer enlace encontrarás los fundamentos del estándar XML Schema.
Son los distintos valores que puede tomar el atributo type cuando se
declara un elemento o un atributo y representan el tipo de dato que
tendrá el elemento o atributo asociado a ese type en el documento
XML.
Debes conocer
En este enlace encontrarás los tipos de datos admitidos por el estándar.
https://www.w3.org/TR/xmlschema-2/
Autoevaluación
¿Cuál de los siguientes tipos no hace referencia a un dato de tiempo?
dateTime.
duration.
gDayMonth.
gMonthDay.
Solución
1. Incorrecto
2. Incorrecto
3. Opción correcta
4. Incorrecto
3.1.1.- Facetas de los tipos de datos
¿Cuáles son las restricciones que podemos aplicar sobre los valores de los datos de un elemento o
atributo?
Están definidos por las facetas, que solo pueden aplicarse sobre tipos simples utilizando el
elemento xs:restriction. Se expresan como un elemento dentro de una restricción y se pueden
combinar para lograr restringir más el valor del elemento. Son, entre otros:
Patrón Significado
\t Tabulación.
3.1.2.- Facetas: ejercicios
1.- Creación de una cadena de texto con una longitud máxima de 9 caracteres y dos valores
posibles.
2.- Creación de un elemento en el que se respetan los espacios tal y como se han introducido.
3.- Creación de un elemento calificaciones de dos dígitos cuyo valor es un número entero
comprendido entre 1 y 10, ambos inclusive.
4.- Creación de la máscara de un DNI mediante pattern.
3.1.3.- Facetas: soluciones a los ejercicios
Ejercicio Resuelto 1
1.- Creación de una cadena de texto con una longitud máxima de 9 caracteres y dos
valores posibles.
Mostrar retroalimentación
1 <xs:simpleType name="estado">
2 <xs:restriction base="xs:string">
3 <xs:maxLength value="9"/>
4 <xs:enumeration value="conectado"/>
5 <xs:enumeration value="ocupado"/>
6 </xs:restriction>
7 </xs:simpleType>
Ejercicio Resuelto 2
2.- Creación de un elemento en el que se respetan los espacios tal y como se han
introducido.0
Mostrar retroalimentación
1 <xs:simpleType name="nombre">
2 <xs:restriction base="xs:string">
3 <xs:whitespace value="preserve"/>
4 </xs:restriction>
5 </xs:simpleType>
Ejercicio Resuelto 3
3.- Creación de un elemento calificaciones de dos dígitos cuyo valor es un número
entero comprendido entre 1 y 10, ambos inclusive.
Mostrar retroalimentación
1 <xs:simpleType name="calificaciones">
2 <xs:restriction base="xs:integer">
3 <xs:totalDigits value="2"/>
4 <xs:minExclusive value="0"/>
5 <xs:maxInclusive value="10"/>
6 </xs:restriction>
7 </xs:simpleType>
Ejercicio Resuelto 4
4.- Creación de la máscara de un DNI mediante pattern.
Mostrar retroalimentación
1 <xs:simpleType name="dni">
2 <xs:restriction base="xs:string">
3 <xs:pattern value="[0-9] [0-9] [0-9] [0-9] [0-9] [0-9] [0-9] [0-9] [A-Z]"/>
4 </xs:restriction>
5 </xs:simpleType>
3.2.- Elementos del lenguaje
A continuación se listan los más usados:
Autoevaluación
Para hacer un elemento complejo formado por un listado de elementos en los que
importa el orden hay que usar el elemento:
<xs:choice>.
<xs:group>.
<xs:all>.
<xs:secuence>.
1. Incorrecto
2. Incorrecto
3. Incorrecto
4. Opción correcta
Debes conocer
Este enlace te permitirá consultar las estructuras del estándar XML Schema.
Ejercicio Resuelto
Define un esquema correspondiente a un documento XML para estructurar la información
personal sobre los alumnos de un centro educativo.
Mostrar retroalimentación
1.- Creación de un elemento simple de nombre edad que representa la edad de un alumno
de la ESO, por tanto su rango está entre los 12 y los 18 años.
2.- Creación de una lista con los días de la semana en letras.
3.- Creación de un elemento compuesto de nombre alumno, formado por los elementos
nombre, apellidos, web personal.
3.3.2.- Definición de tipos de datos: soluciones
Ejercicio Resuelto 1
1.- Creación de un elemento simple de nombre edad que representa la edad de un alumno
de la ESO, por tanto su rango está entre los 12 y los 18 años.
Mostrar retroalimentación
1 <xs:element name="edad">
2 <xs:simpleType>
3 <xs:restriction base="xs:positiveInteger">
4 <xs:minInclusive value="12"/>
5 <xs:maxInclusive value="18"/>
6 </xs:restriction>
7 </xs:simpleType>
8 </xs:element>
Ejercicio Resuelto 2
2.- Creación de una lista con los días de la semana en letras.
Mostrar retroalimentación
Ejercicio Resuelto 3
3. Creación de un elemento compuesto de nombre alumno, formado por los
elementos nombre, apellidos, web personal.
Mostrar retroalimentación
1 <xs:complexType name="alumno">
2 <xs:secuence>
3 <xs:element name="nombre" type="xs:string" minOccurs="1" maxOccurs="1"/>
4 <xs:element name="apellidos" type="xs:string" minOccurs="1" maxOccurs="1"
5 <xs:element name="web" type="xs:string" minOccurs="0" maxOccurs="5">
6 <xs:complexType>
7 <xs:attribute name="href" type="xs:string"/>
8 </xs:complexType>
9 </xs:element>
10 <xs:secuence>
11 </xs:complexType>
3.4.- Asociación con documentos XML
Una vez que tenemos creado el fichero XSD ¿cómo lo asociamos a un fichero XML?
Ejercicio Resuelto
Dado el ejemplo de esquema de la sección 3.2.1. construye un documento XML que
cumpla las especificaciones definidas en el archivo XML Schema.
Mostrar retroalimentación
Autoevaluación
La asociación de un documento XML a un esquema se hace en:
El ejemplar.
En una sección llamada declaración del esquema que se sitúa entre el prólogo y el
ejemplar.
Solución
1. Incorrecto
2. Incorrecto
3. Opción correcta
4. Incorrecto
3.5.- Documentación del esquema
Una vez que hemos visto como crear un esquema vamos a ver el modo de
incorporar cierta documentación (quién es el autor, limitaciones de derechos de
autor, utilidad del esquema, etc.) al mismo.
EJEMPLO
1 <xs:schema xmlns:xsi=http://www.w3.org/2001/XMLSchema>
2 <xs:annotation>
3 <xs:documentation xml:lang ="es-es">
4 Materiales para formación e-Learning
5 <modulo>Lenguajes de marcas y sistemas de gestión de información.<modulo>
6 <fecha_creación> 2011<fecha_creacion>
7 <autor> Nuky La Bruji</autor>
8 </xs:documentation>
9 </xs:annotation>
10 <xs:element name="lmsgi" type=xs:string>
11 <xs:annotation>
12 <xs:appinfo>
13 <texto_de_ayuda>Se debe de introducir el nombre completo del tema</texto_de_ayuda>
14 <xs:appinfo>
15 </xs:annotation>
16 </xs:element>
17 </xs:schema>
Autoevaluación
La mejor solución para documentar un esquema es usar los comentarios:
Verdadero.
Falso.
Genial, correcto.
Solución
1. Incorrecto
2. Opción correcta
4.- Herramientas de creación y validación
Caso práctico
Antes de comenzar a trabajar con la normalización de los documentos que utiliza la
empresa de María y Félix. Marina le presenta a Juan un informe sobre las diferentes
herramientas que pueden facilitarles el trabajo de edición y validación de los documentos
XSD y XML.
Juan hará un estudio de costes y escogerá alguna de ellas para realizar el trabajo.
Igual que hasta ahora, para crear y validar los documentos XML y los
esquemas basta con un editor de texto plano y un navegador. ¿Pero no hay
ninguna herramienta que nos facilite el trabajo? Pues sí, existen aplicaciones
que permiten al usuario visualizar, validar y editar documentos en el lenguaje
XML. Algunos de estos productos son: