Análisis y diseño de sistemas de información ió para Internet 2. Principales componentes de XML Luís Rodríguez Baena (luis.rodriguez@upsam.net) Universidad Pontificia de Salamanca (campus Madrid) Facultad de Informática
Documentos XML Un documento XML es un documento de texto que puede describir los contenidos a partir de una DTD o esquema utilizados para declarar sus entidades, tipo de contenido y atributos que lo describen. Una vez creado puede mostrar su contenido mediante una plantilla XSL. Tres componentes: Un Documento XML. Opcionalmente, una DTD o esquema con la descripción del contenido. Opcionalmente una plantilla XSL con las especificaciones para mostrar el contenido. 2
Documentos XML Tipos de documentos según el contenido Si tenemos en cuenta el contenido de un documento XML podemos distinguir: Aquellos en los que cada etiqueta sólo puede contener otra etiqueta o contenido de texto. Presentan un estructura t similar il a los registros de una base de datos. Documentos narrativos, de formato libre en los que cada etiqueta puede contener una mezcla de texto libre u otras etiquetas. <personas> <persona> <nombre>mi nombre</nombre> <apellidos>mis apellidos</apellidos> <ciudad>mi ciudad</ciudad> </persona> </personas> <biografía> <párrafo> <persona><nombre>juan</nombre><apellidos>mar tínez Pérez</apellidos></persona>nació en la ciudad de <ciudad>madrid</ciudad>cuando sólo tenía <negrita>un año</negrita> </párrafo> </biografía> 3
Documentos XML Tipos de documentos: bien formados y validados Según su nivel de conformidad pueden ser: Documentos bien formados. Cumple las especificaciones del lenguaje respecto a las reglas sintácticas y tiene una estructura jerárquica estricta. Todo documentos XML debe estar bien formado. Documentos validados. Además de bien formado, presenta una estructura y un semántica determinada por una DTD o esquema que define sus elementos, valores y jerarquía. Un documento XML puede no estar validado. 4
Documentos XML Documentos bien formados 1. Toda etiqueta de inicio debe tener una de cierre. Si una etiqueta t no tiene contenido debe tener también una etiqueta t de cierre. <etiqueta></etiqueta> Una etiqueta sin etiqueta de cierre deberá acabar con la secuencia />. <etiqueta /> 2. Se pueden anidar elementos, pero no superponer. Esta combinación no es posible en xml: <strong><em>contenido</strong></em>, aunque si en html. 3. Debe tener un único elemento raíz. 4. Los valores de los atributos tos deben estar entrecomillados. ecomillados 5. Un elemento no puede tener dos atributos con el mismo nombre. 6. Los comentarios y órdenes de procesamiento no pueden estar dentro de las etiquetas. 7. No pueden aparecer signos < y & individuales dentro del contenido de un elemento o atributo. En su lugar deben aparecer las entidades < o &. 5
Documentos XML Estructura Estructura lógica. Se puede considerar cualquier documento se puede dividir en componentes. En XML estos componentes se denominan elementos, cada uno de los cuales representa un componente lógico del documento. Estos elementos pueden, a su vez, estar compuestos de otros elementos. En ultima instancia, i estarán compuestos de frases, palabras y caracteres: datos de carácter del documento. Siempre existe un elemento llamado raíz o elemento de documento. Los elementos incluidos en la raíz son los subelementos. Si contienen otros subelementos se denominan ramas. Si no contienen más subelementos se denominan hojas. 6
Documentos XML Estructura (II) Estructura lógica de un mensaje de correo electrónico. 7
Documentos XML Estructura (III) Estructura física. Cabecera del documento. Declaración XML. o Declaración opcional pero conveniente. Declaración del tipo de documento. o Opcional. Información adicional del documento (enlaces a hojas de estilo). o Opcional. Elementos. Representación de las estructuras lógicas del documento. Constituyen la base física del documento. Pueden o no tener contenido. La DTD o los esquemas pueden indicar el formato de los elementos del documento. Atributos. Información adicional de un elemento. Entidades. Unidad virtual de almacenamiento. Representan información que se puede insertar en el documento. 8
Elementos, etiquetas y datos de caracteres A cada una de las porciones de información se le denomina elemento. persona, dni, nombre, etc. Cada elemento está compuesto por una etiqueta de inicio <nombre> y una de cierre </nombre>. Entre esta dos etiquetas aparece el contenido del elemento. Puede contener casi cualquier carácter Unicode. Los espacios en blanco también forman parte del contenido. Algunos analizadores pueden ignorarlo. <persona> <dni>123456c</dni> <nombrecompleto> <primerapellido>pérez</primerapellido> <segundoapellido>gómez</segundoapellido> <nombre>ana María</nombre> </nombrecompleto> <telefono>+34912343456</telefono> 3 <telefono>+34678675678</telefono> </persona> 9
Elementos, etiquetas y datos de caracteres acte es (II) Sintaxis de la etiqueta. Una etiqueta t de inicio i i comienza por el símbolo <. Una etiqueta de fin comienza por los símbolos </. Ambas etiquetas terminan con el símbolo >. Etiquetas vacías. Toda etiqueta de inicio debe ir acompañada por una de cierre. En HTML esto no es obligatorio. o La etiqueta <br> no tiene por qué tener cierre. En XHTML (un lenguaje XML), la etiqueta <br> debe tener una de cierre, aunque no tenga contenido <br></br>. Si un elemento no tiene etiqueta de cierre, debe acabar con la secuencia />. En XHTML es equivalente poner <br></br> que <br />. Los nombres de las etiquetas son sensibles a mayúsculas. Si la etiqueta de inicio comienza en minúsculas, la etiqueta de cierre también. <persona> </Persona> no sería válido. 10
Elementos, etiquetas y datos de caracteres acte es (III) Un documento XML tiene una estructura jerárquica. El elemento de nivel superior es el elemento padre, a sus descendientes se les llama hijos. Cada elemento sólo puede tener un elemento padre. Esto implica que todos los elementos deben estar correctamente anidados. o En HTML es correcto poner <b><i>hola</b></i>. o En XML es incorrecto poner <nombrecompleto><nombre>pepe</nombrecompleto></nombre>. El elemento de jerarquía superior no tiene padre. Elemento raíz o elemento del documento. Sólo puede haber un elemento raíz. 11
Elementos, etiquetas y datos de caracteres acte es (III) En el elemento persona Algunos elementos sólo tienen caracteres (dni, telefono, nombre). Otros elementos sólo tienen etiquetas (persona, nombrecompleto). Esta estructura es común cuando se trabaja con documentos jerárquicos similares a los registros. XML también se puede utilizar para definir documentos en formato libre: documentos narrativos. <biografía> <párrafo> <persona><nombre>juan</nombre><apellidos>martínez Pérez</apellidos></persona>nació en la ciudad de <ciudad>madrid</ciudad>cuando sólo tenía <negrita>un año</negrita> </párrafo> <hechos><persona><nombre>juan</nombre><apellidos>martínez Pérez</apellidos></persona> ha sido un destacado miembro de la <abreviatura>xjk</abreviatura>bla, bla, bla </hechos> </biografía> El elemento raíz sería biografía, que tendría dos elementos hijos (párrafo y hechos). Estos elementos tienen algunos elementos como nombre, apellidos, ciudad o negrita. También contienen datos de caracteres sin marcar. Tienen contenido mixto. 12
Atributos Un elemento XML puede tener atributos. Un atributo es una pareja de valores separados por el signo igual en la etiqueta de inicio de un elemento. Por ejemplo: <telefono tipo="casa">+34912343456</telefono> <telefono tipo="trabajo">+34678675678</telefono> El nombre del atributo es un nombre XML válido. El contenido del atributo puede contener casi cualquier carácter encerrado entre comillas (simples o dobles). Cada elemento sólo puede tener un atributo con un nombre determinado. Cuándo elegir un atributo para meter información? Normalmente se utilizan cuando se requiere dar información adicional de un elemento (meta información). Por ejemplo en la etiqueta img de html. En ocasiones no está muy claro que es información. Se podría sustituir el elemento DNI por un atributo del elemento persona. <persona dni= "123456C"> Como una etiqueta sólo puede tener un atributo con el mismo nombre, no sería posible utilizarlos para meter los teléfonos de la persona. Una estructura basada en atributos suele ser más flexible y ampliable que una basada en atributos. 13
Nombres XML Los nombres de los atributos, las etiquetas y de otros elementos de XML son nombres XML. Para formarlos se deben seguir las mismas reglas: Pueden contener cualquier carácter alfanumérico Unicode (o ideograma en el caso del algunos idiomas). La diferencia entre XML 1.0 y XML 1.1 es que la versión 1.1 utiliza la versión 3 de Unicode que incluye idiomas como el camboyano, el mongol o el birmano. Pueden incluir los caracteres de puntuación _ (guión bajo), - (guión) o. (punto). No se permiten espacios en blanco. Se pueden utilizar también los dos puntos, pero se reserva para los espacios de nombre. Deben comenzar con un carácter alfabético (o ideograma) o por el guión bajo (_). Todos los nombres que comienzan por la cadena XML en cualquier combinación de minúsculas o mayúsculas se reservan para las especificaciones del W3C. 14
Referencias, entidades y notaciones Una referencia es un forma de llamar a un elemento de forma abreviada. Ese elemento puede ser un carácter predefinido (referencias de carácter) o estar definido en una DTD. Se utilizan de la forma &nombrereferencia;. Referencias de carácter. En el contenido de un elemento no se pueden utilizar determinados caracteres. El símbolo < siempre se interpreta como el inicio de una etiqueta. El símbolo & siempre se interpreta como el inicio de una referencia. Si se quieren utilizar estos elementos, en el contenido de un elemento se debe utilizar: < para el carácter <. & para el carácter &. Además se pueden utilizar las referencias de carácter: >, para el carácter >, por contraposición ió a < ", para el carácter ". ', para el carácter '. Se puede hacer referencia a cualquier carácter mediante la secuencia &#NúmeroCarácterDecimal; o mediante &#xnúmerocarácterhexadecimal;. En la DTD se pueden definir entidades con valor predefinido que se utilizarán en el documento XML como una referencia de entidad. Sólo se pueden utilizar en el contenido de un elemento o en el valor de un atributo. El analizador reemplazará las referencias por su valor determinado en las especificaciones XML o por el valor determinado por la entidad en la DTD. 15
Secciones CDATA Una sección CDATA se utiliza para incluir en ella código literal. Normalmente se trata t de código fuente HTML o XML. Permite que no nos preocupemos de sustituir los caracteres < y & por las referencias a entidad. El analizador inserta de forma literal todo lo que haya en una sección CDATA sin procesarlo. Una sección CDATA tiene el siguiente formato: <!CDATA...lo que sea ]]> Dentro se puede incluir cualquier cosa excepto la secuencia ]]>. En su lugar se puede utilizar ]]>. En XHTML su uso es fundamental para incluir código Javascript. Un ejemplo <p>la etiqueta <img> tiene el siguiente formato: </p> <pre> <![CDATA[ ]]> </pre> <img src="url de la imagen" alt ="texto alternativo"> 16
Comentarios Los comentarios XML son sintácticamente iguales que los comentarios HTML: <!-- Cualquier cosa --> Puede contener cualquier cosa excepto el doble guión. Pueden aparecer en cualquier lugar del documento, excepto: Dentro de una etiqueta. Dentro de otro comentario. Los analizadores de XML pueden incluir o no la información de los comentarios 17
Instrucciones de procesamiento XML proporciona un mecanismo para indicar a una aplicación que realice un proceso: Las instrucciones de procesamiento Comienzan con la secuencia de inicio <? y terminan con la secuencia de fin?>. A continuación aparece un nombre XML que hace referencia al nombre de la aplicación. Por último aparece información para a aplicación a la que va destinada la instrucción. Algunos ejemplos XML ha propuesto una instrucción estándar para indicar a los motores de búsqueda cómo deben indexar una página: <?robots index="yes" follow="no"?> Indica a los robots de búsqueda que deben indexar la página y que no deben seguir sus enlaces. Para incluir código php en XHTML se utiliza <?php código php?> 18
Declaración XML Un documento XML debe llevar al comienzo una declaración XML. Su formato es: <?xml version="númeroversión" encoding="codificacioncaracteres" standalone="yes no"> No es obligatorio su inclusión, Ayuda al procesador y a la aplicaciones i a interpretar t el contenido del documento XML de manera más eficiente. Si la incluye debe estar al comienzo del documento y no puede estar precedida por espacios en blanco, saltos de línea ni ningún otro elemento. Los parser XML utilizan los cinco primero caracteres (<?xml) para realizar suposiciones acerca del contenido. Atributo version. Debe tener el valor 1.0 o 1.1. Utilizar el atributo version="1.1" limita el documento a los parser más recientes. o La versión 1.1 prácticamente sólo aporta la inclusión de lenguajes como el camboyano o el mongol. 19
Declaración XML (II) Atributo encoding. Permite especificar el juego de caracteres a utilizar Por omisión XML utiliza el conjunto de caracteres UTF-8 que se corresponde con el ASCII estándar. El conjunto de caracteres Unicode ISO-8859-1 es válido para los idomas de Europa Occidental. Atributo standalone. Indica si el documento se tiene que validad d con una TDT externa. Por omisión toma el valor yes, es decir se trata de un documento independiente. Habrá que poner el valor no si se desea validar el documento con una TDT externa. Un ejemplo de declaración XML <?xml version="1.0" encoding="iso-88591" standalone="yes"> 20
Comprobar la estructura de un documento Un analizador XML se fijará primero en la estructura del documento que tiene que estar bien formado (tener una estructura correcta). Comprobará: 1. Toda etiqueta de inicio debe tener una de cierre. 2. Se pueden anidar elementos, pero no superponer. 3. Debe tener un único elemento raíz. 4. Los valores de los atributos deben estar entrecomillados. 5. Un elemento no puede tener dos atributos con el mismo nombre. 6. Los comentarios y órdenes de procesamiento no pueden estar dentro de las etiquetas. 7. No pueden aparecer signos < y & individuales dentro del contenido de un elemento o atributo. El parser informará a la aplicación de la buena estructura del documento. En caso contrario devolverá un error. En algunos casos parará la comprobación, en otros devolverá todos los errores que acarrea el primero. La aplicación puede informar del error o no hacer nada. 21
Comprobar la estructura de un documento (II) Se puede comprobar la estructura del documento XML cargándolo en Internet Explorer o Firefox. Si no aparece nada, hay un error en la estructura. Si aparece el árbol de elementos, la estructura es correcta. 22
Comprobar la estructura de un documento (III) Comprobación con libxml. Una analizador de Gnomo Project. Proporciona unas bibliotecas de funciones en C e incluye un ejecutable con interfaz de línea de órdenes: xmllint.exe. Está disponible en http://www.zlatkovic.com/pub/libxml/. o Es necesario bajarse libxml, zlib y iconv. o Lo más fácil: colocar iconv.lib, libxml2.dll, zdll.lib, zlib.lib, xmlcatalog.exe y xmllint.exe en el mismo directorio (por ejemplo c:\xmllib). Ejecución. Desde la línea de órdenes. c:\xmllint.exe nombrearchivoxml 23
Comprobar la estructura de un documento (IV) Si todo está correcto saca la estructura del árbol Si todo está correcto sale el árbol XML 24
Comprobar la estructura de un documento (V) Si hay errores indica el problema. Puede que se arrastren otros errores. En el ejemplo se ha cambiado la primera etiqueta persona por Persona y se han quitado las comillas de cierre de atributo casa. Se han quitado las segundas comillas a casa Se ha cambiado la etiqueta de inicio persona por Persona 25
Comprobar la estructura de un documento (VI) Visual Studio 2005 también proporciona un analizador XML. Para crear un nuevo documento XML, en cualquier proyecto de cualquier tipo, dar la opción Agregar elemento del menú Proyecto y seleccionar Archivo XML. En la parte inferior de la pantalla, en la lista de errores, irán apareciendo los errores de estructura del documento. 26
Comprobar la estructura de un documento Validadores on line Validador XML del W3Schools (www.w3schools.com/xml/xml_validator.asp). Pegar aquí el código XML Al pulsar el botón Validate, un cuadro de texto informa del error 27
Comprobar la estructura de un documento Validadores on line (II) XMLValidation.com (www.xmlvalidation.com/). Pegar aquí el código XML o seleccionar un archivo local 28
Comprobar la estructura de un documento Validadores on line (III) XMLValidation.com (www.xmlvalidation.com/). Salida de resultados 29
Comprobar la estructura de un documento Validadores on line (IV) Validator for XML Schema del W3C (www.w3.org/2001/03/webdata/xsv). Es un validador de esquemas. Si el documento no tiene esquemas, aunque esté bien formado mostrará las advertencias. 30
Comprobar la estructura de un documento Validadores on line (V) Validator for XML Schema del W3C (www.w3.org/2001/03/webdata/xsv). Salida de un documento mal formado. 31
Comprobar la estructura de un documento Validadores on line (VI) Validator for XML Schema del W3C (www.w3.org/2001/03/webdata/xsv). Salida de un documento bien formado. 32
Ejemplos Crear un documento XML que permita guardar los datos de un alumno (expediente, apellidos y nombre). Modificar el documento anterior de forma que contenga un elemento nombre_completo con los elementos hijo apellidos y nombre. Modificar el documento anterior de forma que permita almacenar la información ió de varios alumnos. Modificar el elemento anterior de forma que por cada alumno se puedan almacenar las notas de cada asignatura. Por cada asignatura se almacenará el código y la descripción de la misma, la fecha del examen, la nota obtenida, el número de veces que la ha matriculado y el número de convocatorias a las que se ha presentado. Crear un documento XML que permita almacenar la información de un CD. Por cada álbum se almacenará un identificador, d el nombre del álbum, el artista, t la duración, el género, el año, un campo de observaciones en formato HTML e información de las pistas que contiene. Por cada pista se almacenará el número de pista, el nombre de la canción, el artista, la duración, el año, el género y un campo de observaciones en formato HTML 33