qué es XML? Hacía la estandarización de los datos César Ignacio García Osorio Surgió para superar la complejidad de SGML y la inflexibilidad de HTML. Es un meta lenguaje de etiquetado/marcado que permite la creación de lenguajes de marcado para documentos y dominios particulares. Las etiquetas XML describen la estructura y semántica del contenido de un documento, no el formato del contenido. El formato se describe por separado, en las hojas de estilo. Las etiquetas que se creen pueden estar documentadas en una Definición de Tipo de Documento (DTD). Estándar del W3C:! http://www.w3.org/tr/2000/rec-xml-20001006! http://www.w3.org/xml/xml-v10-2e-errata 2 XML vs. SGML y HTML HTML simplifica SGML limitándose a un vocabulario de etiquetas específico, con la intención de describir la visualización de los datos. HTML es una aplicación SGML, uno de los muchos vocabularios que se pueden definir usando SGML (otros son TEI, DocBook, ATA 2100, MIL-STD-38784). XML simplifica SGML eliminando sus opciones sintácticas, permitiendo describir una estructura abstracta de los datos usando un vocabulario de etiquetas a medida. XML es una evolución de SGML, una nueva forma de definir vocabularios cuyo análisis sintáctico sea eficiente. XHTML es una redefinición de HTML usando XML en vez de SGML. 3 por qué es necesario XML? Originalmente HTML era un lenguaje de marcado puramente basado en contenido. Esto fue así hasta que Netscape añadió las etiqueta <img> y <blink>, Microsoft añadio también sus propias etiquetas, y a partir de ese momento HTML fue un caos que mezclaba marcado con presentación. Los navegadores son demasiado generosos, se tragan todo lo que se parezca a un documento HTML. HTML esta predefinido no se puede adaptar a nuestras necesidades. Las etiquetas HTML no describen el contenido de un documento. XML proporciona los medios para inventarse las etiquetas que necesitamos en cada momento, y para decir al visualizador como queremos que se muestren estas etiquetas. Un visualizador no necesita saber de antemano los múltiples vocabularios de etiquetado existentes. En vez de eso, averigua el vocabulario que usa un documento a través de la DTD de ese documento. Las instrucciones detalladas de cómo mostrar el contenido del documento se proporcionan en una hoja de estilo separada que se asocia al documento. 4
Objetivos de diseño Un primer ejemplo 1. XML debe ser utilizable directamente sobre internet. 2. XML debe soportar una amplia variedad de aplicaciones. 3. XML debe ser compatible con SGML. 4. Debe ser fácil escribir programas que procesen documentos XML. 5. El número de características opcionales en XML debe ser mantenido en un mínimo, idealmente cero. 6. Los documentos XML deben ser legibles por un humano y razonablemente claros. 7. El diseño de XML debe ser preparado rápidamente. 8. El diseño de XML debe ser formal y conciso. 9. Los documentos XML deben ser fáciles de crear. 10.La brevedad en la marcación es de mínima importancia. 11.Esta especificación, junto con los estándares asociados (Unicode and ISO/IEC 10646 para caracteres, Internet RFC 1766 para las marcas de identificación de lenguaje, ISO 639 para los códigos de nombre de lenguaje, ISO 3166 para los códigos de nombre de país), provee toda la información necesaria para entender XML v 1.0 y construir programas de computador que lo procesen. <B>Reunión <EM>urgente</EM> </B> <UL> <LI>Asistentes: Marcos Alfayate, Carlos López, César Osorio <LI>Lugar: Despacho dirección <LI>Inicio: 12:15 <LI>Asunto: Convalidaciones ITIG </UL> <reunion urgencia="alta"> <asistentes> Marcos Alfayate, Carlos López, César Osorio </asistentes> <lugar> Despacho de dirección </lugar> <inicio>12:15</inicio> <asunto> Convalidaciones ITIG </asunto> </reunion> 5 6 Tecnologías relacionadas Aplicaciones XML En torno a XML han surgido un gran número de tecnologías. Unas totalmente innovadoras, otras adaptadas del mundo HTML:! Las hojas de estilo en cascada: CSS (Cascading Style Sheets).! Los localizadores e identificadores universales de recursos: URLs y URIs (Uniform Resource Locators y Uniform Resource Indentifiers).! Los conjuntos de caracteres Unicode.! El lenguaje de estilo extensible: XSL (extensible Style Language).! El lenguaje XPath.! Los enlaces XLink entre documentos, y referencia a partes específicas de un documento con los punteros XPointer.! La API SAX (Simple API for XML).! El modelo de objeto de documento DOM. Los vocabularios definidos usando XML reciben el nombre de aplicaciones XML. Algunas aplicaciones: http://www.xml.org/xmlorg_registry/index.shtml! XHTML: replanteamiento de HTML 4.0 usando sintaxis XML.! MathML: lenguaje para el marcado de notaciones matemáticas.! VoxML: lenguaje para la respuesta vocal automatizada.! CML (Chemical Markup Language)! SVG (Scalable Vector Graphics)! RDF (Resource Description Framework)! XSLT (extensible Style Language Transformations)! SMIL (Synchronized Multimedia Integration Language)! XQL (XML Query Language)! CDF (Channel Definition Format) 7 8
<?xml version="1.0" standalone="yes"?> <SALUDO> < > Instrucción de procesado (PI): decláración XML. Hola mundo! Comienzan con <? y finalizan con?> </SALUDO> Elemento SALUDO Tienen un nombre y unos datos Etiqueta de inicio En la declaración XML los datos aparecen como pares atributo-valor: Contenido version: específica la versión de XML que Etiqueta de fin se esta usando. standalone: nos dice si el documento esta al completo en un único fichero o si necesita importar el contenido de otros ficheros <COSA> Hola mundo!</cosa> <P> Hola mundo!</p> <DOCUMENTO> Hola mundo!</documento> 9 Asignando significado a las etiquetas Las etiquetas de marcado pueden tener tres tipos de significado: estructural, semántico o de estilo.! La estructura divide los documentos en un árbol de elementos. Los nombres de las etiquetas no tienen relevancia desde el punto de vista estructural.! La semántica relaciona los elementos individuales con el mundo real (el universo del discurso) que esta fuera del propio documento. Existe en la mente del autor, del lector o del programa que los genera o lee.! El estilo específica como debe ser mostrado un elemento. En XML el significado de estilo se aplica a través de las hojas de estilo. 10 <?xml version="1.0" encoding="iso-8859-1" standalone="no"?> <?xml-stylesheet href="receta.css" type="text/css"?> <!DOCTYPE receta SYSTEM "receta.dtd" [ <!ENTITY comer "Bon appétit! "> ]> <receta tipo="postre" tiempoprep="15" comensales="4"> <titulo>tarta de queso</titulo> <lista-ingredientes> <item>3 yogures naturales</item> <item>3 huevos</item> <item>una cucharada de maicena</item> <item>1 tarrina de crema de queso</item> <item>6 cucharadas de azúcar</item> </lista-ingredientes> <preparacion> <paso necesario="no">tener a mano todos los ingredientes, la batidora y el recipiente para la tarta.</paso> <paso>batir todos los ingredientes.</paso> <paso>verter en un molde previamente caramelizado y cocer durante 13 minutos en el microondas a máxima potencia.</paso> <paso necesario="no">servir cubierta de mermelada.</paso> <paso necesario='no'>&comer;</paso> </preparacion> </receta> 11 <?xml version="1.0" encoding="iso-8859-1" PI para asociar hoja de estilo standalone="no"?> <?xml-stylesheet href="receta.css" type="text/css"?> <!DOCTYPE receta SYSTEM "receta.dtd" [ <!ENTITY comer "Bon appétit! "> ]> <receta tipo="postre" tiempoprep="15" comensales="4"> Declaración de tipo de documento <titulo>tarta de queso</titulo> <lista-ingredientes> Elemento raíz <item>3 yogures naturales</item> <item>3 huevos</item> <item>una cucharada de maicena</item> Referencia a DTD externa <item>1 tarrina de crema de queso</item> DTD interna <item>6 cucharadas de azúcar</item> </lista-ingredientes> <preparacion> <paso necesario="no">tener a mano todos los ingredientes, la batidora y el recipiente para la tarta.</paso> <paso>batir todos los ingredientes.</paso> <paso>verter en un molde previamente caramelizado y cocer durante 13 minutos en el microondas a máxima potencia.</paso> <paso necesario="no">servir cubierta de mermelada.</paso> <paso necesario='no'>&comer;</paso> </preparacion> </receta> 12
Un ejemplo de DTD (receta.dtd) <!ELEMENT receta (titulo, lista-ingredientes, preparacion)> <!ATTLIST receta tipo CDATA #IMPLIED comensales CDATA #IMPLIED tiempoprep CDATA #IMPLIED > <!ELEMENT titulo (#PCDATA)> Declaración de elemento <!ELEMENT lista-ingredientes (item+)> <!ELEMENT item Nombre (#PCDATA)> de elemento Modelo de contenido <!ELEMENT preparacion (paso+)> <!ELEMENT paso (#PCDATA)> <!ATTLIST paso necesario (si no) "si"> Un ejemplo de DTD (receta.dtd) <!ELEMENT receta (titulo, lista-ingredientes, Declaración de preparacion)> atributos <!ATTLIST receta Nombre de elemento tipo CDATA #IMPLIED comensales CDATA #IMPLIED tiempoprep CDATA #IMPLIED > <!ELEMENT Nombre titulo de (#PCDATA)> Tipo o Palabra atributos lista de valores clave o valor por <!ELEMENT lista-ingredientes defecto (item+)> <!ELEMENT item (#PCDATA)> <!ELEMENT preparacion (paso+)> <!ELEMENT paso (#PCDATA)> <!ATTLIST paso necesario (si no) "si"> 13 14 Documentos bien construidos Documentos válidos Los requisitos para poder decir que un documento es un documento bien construido son:! Deberá tener una entidad de documento en el que se hallen todos los demás elementos.! Todo elemento deberá tener una etiqueta de inicio y su correspondiente etiqueta de cierre, o una sola etiqueta vacía.! Todos los elementos deberán estar correctamente anidados.! Todos los valores de atributos deberán ir entre comillas (simples ', o dobles ").! Todas las entidades que se utilicen deberán declararse en la DTD (interna o externa). 15 Los cuatro requisitos principales para que un documento sea considerado como un documento válido son:! El documento debe estar bien construido.! El nombre del elemento raíz del documento debe coincidir con el nombre de la declaración de tipo de documento.! El documento debe tener una DTD que declare todos los elementos, atributos y entidades que se utilicen en el documento. Puede tratarse de un subconjunto interno de DTD, un subconjunto externo de DTD, o una combinación de ambos.! El documento debe adherirse a la gramática que establezca la DTD. Todos los documentos DTD válidos están bien construidos, pero no todos los documentos bien construidos son válidos. 16
<?xml version="1.0" encoding="iso-8859-1" standalone="no"?> <?xml-stylesheet href="rec.html.xsl" type="text/xsl"?> <!DOCTYPE receta SYSTEM "receta.dtd" [ <!ENTITY comer "Bon appétit!"> ]> <receta tipo="postre" tiempoprep="15" comensales="4"> Declaración de entidad interna <titulo>tarta de queso</titulo> <lista-ingredientes> Nombre de la entidad <item>3 yogures naturales</item> <item>3 huevos</item> <item>una cucharada de maicena</item> Texto de reemplazo de la entidad <item>1 tarrina de crema de queso</item> <item>6 cucharadas de azúcar</item> </lista-ingredientes> <preparacion> <paso necesario="no">tener a mano todos los ingredientes, la batidora y el recipiente para la tarta.</paso> <paso>batir todos los ingredientes.</paso> <paso>verter Uso de entidad en predeclarada un molde "caramelizado" y cocer 13 minutos en Referencia el microondas de carácter a máxima ; potencia.</paso> <paso necesario="no">servir cubierta de mermelada.</paso> Referencia <paso necesario='no'>&comer;</paso> de entidad comer; </preparacion> </receta> 17 Entidades: Qué son? Las entidades son unidades de almacenamiento que contienen texto o datos binarios. Definen la estructura física del documento (mientras que los elementos describen la estructura lógica). Pueden usarse para combinar múltiples fichero y otras fuentes de datos para crear un documento XML único. Algunos tipos de datos físicos que podríamos asociar con un nombre de entidad son:! Una cadena de texto.! Una sección de la DTD.! Una referencia externa a un archivo que contiene texto XML.! Una referencia externa a un archivo que contiene datos binarios. 18 Entidades: Cómo identificarlas? Entidades: Cómo se usan? Las entidades se identifican por un nombre único, pero existen dos entidades particulares sin nombre (entidades no declaradas):! La entidad de documento: es la entidad de nivel superior en un documento. Contiene todo el documento.! El subconjunto externo de la DTD (el subconjunto interno de la DTD no se considera una entidad). La mejor manera de comprender las entidades consiste en valorar el almacenameinto físico del código o datos en cuestión.! Si el código o datos XML están físicamente ubicados en un emplazamiento separado, se tratará de una entidad.! Si el código o datos se declaran por medio de una declaración de entidad obviamente se tratará de una entidad. Para incluir una entidad en el documento se usa una referencia de entidad o como valor de un atributo de tipo ENTITY. Existen un conjunto de referencias de entidad predeclaradas:! " (")! < (<)! ' (')! > (>)!"& (&) También es posible usar referencias de carácter, con dos sintaxis:! referencia decimal: &#Num;! referencia hexadecimal: &#xnum; 19 20
Entidades: Tipos Atendiendo a donde pueden ser referenciadas:! entidades generales: tanto en el documento como en la DTD.! entidades de parámetro: sólo en la DTD. Atendiendo a donde se encuentra su texto de reemplazo:! entidades internas: en la propia declaración.! entidades externas: en un fichero externo. Atendiendo a como se usan:! entidades analizadas sintácticamente.! entidades no analizadas sintácticamente. Algunas combinaciones de tipo de entidad no tienen sentido. De las ocho sólo cinco son válidas:! Entidades generales internas.! Entidades generales externas analizadas.! Entidades no analizadas.! Entidades de parámetro internas.! Entidades de parámetro externas. 21 <?xml version="1.0" encoding="utf-8" standalone="no"?> <?xml-stylesheet href="rec.html.xsl" type="text/xsl"?> <!DOCTYPE rec:receta SYSTEM "recetans.dtd"> <rec:receta tipo="postre" tiempoprep="15" comensales="5" xmlns:rec = "http://pisuerga.inf.ubu.es/cgosorio/recipe" > <rec:titulo>tarta de queso</rec:titulo> <rec:lista-ingredientes>... <rec:item>3 huevos</rec:item> <rec:item>una cucharadita de maicena</rec:item> <rec:item>1 tarrina de crema de queso</rec:item> <rec:item>6 cucharadas de azucar</rec:item> </rec:lista-ingredientes> <rec:preparacion> <rec:paso necesario="no">tener a mano todos los ingredientes, la batidora y el recipiente para la tarta.</rec:paso> <rec:paso>batir todos los ingredientes.</rec:paso>... <rec:paso necesario="no">&acomer;</rec:paso> </rec:preparacion> </rec:receta> 22 <?xml version="1.0" encoding="utf-8" standalone="no"?> <?xml-stylesheet href="rec.html.xsl" type="text/xsl"?> <!DOCTYPE rec:receta SYSTEM "recetans.dtd"> <rec:receta tipo="postre" tiempoprep="15" comensales="5" xmlns:rec = "http://pisuerga.inf.ubu.es/cgosorio/recipe" > <rec:titulo>tarta de queso</rec:titulo> Declaración de espacio de nombres <rec:lista-ingredientes>... Préfijo del espacio de nombres <rec:item>3 huevos</rec:item> URI del espacio de nombres <rec:item>una Nombre completo cucharadita de maicena</rec:item> <rec:item>1 tarrina de crema de queso</rec:item> <rec:item>6 cucharadas de azucar</rec:item> </rec:lista-ingredientes> Préfijo Nombre local <rec:preparacion> <rec:paso necesario="no">tener a mano todos los ingredientes, la batidora y el recipiente para la tarta.</rec:paso> <rec:paso>batir todos los ingredientes.</rec:paso>... <rec:paso necesario="no">&acomer;</rec:paso> </rec:preparacion> </rec:receta> 23 Espacio de nombres Permiten mezclar en un mismo documento XML etiquetas procedentes de distintos vocabularios XML. Se identifican por un Unique Resource Identifier (URI que pueden ser los conocidos URLs o los menos frecuentes URNs). El URI del espacio de nombres es simplemente una cadena que se escoge para que sea diferente de cualquier otra URI de espacio de nombres: no necesita que apunte a nada existente. Cada espacio de nombres usado en un documento se asocia con una abreviatura que se usa como prefijo de los nombres. No importa el prefijo que se escoja, el nombre real del elemento o del atributo esta determinado solamente por el URI de su espacio de nombres, y por su nombre local. 24
Espacio de nombres Un préfijo para un espacio de nombres se declara usando un seudo atríbuto de proposito especial dentro de la etiqueta del elemento: xmlns:{prefijo} = "{URI de espacio de nombres} Para los nombres de los elementos también se puede usar un URI de espacio de nombres por defecto, que se asocia con todos los elementos sin préfijo. Sin embargo, el URI del espacio de nombres por defecto no es de aplicación a los nombres de atributos sin préfijo. El espacio de nombres por defecto se declara: xmlns = "{URI de espacio de nombres}" 25 <?xml version="1.0" encoding="iso-8859-1" standalone="no"?> <!DOCTYPE agenda PUBLIC "-//cgosorio//dtd agenda//es" "http://www.ubu.es/dtd/agenda.dtd" > <agenda> <contacto> <nombre>césar Ignacio</nombre> <apellidos>garcía Osorio</apellidos> <telefono>34947258989</telefono> <email>cgosorio@ubu.es</email> <universidad>burgos</universidad> <!-- Por si algún día tengo amnesia --> </contacto> <![CDATA[ <!-- todo este contacto se ignora--> <contacto> <nombre>juan David</nombre> <apellidos>diez Tascón</apellidos> <telefono>0441189586222</telefono> <fax>0441189597842</fax> <empresa sector="hotelero"> Renaissance Reading Hotel </empresa> </contacto> ]]> </agenda> 26 <?xml version="1.0" encoding="iso-8859-1" standalone="no"?> <!DOCTYPE agenda PUBLIC "-//cgosorio//dtd agenda//es" "http://www.ubu.es/dtd/agenda.dtd" > <agenda> <contacto> <nombre>césar Ignacio</nombre> Identificador externo <apellidos>garcía Osorio</apellidos> <telefono>34947258989</telefono> Identificador público <email>cgosorio@ubu.es</email> <universidad>burgos</universidad> Identificador de sistema <!-- Por si algún día tengo amnesia --> Comentario </contacto> <![CDATA[ <!-- todo este contacto se ignora--> <contacto> <nombre>juan David</nombre> <apellidos>diez Tascón</apellidos> <telefono>0441189586222</telefono> <fax>0441189597842</fax> <empresa sector="hotelero"> Renaissance Reading Hotel </empresa> </contacto> ]]> </agenda> Codificación de carácteres Sección CDATA 27 Codificación de carácteres Una codificación de caracteres asocia un número con cada carácter. Las codificaciones tipo ASCII son suficientes para idiomas como el inglés que no tiene acentos y otros signos de puntuación. Para idiomas como el español podría usarse codificaciones como la ISO 8859-1 Latin-1, o la MacRoman. Pero para muchos idiomas de origen asiático, con hasta 80000 ideogramas, esto no es suficiente. Estas codificaciones también dan problemas cuando trabajamos con documentos en varios idiomas, o compartimos ficheros con personas que usan un sistema de codificación diferente. Para solucionar estos problemas surgió Unicode, que usa dos bytes para la codificación de caracteres. Una de sus variantes es UTF-8, una versión comprimida de Unicode, que usa un byte para los caracteres más frecuentes y hasta tres para los menos usados. XML se pensó desde el principio para utilizar Unicode. 28
Identificadores externos Comentarios Se usan para hacer referencia a un fichero externo. Se usan para! Hacer referencia a la DTD! Hacer referencia a las entidades! En las notaciones Dos formatos! Identificador de sistema SYSTEM URI! Identificador público PUBLIC identificador-público URI Con el identificador público un procesador XML puede utilizar un catálogo para determinar un URI. Si no dispone de este sistema usará el URI suministrado. Los comentarios XML son idénticos a los de HTML. Comienzan con la secuencia <!-- y finalizan con -->. Cualquier dato entre <!-- y --> es ignorado por el procesador XML. Hay que seguir las siguientes reglas cuando se usan comentarios:! No pueden comenzar antes de la declaración XML, que debe ser siempre la primera línea de un documento.! No pueden aparecer dentro de una etiqueta.! Se pueden usar para rodear y esconder etiquetas.! En su contenido no pueden aparecer dos guiones consecutivos (--).! Los comentarios se pueden utilizar en cualquier parte de un documento XML en el que puedan aparecer datos de carácter analizados sintácticamente. Las secciones de datos de caracteres no analizados sintácticamente, secciones CDATA constituyen la única excepción a esta regla. 29 30 Secciones CDATA Resumen documentos XML Las secciones CDATA se usa cuando se quiere que todo el texto sea interpretado exclusivamente como caracteres y no como marcado. Comienzan con la secuencia <![CDATA[ y finalizan con ]]>. El único texto prohibido dentro de una sección CDATA es el delimitador de cierre de sección CDATA: ]]>. Dentro de las secciones CDATA las etiquetas XML son interpretadas como datos de carácter, sin ningún significado de marcado. Los comentarios pueden aparecer dentro de una sección CDATA pero no actúan como comentarios. Es decir, tanto el comentario como sus delimitadores son tenidos en cuenta. 31 Los docuemntos XML comienzan con la instrucción de procesado (<?xml version="1.0"...?>). Existen siete tipos de etiquetas en un documento XML:! Las instrucciones de procesado (<?nombre...?>)! La declaración de tipo de documento (<!DOCTYPE...>)! Las etiquetas de elementos (<elto>...</elto>)! Las referencias de carácter (ÿ ÿ)! Las referencias de entidad (' %entpar;)! Los comentarios (<!--... -->)! Las secciones de datos de carácter (<![CDATA[... ]]>) En la DTD tenemos:! Declaración de elementos (<!ELEMENT...>)! Declaración de atributos (<!ATTLIST...>)! Declaración de entidades y notaciones (<!ENTITY..><!NOTATION...>) 32