las personas como para ordenadores. Los datos son descritos mediante lenguaje de marcado XML utiliza un lenguaje de marcado de manera similar a como lo hace HTML, por lo que resultar sencillo de entender para aquellas personas ya familiarizadas con dicha lenguaje. As, un elemento en XML sera de la forma: <etiqueta atributo=valor_atributo>dato</etiqueta> De esta forma un dato puede ser marcado mediante una etiqueta y detallado por medio de atributos. Estructura los datos en forma de rbol XML permite la estructuracin de los datos de manera jerrquica anidndolos dentro de otros. En virtud a la especificacin XML existir un nico elemento raz del que colgarn el resto de elementos que a su vez pueden tener otros elementos hijo. La coleccin de todos los elementos anidados a partir del elemento raz se le conoce como documento XML. Se usa para crear nuevos lenguajes Muchos lenguajes que se usan en Internet han sido creados con XML. Algunos ejemplos: XHTML WSDL para describir servicios web WAP y WML son lenguajes de marcado para dispositivos mviles RSS son lenguajes para servicios de suscripcin de noticias RDF y OWL son para describir recursos y ontologas SMIL es para aplicaciones multimedia para la web
[snippets/ejemplo_2_1_1.txt]
capaz de almacenar tambin la descripcin del formato. Aunque ahora estn extendidos los editores WYSIWYG (What You See Is What You Get, Tal como lo ves es como queda), antes se determinaba la presentacin mediante marcas de formato introducidas por el autor. Ejemplos de marcas seran Comenzar negritas, tamao de fuente: 16px, Salto de lnea, Tabla, etc. A parte de las marcas de formato existan otras marcas conocidas como etiquetas o cdigos que daban sentido al documento, por ejemplo precio, fecha, ttulo. Este tipo de marcas facilita a los sistemas informticos la compresin de los documentos. GML A finales de los 60, la empresa IBM encarg a Charles F Goldfard que diseara un sistema estndar para la gestin y edicin de documentos, ya que muchos sistemas de IBM no podan comunicarse entre s, debido al distinto sistema de descripcin que utilizaban. Charles Goldfard, auxiliado por Ed Mosher y Ray Lorie, cre un lenguaje nico de marcado que permitiese entenderse a los diferentes documentos generados por distintos sistemas, reuniendo en una misma etiqueta el formato y la descripcin del contenido. A este desarrollo se le denomin marcado generalizado, siendo una alternativa al marcado de formato y al WYSIWYG. La idea del marcado generalizado era que cada etiqueta sirviese tanto para describir el aspecto exterior del texto (el formato), como para indicar su contenido (el tipo de informacin o dato), por lo que se dise un sistema muy completo y general, capaz de dar solucin a cualquier tipo de documento. La solucin utilizaba etiquetas de descripcin de datos relacionadas con plantillas de estilos de formato, consiguiendo as los dos objetivos. A este "lenguaje" se le denomin GML (Generalized Markup Language, lenguaje de marcado generalizado), siglas que curiosamente coinciden con las iniciales de sus autores (Goldfarb, Mosher, Lorie). SGML Hasta 1974 se continu el desarrollo del GML, y entre 1978 y 1986, el propio Goldfarb coordin el equipo tcnico que desarroll la norma internacional ISO 8879, que describe lo que desde entonces se conoce como SGML (Standard Generalized Markup Language, lenguaje de marcado generalizado estndar). Este equipo sigue desarrollando el SGML y las normas asociadas al mismo. HTML
En el ao 1989, el investigador del CERN (Suiza) Tim Berners-Lee, se propuso poner fin a la gran dificultad que exista entre los investigadores para publicar sus documentos, decidindose por un sistema basado en el hipertexto, que permite acceder a una determinada informacin ms directamente que un tpico sistema secuencial. Otro investigador llamado Anders Berglund, que conoca el SGML, le aconsej que lo utilizase para su proyecto. Tim denomin HTML (Hiper-Text Markup Language, lenguaje de marcado de hipertexto) al lenguaje que cre, que fue terminado en un corto periodo de tiempo. Tambin dio el nombre de World Wide Web (telaraa de mbito global) a su sistema de hipertexto para la Red Informtica Mundial. La sencillez de los dos procesos ha sido la clave principal de su xito. Aunque HTML era un subconjunto de SGML, y por lo tanto cumpla los objetivos de los lenguajes de marcado generales (siempre en la direccin de Internet), a travs de su evolucin ha ido decantndose hacia el lado de los lenguajes de marcas dirigidos al formato, perdiendo parte de su utilidad. Entre la permisividad sobre el cdigo HTML que incorporan los visualizadores ms utilizados, la proliferacin de aplicaciones de autor que generan cdigo HTML sin depurar, la existencia de etiquetas propietarias no soportadas por las normas, y la tendencia de muchos usuarios a utilizar el HTML como un lenguaje de formato, se lleg a un punto difcil de controlar. XHTML Para intentar superar el punto lmite al que se haba llegado con el HTML, el W3C decidi apoyarse en el SGML para presentar una buena solucin al formateo de los documentos, desarrollando las normas que regulan el lenguaje de hojas de estilos para HTML que se denomina CSS (Cascading Style Sheets, hojas de estilo en cascada), capaz de especificar el formato de los documentos HTML, sin interferir en su marcado especfico, y tambin, ideando un mecanismo simple, conocido como XHTML (Extensible Hyper-Text Markup Language, lenguaje de marcado de hipertexto extensible) que permita incorporar abstracciones al HTML. XML Esta solucin solo tena un carcter provisional (aunque es probable que se utilice en mucho tiempo), pues en el fondo del asunto, se necesitaba un nuevo entorno que permitiese crecer y dar soluciones a las muchas y variadas necesidades que estaba pidiendo la Web. El resultado ha sido un desarrollo del W3C, aprovechando las principales ventajas del magnfico estndar SGML (del que es un subconjunto) y basado en la sencillez de la Web, que tiene el nombre de XML
(Extensible Markup Language, lenguaje de marcado extensible). Desde el 10 de febrero de 1998 est disponible la primera versin de la recomendacin del XML, a partir de la cual se estn desarrollando mltiples herramientas, aplicaciones, utilidades y normas adicionales, que poco a poco van imponiendo este potente entorno entre los profesionales del diseo web, sobre todo, desde la salida de la versin 5 de Internet Explorer, el visualizador web de Microsoft. Hay que recordar que XML no es un simple lenguaje de marcas, sino ms bien una normativa capaz de crear otros lenguajes de marcas, o sea, un "meta-lenguaje" de marcas. Est diseado para que pueda ser ejecutado desde cualquier plataforma, sistema operativo o entorno de trabajo. Adems de permitir el control de los proyectos de publicacin de informacin, tambin es capaz de gestionar el intercambio de datos por Internet. Las normas necesarias para el desarrollo de XML van publicndose poco a poco, siendo necesaria la conexin al W3C para estar al da en este constante proceso de evolucin.
ningn otro elemento. 3. Para el resto de elementos, si la etiqueta de comienzo est en el contenido de algn otro elemento, la etiqueta de fin est en el contenido del mismo elemento. Es decir, los elementos delimitados por etiquetas de principio y final se anidan mutuamente de forma adecuada. Veamos algn ejemplo prctico de esta regla. El siguiente documento es incorrecto por la Regla de Documento 1: [snippets/ejemplo_2_1_9_1_ko.txt] Pero con un elemento si la cumplira: [snippets/ejemplo_2_1_9_1_ok.txt] El siguiente documento es incorrecto por la Regla de Documento 2: [snippets/ejemplo_2_1_9_2_ko.txt] En cambio este documento si cumple la Regla de Documento 2 ya que tiene un nico elemento raz: [snippets/ejemplo_2_1_9_2_ko.txt] El siguiente documento es incorrecto por la Regla de Documento 3 por estar los elementos incorrectamente anidados: [snippets/ejemplo_2_1_9_3_ko.txt] En el siguiente ejemplo la anidacin de los elementos es correcta: [snippets/ejemplo_2_1_9_3_ko.txt] Ficheros XML Los ficheros o archivos XML son archivos de texto que contienen un documento XML. Para facilitar su identificacin usan la extensin .xml, por ejemplo: mi-archivo.xml Podemos editar estos archivos con cualquier editor de texto normal como puede ser el Bloc de notas o Notepad, gedit, Word, etc. Sin embargo existen herramientas orientadas a programadores con multitud de funciones que ayudan a la lectura, creacin, mantenimiento y validacin de los ficheros XML y sus correspondientes DTD. Veremos algunos ejemplos en el apartado 2.1.10
Prlogo Los documentos XML pueden empezar con un prlogo, en el que esencialmente se define: Una declaracin XML Una declaracin de tipo de documento Ambas partes son opcionales, pero en el caso de que aparezcan las dos, la declaracin XML tiene que aparecer antes que la declaracin de tipo de documento. Declaracin XML [snippets/ejemplo_2_1_5_1.txt] Se coloca al principio del documento y permite indicar: La versin de XML usada, por el momento la 1.0 Informacin sobre el tipo de codificacin de caracteres que estamos utilizando. En nuestro caso es el cdigo ASCII de 7 bits, que es un subconjunto del cdigo Unicode denominado UTF-8. No hubiese sido necesario declararlo, ya que es la establecida por defecto. Declaracin de tipo de documento [snippets/ejemplo_2_1_5_2.txt] En la declaracin del tipo de documento, asociamos la Definicin del Tipo de Documento o DTD respecto de la cual construimos el documento. Una DTD determina cmo se construye un documento XML, indicando que etiquetas, atributos y entidades se pueden usar y de qu forma se pueden emplear. Veremos sus uso en profundidad en la seccin 2.3 de este curso. En el ejemplo anterior se declara implcitamente en el propio documento XML, aunque tambin puede hacerse externa al documento e incluso de una forma mixta. Si la hubisemos escrito en un fichero "ejemplo.dtd" tendramos que referenciarla de la siguiente manera: [snippets/ejemplo_2_1_5_3.txt]
Etiqueta de inicio representada como <nombre_elemento> Etiqueta de contenido, contenido o dato Etiqueta de fin como </nombre_elemento>
Por ejemplo: <name>Carlos Guevara</name> En general el nombre de los elementos puede establecerse libremente teniendo en cuenta que: Las etiquetas de inicio y fin deben coincidir Son sensibles a maysculas y minsculas El primer carcter tiene que ser alfabtico o un guin bajo _ Los siguientes caracteres deben ser alfabticos, numricos, guin bajo _, punto . o guin - Entre los elementos < y </ y el nombre de la etiqueta no pueden existir espacios en blanco. [snippets/ejemplo_2_1_6_1.txt] Datos o contenido del elemento Por su parte el contenido del elemento puede ser cualquier texto, nmero o signo de puntuacin, e incluso otros elementos como se ve en el siguiente ejemplo: [snippets/ejemplo_2_1_6_2.txt] Es posible anidar elementos indefinidamente segn nos convenga. En el ejemplo se puede ver que el elemento nombre se encuentra dentro del elemento director, que a su vez est dentro del elemento empresa que es el elemento raz del documento XML. Para facilitar la legibilidad y ahorrar cdigo, si un elemento no tiene contenido se puede usar la etiqueta de elemento vaco <nombre_elemento/>, en el ejemplo <apellido2/>. Atributos Para definir mejor el dato los elementos XML pueden tener atributos en pares de nombre/valor tal y como sucede en HTML. En XML los valores de los atributos siempre tienen que ir entre comillas dobles. Adems, ningn nombre de atributo puede aparecer ms de una vez en la misma etiqueta de inicio o de elemento vaco.
[snippets/ejemplo_2_1_6_3.txt]
Segn esta tabla, si necesitamos que aparezca un signo de < dentro del contenido de un elemento de nuestro XML tenemos que usar la entidad de nombre lt, que dentro del contenido se escribir con la notacin indicada < tal y como se muestra en el siguiente ejemplo. [snippets/ejemplo_2_1_7_1.txt] Como veremos ms adelante en el punto 2.3 en XML es posible definir nuestras propias entidades y usarlas en nuestros documentos.
Secciones CDATA Los marcadores CDATA permiten definir secciones en las que podemos introducir el texto que queremos sin que sea interpretado por el procesador de XML. <![CDATA[ Aqui puedo poner lo que quiera que no ser interpretado, por ejemplo <hola></hola> ] ]> Las secciones CDATA empiezan con los caracteres "<![CDATA[" y terminan con "]]>". Dentro de ellos podemos colocar cualquier cosa ya que no va a ser interpretado, con la salvedad de la cadena que indica el final de CDATA, "]]>", y evitar as que el procesador al encontrrsela entienda que la seccin CDATA ya ha terminado.
frecuentemente con XML. Veamos a algunas de estas caractersticas. Sintaxis coloreada La mayora de editores multifuncin son capaces de colorear con diversos colores los diferentes componentes de un XML de manera que se facilita su lectura. As. se distinguen a simple vista las etiquetas, atributos, contenidos, secciones CDATA, comentarios e incluso las declaraciones. Los editores especializados tambin ofrecen colorear la sintaxis de los archivos DTD. Autoindentacin y desplegado La indentacin o sangra significa desplazar los elementos haca la derecha conforme se van anidando los elementos, de manera que se vea claramente que unos elementos estn dentro de otros. Es muy til tambin para documentos muy grandes poder plegar y desplegar todos los elementos hijos de un elemento concreto. Comprobacin de si est bien formado La mayora de editores que colorean el cdigo validan tambin si el XML est correctamente formado, marcando los posibles errores bien con colores fuertes o usando algn tipo de indicador. Validacin por DTD Si un documento XML tiene asociada una definicin de tipo de documento o DTD el editor puede comprobar si el XML que estamos construyendo respeta dicha DTD, indicando los posibles errores. Sugerencias a partir de la DTD Ms an, ciertos editores permiten editar un XML y que a la hora de escribir etiquetas y atributos nos sugieran las opciones vlidas contempladas en la DTD, facilitando as su uso y la velocidad de creacin de los mismos. Generacin automtica de DTD a partir de un XML Mediante esta funcionalidad es posible crear automticamente una DTD a partir de un XML que tengamos. Esto es muy til porque es ms sencillo pensar en trminos de XML y organizar la informacin a partir de casos conocidos, que construir de buenas a primeras el DTD. Habitualmente la DTD generada requiere de algunas ajustes, pero si el XML est bien estructurado nos ahorrar mucho trabajo. Algunos Editores XML En el mercado existen multitud de editores XML, veamos los que ms
relevancia han cosechado en los ltimos tiempos: EditiX Es muy prctico, funcional e intuitivo. Est escrito en Java por lo que funcionar en la mayora de sistemas operativos con la Java Runtime Environment instalada. Permite crear documentos basados en mltiples estndares (XSL, XHTML, W3C XML, XML, Schema, XSL-FO, etc.), y proporciona la posibilidad de crear y usar plantillas de diseo. Cuenta con una potente ayuda. Versin de pago con prueba gratuita de 30 das. Lo puedes encontrar en: http://www.editix.com/ OXygen OXygen es un editor XML basado tambin en Java con el que se pueden crear y editar documentos XML, XSL, TXT y DTD, con soporte para todas las particularidades del lenguaje XML. Resulta bastante flexible a la hora de editar cdigo, con soporte Unicode, cdigo de colores para los comandos de sintaxis, soporte para CSS, autocompletado de etiquetas XML y analizador de sintaxis, entre otras muchas posibilidades. Incorpora una interfaz de diseo ntido que hace ms cmodo la tarea de programacin, con soporte para drag-and-drop y permite previsualizar el trabajo tanto en formato XML como XHTML. Versin de pago con prueba gratuita de 30 das. Lo puedes encontrar en: http://www.oxygenxml.com/ Notepad ++ Es un Completo editor de programacin multilenguaje que te permite trabajar con diversos lenguajes (C, C++, Java, HTML, XML, PHP, JavaScript) de una forma muy cmoda y funcional. Tiene una interfaz muy clara y de diseo intuitivo, con soporte para abrir varios documentos al mismo tiempo, visualizar en ventana doble, cdigo de colores para los comandos, soporte para drag-and-drop y muchas otras funciones. El editor incluye adems una utilidad de zoom y te permite usar marcadores para moverte mejor dentro de los ficheros ms largos de cdigo. Notepad es gratis y libre bajo licencia GPL. Lo puedes descargar en: http://notepad-plus-plus.org/ XMLSpy
Tal vez sea la primera herramienta especializada en XML y todos sus derivados y sin duda, una de las ms completas. Permite la edicin de todo tipo de documentos XML, XSL, XML Schema, DTD y con ayudas para autocompletado, validacin, representacin visual en rbol de documentos, coloreado de sintaxis, etc. Versin de pago con prueba gratuita de 30 das. Lo puedes encontrar en: http://www.altova.com/xml-editor/ Otros editores XML o XMLPad de WMHelp (http://www.wmhelp.com/xmlpad3.htm) (gratuito) o XML Copy Editor (http://xml-copy-editor.sourceforge.net/) (gratuito; licencia GNU) o XMetaL (http://na.justsystems.com/) (comercial) o Stylus Studio (http://www.stylusstudio.com/) (comercial) o Liquid XML Studio (http://www.liquidtechnologies.com/xml-studio.aspx) (comercial; evaluacin de 30 das) o XMLmind XML Editor (http://www.xmlmind.com/xmleditor/) (comercial; versin Personal Edition gratuita, con funcionalidad reducida, en http://www.xmlmind.com/xmleditor/persoedition.html) o XMLwriter (http://xmlwriter.net/) (comercial) Entornos de desarrollo integrado Adems de estos editores ms o menos especializados los Entornos de Desarrollo Integrado o IDE suelen incluir soporte para el desarrollo con XML, generalmente por medio de plugins. Los IDE ofrecen en una nica aplicacin todas las herramientas que un programador puede necesitar para desarrollar sus aplicaciones Web como un depurador, un intrprete, un editor, un entorno de ejecucin, etc. Adems permite instalar nuevas herramientas y configurar el entorno a su medida mediante extensiones o plugins. Por ejemplo, los IDE ms conocidos por ser de cdigo abierto y por soportar mltiples lenguajes de programacin, incluyendo XML son: Eclipse IDE: http://www.eclipse.org/ NetBeans IDE: http://netbeans.org/
[snippets/empresa-to-html.xsl] Lo siguiente que necesitamos es un procesador XSLT. Hay navegadores web que lo llevan incorporado en sus versiones recientes, como es el caso de Firefox o Internet Explorer. Si abres con alguno de ellos el archivo empresa.xml vers el resultado de la transformacin realizada que mostrar algo as: Buenos das, Don Lluis Le apetece un caf? Que se correspondera con el HTML siguiente: [snippets/empresa.html] Cmo ha sucedido la transformacin? En primer lugar fijmonos en el documento XML origen, mediante la siguiente lnea se le indica que hoja de estilos XSLT hay que usar para la transformacin de manera similar a como se hara con una CSS externa: <?xml-stylesheet type="text/xsl" href="empresa-to-html.xsl"?> Ahora que el procesador XSLT sabe que hoja de estilos XSLT tiene que usar, vamos a ver que hace la hoja de estilos empresa-tohtml.xsl. Lo primero tiene que indicar que se trata de una hoja de estilos XSLT: <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> Despus hay que establecer qu tipo de documento va a generar la conversin, en este caso HTML y para eso se usa la siguiente instruccin: <xsl:output method="html"/> A partir de aqu definimos nuestras plantillas o templates usando la sentencia xsl:template. A grandes rasgos las plantillas XSLT permiten definir reglas de transformacin que se disparan cuando se produce cierta condicin en el procesamiento del documento de
entrada. En este caso mediante el atributo match=/ se indica al procesador XSLT que cuando estemos en el elemento raz del documento XML se ejecute la transformacin definida por la plantilla, devolviendo el HTML de la misma y ejecutando la sentencia: <xsl:value-of select="empresa/director/nombre" /> Dicha sentencia permite devolver el valor de todos los elementos nombre que se encuentren dentro de un elemento director y a su vez dentro de un elemento empresa; en nuestro ejemplo el valor es LLuis. Ms sobre XSLT En el apartado anterior hemos visto un ejemplo sencillo del lenguaje XSLT, sin embargo existen ms sentencias y estructuras de control para realizar transformaciones completjas. Si quieres profundizar ms puedes hacerlo a partir de los cursos y referencias de la seccin de enlaces.
2.2.2. XPath
Para transformar un documento XML es necesario algo ms que una hoja de estilos XSLT: necesitas designar claramente el elemento del documento que quieres transformar y cmo transformarlo. XPath es una recomandacin W3C de Noviembre de 1999 para designar partes concretas de un documento XML. API: Application Programming Interface o Interfaz de programacin de aplicaciones es el conjunto de funciones y procedimientos que ofrece una librera para ser utilizadas por otra aplicacin. XPath es por tanto un API que permite a XSLT designar partes de un documento XML para su transformacin. De hecho es una pieza fundamental de XSLT y ya lo hemos utilizado en el punto anterior: <xsl:value-of select="empresa/director/nombre" /> La expresin en negrita es una expresin de XPath. xPath modela un documento XML como un rbol de nodos y define un modo de calcular un valor de cadena para cada tipo de nodo. La unidad sintctica bsica en xPath es la expresin, que son evaluadas para producir un objeto del documento XML.
Expresiones de ruta XPath XPath utiliza expresiones para seleccionar nodos o conjuntos de nodos de un documento XML. Estas expresiones como la mostrada en el caso anterior se parecen mucho a las que se usan en los sistemas de carpetas tradicionales de los ordenadores, al fin y al cabo ambos forman un rbol de datos. La evaluacin de las expresiones tiene lugar respecto a un contexto (el punto de partida), este puede ser: - un nodo (nodo contextual) - dos nmeros enteros positivos que se corresponden a la posicin contextual y el tamao contextual Funciones Estndar de XPath XPath incluye mas de 100 funciones y operadores en su especificacin. Estas funciones se utilizan para valores de tipo cadena, valores numricos, comparaciones de fecha y hora, manipulacin de nodos, manipulacin de secuencias, valores booleanos y mucho ms. La sintaxis para la construccin de rutas es: nombreNodo Selecciona todos los nodos de nombre nombreNodo. / Selecciona el nodo raz o nodos hijo del nodo actual. Si la ruta empieza por / significa que se evala sobre el nodo raz, si no se evala sobre el nodo actual o contexto. // Selecciona todos nodos hijo, nieto... del nodo actual. . Selecciona el nodo actual. .. Selecciona el nodo padre del nodo actual. @ Selecciona atributos del nodo actual [ ] Selecciona nodos que cumplen una propiedad. Las expresiones entre [ y ] se suelen llamar predicados. * Selecciona cualquier nodo o atributo | Selecciona mltiples expresiones de forma simultnea Vamos a ver un ejemplo, supongamos que tenemos un documento XML de este tipo: <libros> <libro> <autor>Soren Kierkegaard</autor> <titulo>Fear and Trembling</titulo> <precio>50.0</precio>
</libro> <libro> <autor>Miguel de Unamuno</autor> <titulo>Niebla</titulo> <precio>40.0</precio> </libro> <libro> <autor>Miguel de Unamuno</autor> <titulo>La ta tula</titulo> <precio>23.0</precio> </libro> <libro> <autor>George Orwell</autor> <titulo>1984</titulo> <precio>20.0</precio> </libro> </libros> Y el cliente de turno nos pide un informe con: - los libros escritos por Miguel de Unamuno - los libros por debajo de 30 - los libros que contengan la palabra fear en el ttulo Hace tiempo, la solucin hubiera sido parsear el XML y buscar los elementos que cumplen las condiciones, bien, pues con xPath obtendremos la solucin mucho ms fcil, simplemente definiendo las expresiones y evalundolas en un script de PHP o JSP. /libros/libro[autor="Miguel de Unamuno"] /libros/libro[precio < 30.0] /libros/libro[contains(titulo,"Fear")]
2.2.3. XQuery
XQuery es un lenguaje de consulta diseado para colecciones de datos XML, de semntica similar al SQL que adems incluye alguna capacidad de programacin. XQuery utiliza expresiones XPath para acceder a determinadas partes del documento XML y aade expresiones similares a las usadas en SQL y conocidas como expresiones FLWOR. Las expresiones
FLWOR toman su nombre de los cinco tipos de sentencias de las que pueden estar compuestas: For Let Where Order by Return XQuery es idneo para extraer y manipular informacin de documentos XML, especialmente de aquellas fuentes de datos que puedan ser representadas por XML como bases de datos relacionales o documentos ofimticos. Tambin ofrece la capacidad de generar como resultado de la consulta otros documentos XML mediante constructores definidos como expresiones dentro del propio lenguaje. XQuery se basa en el modelo en rbol de la informacin contenida en el documento XML identificando 7 tipos distintos de nodo: elementos, atributos, nodos de texto, comentarios, instrucciones de procesamiento, espacios de nombres y nodos de documentos. Por el momento XQuery no incluye la capacidad de actualizar los documentos XML ni de realizar bsquedas de textos, aunque se est estudiando su posible incorporacin en prximas versiones de la especificacin. Veamos un ejemplo, partiendo del siguiente XML de nombre directorio-empresas.xml: [snippets/directorio-empresas.xml] El siguiente cdigo XQuery devuelve un listado HTML con todas las empresas y sus directores: [snippets/directores.xquery] Como se puede ver, Xquery hace uso de Xpath para seleccionar partes del documento XML: doc("directorio-empresas.xml")//empresa $empresa//director $empresa/nombre/text() Si quieres ampliar tus conocimientos de XQuery en la seccin de
2.2.5. XSL-FO
La recomendacin W3C de octubre de 2001 Extesible Stylesheet Language (XSL) Version 1.1 aglutina las dos especificaciones anteriores: XSLT como lenguaje para la transformacin de documentos XML XSL-FO como un vocabulario XML para especificar semnticas de formato El nombre oficial es por tanto XSL en vez de XSL-FO, y se usa XSLT
para referirse a las Transformaciones XSL. Este apartado se centra en el segundo punto XSL-FO (XSL Formatting Objects) u Objetos de Formato para XSL, es decir, es un lenguaje XML que permite definir sentencias que describen cmo se debe presentar un documento por pantalla, papel u otros medios. La unidad bsica en un documento XSL-FO es el Formatting Object y hacen referencia a pginas, prrafos, tablas, listas, etc. En el siguiente ejemplo tenemos un documento XSL-FO sencillo que aplica distintos formatos a la pgina del documento a visualizar. [snippets/ejemplo_xslfo.xsl] Existen dos vas por las que podemos aplicar formatos a los datos de un XML y obtener un documento XSL-FO: 1. Generar directamente un documento XSL-FO con los datos y la informacin de formato incrustada dentro del mismo. 2. Transformar un documento XML que slo contenga datos con una hoja de estilos XSLT que contenga la informacin de formato. En el segundo caso conseguimos independizar los datos de la presentacin, permitiendo tener varias hojas de estilo XSLT segn el uso que le quedamos dar a los datos, por ejemplo para distintos entornos o dispositivos. Una vez que tenemos el documento XSL-FO puede ser procesado con un programa llamado Procesador XSL-FO y obtener el documento final en distintos formatos. [imagen/2.2.5.1: arquitectura de XML] En el ejemplo anterior podemos ver una arquitectura de documentos XML donde se ven las dos posibles maneras de generar documentos XSL-FO. En rojo se muestra la generacin directa del documento XSL-FO a partir de los datos. La otra opcin es generar un documento XML de datos fuente para todos los procesos, lo que permite que a partir de l se realicen transformaciones XSLT para generar diferentes documentos segn los diferentes usos (XHTML, WAP, RSS, CSV, Servicios Web...) e incluso dotndole de informacin de formato mediante un XSL-FO.
El procesador XSL-FO podra generar a su vez documentos en mltiples formatos como PDF, DOCX o RTF.
Por tanto, un XML vlido siempre estar bien formado. Los editores XML especializados permiten tanto validar un XML contra una DTD como comprobar si estn bien formados. Procesador XML Un Parser XML o Procesador XML es un programa informtico capaz de interpretar un documento XML. Para ello trocea o parsea el documento en cachos pequeos con sentido como pueden ser las etiquetas, los atributos, los elementos o el contenido, creando una representacin interna del mismo. A partir de esta representacin un editor XML es capaz de realizar validaciones contra la DTD o comprobar si el documento XML est bien formado. Los Procesadores XML los podemos encontrar escritos multitud de lenguajes como Java, PHP, Ruby, C++, etc. Adems, la mayora de herramientas especializadas incluyen uno con el que realizar las validaciones de la DTD de un archivo XML as como que est bien formado.
[snippets/directorio-empresas-dtd-inline.XML] O en un archivo externo para poder ser usada por varios documentos XML, as que la podemos referenciar en el prlogo como: <!DOCTYPE nombre_elemento_raiz SYSTEM "archivo.dtd"> Veamos un ejemplo: [snippets/directorio-empresas-dtd.xml] Qu describe una DTD? Las DTD se emplean para determinar la estructura de un documento XML mediante etiquetas con las que describe: Elementos: indicando qu etiquetas puede contener el documento XML y el contenido de dichas etiquetas Atributos: qu atributos puede tener un elemento y los valores que puede tomar el atributo Estructura: el orden de las etiquetas dentro del documento y cmo se anidan Entidades: declaracin de entidades propias
vlidos: <actividad>comercializadora de alimentos</actividad> <actividad>10</actividad> <actividad>Actividades de tipo 10</actividad> Como DTD no permite distinguir entre valores numricos y no numricos, tendra que ser la aplicacin la que se encargase de dicha comprobacin en caso de ser necesaria. Modelo de contenido: elementos hijo Para definir que un elementos hijos dentro del modelo de contenido, hay que indicar el nombre del elemento hijo junto al orden de aparicin y el nmero de veces que puede aparecer.
Definiendo el orden de aparicin
Cuando un elemento puede contener varios elemento hijos es obligatorio especificar el orden de aparicin, bien separando los elementos con una coma , si queremos que el orden sea extrictamente el especificado o usando el caracter | para indicar que no importa el orden. Por ejemplo, con la siguiente definicin de tipo de documento se define que los elementos hijo del elemento empresa son exactamente los elemento director, actividad y nombre y siempre en ese orden: <!ELEMENT empresa (director,actividad,nombre)*> [snippets/ejemplo_2_3_3_1.xml] Para definir que el orden de aparicin no importa, lo haramos como: <!ELEMENT empresa (director|actividad|nombre)*> En resumen, dependiendo de cmo separemos dos elementos: , Aparecen en el orden especificado | Puede aparecer cualquiera de los dos primero
ello tenemos los siguientes operadores: * + ? Si no se indica Puede aparecer 0 o ms veces Puede aparecer 1 o ms veces Puede aparecer 0 o 1 vez Aparece una vez
En DTD no es posible indicar un nmero exacto de apariciones (por ejemplo 3 veces, o entre 2 y 6 veces, etc). Por ejemplo, para definir que que una empresa tiene una actividad, un nombre y cero o ms elementos director en cualquier orden, haramos: <!ELEMENT empresa (nombre, actividad, director*)> Podemos especificar un grupo mediante el uso de parntesis y aplicar cualquiera de los operadores anteriores sobre el mismo. Por ejemplo, para definir que una empresa puede tener cero o ms elementos nombre, actividad y director, en cualquier orden: <!ELEMENT empresa (director|actividad|nombre)*> Declaracin de atributos No vamos a profundizar mucho en la declaracin de atributos, sin embargo si que vamos a dar unos sencillo ejemplos para poder reconocer su definicin. Los atributos se definen como: <!ATTLIST nombre_elemento nombre_atributo tipo_atributo valor_por_defecto> Por ejemplo, si queremo definir un atributo forma_legal para el elemento empresa y que pueda tener los valores SA, SL y Coop haramos: <!ATTLIST empresa forma_legal (SA | SL | Coop) SL>
Adems es posible usar condicionantes para indicar que un atributo obligatoriamente ha de tener un valor, para ello ponemos #REQUIRED al final de la declaracin del atributo. Tambin es posible indicar que un atributo no adopte un valor por defecto usando la condicin #IMPLIED. Tipos de atributos
CDATA
Se usa para cualquier texto. <!ATTLIST mensaje fecha CDATA #REQUIRED> <mensaje fecha="18 de Julio de 1996">
NMTOKEN
Para caracteres vlidos para nombrar cosas (letras, nmeros, puntos, guiones, subrayados y los dos puntos). <!ATTLIST mensaje fecha NMTOKEN #REQUIRED> <mensaje fecha="15-7-1999">
Enumerados
Permiten definir un conjunto reducido de opciones <!ATTLIST mensaje prioridad (normal | urgente) normal>
Notaciones
El valor del atributo sigue una notacin declarada mediante ! NOTATION, en este caso en la propia especificacin de HTML de la W3C: <!ATTLIST email fecha NOTATION (ISO-DATE | EUROPEANDATE) #REQUIRED> <!NOTATION HTML SYSTEM "http://www.w3.org/Markup">
ID e IDREF
El tipo ID permite que un atributo determinado tenga un nombre nico que podr ser referenciado por un atributo de otro elemento que sea de tipo IDREF. <!ELEMENT enlace EMPTY> <!ATTLIST enlace destino IDREF #REQUIRED> <!ELEMENT seccion (parrafo)*> <!ATTLIST seccion ref ID #IMPLIED> En este caso una etiqueta <enlace destino=seccion3> hara referencia u una <seccion ref=seccion3>. Declaraciones de entidades
Como vimos se usan para simplificar el documento XML y bsicamente son referencias a otros objetos. Las entidades pueden ser: Internas o Externas Analizadas o no analizadas Generales o Parmetro
Entidades generales internas
Son bsicamente abreviaturas que en momento son analizadas se reemplazan por su contenido. <!DOCTYPE texto[ <!ENTITY usa "Estados Unido de Amrica"> ]> <texto><titulo>La debacle econmica de los &usa;</titulo></texto>
Entidades generales externas analizadas
Son contenidos externos en cualquier otro sitio del sistema y pueden ser analizados. Por ejemplo XML o archivos de texto en otra parte del disco duro, en una pgina web o base de datos. <!ENTITY cabecera SYSTEM "http://www.miservidor.com/cabecera.xml">
Entidades no analizadas
Hacen referencia a objetos que no pueden ser analizados, como imgenes, ejecutables, etc. Por ejemplo: <!ENTITY logo SYSTEM "http://www.miservidor.com/logo.png">
Entidades parmetro externas e internas
Son aquellas entidades que slo pueden usarse en la DTD y no en documento XML. Se usan para reutilizar el cdigo DTD y se crean e invocan usando el carcter % en vez de &. <!DOCTYPE texto[ <!ENTITY % elemento-usa "<!ELEMENT USA (#PCDATA)>"> ... %elemento-usa; ]> O externa: <!DOCTYPE texto[ <!ENTITY % elemento-usa SYSTEM "usa.ent"> ...
%elemento-usa; ]> Limitaciones de las DTD Estas son las reglas bsicas de definicin de un DTD. Como vemos existen algunas limitaciones y no podemos definir algunas cosas, como por ejemplo el contenido de tipo numrico; elementos locales slo vlidos en ciertos elementos; elementos con contenido mixto de texto y elementos hijos; o especificar los tipos de datos permitidos en un atributo. Esta necesidad llev a la creacin de otros lenguajes de definicin de esquema como el XML Schema.
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> </xs:schema> El fragmento siguiente: <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> indica que los elementos y tipos de datos usados en el esquema vienen del espacio de nombres http://www.w3.org/2001/XMLSchema y deben ser escritos precedidos con xs. Namespaces O espacio de nombres es un identificador que permite agrupar un conjunto de nombres de atributo y elementos, de manera que podamos distinguir entre varios espacios de nombres precediendo cada elemento con dicho identificador. En el ejemplo anterior se define el espacio de nombres ws. Elemento simple Permiten definir elementos con contenido sin elemento hijos ni atributos: <xs:element name="nombre_elemento" type="tipo_dato"/> Tipos de datos Se usan tanto para definir el contenido de los elementos como el de los atributos. Tipos de datos generales: Tipo xs:Entero xs:positiveEntero xs:negativeEntero xs:nonPositiveEntero Representacin Entero (precisin infinita) Enteros positivos (precisin infinita) Enteros negativos (precisin infinita) Enteros negativos incluyendo 0 (precisin infinita)
xs:byte xs:unsignedByte xs:short xs:unsignedShort xs:int xs:unsignedInt xs:long xs:decimal xs:float xs:double xs:Boolean xs:string
Entero representado por 8 bits Entero representado por 8 bits (sin signo) Entero representado por 16 bits Entero representado por 16 bits (sin signo) Entero representado por 32 bits Entero representado por 32 bits (sin signo) Entero representado por 64 bits (sin signo) Nmero decimal (precisin infinita) Precisin sencilla coma flotante (32-bit) Precisin doble coma flotante(64-bit) Booleano Cadena de texto
Tipos de datos para fecha y tiempo: Tipo xs:time xs:dateTime Representacin Hora del da Fecha y hora de un da
xs:date xs:gYear
Fecha Ao
Tipos de datos de compatibilidad con DTD: Tipo xs:ID xs:IDREF xs:IDREFS xs:ENTITY xs:ENTITIES xs:NOTATION xs:NMTOKEN Representacin Especificacin XML 1.0 para tipo ID Especificacin XML 1.0 para tipo IDREF Especificacin XML 1.0 para tipo IDREFS Especificacin XML 1.0 para tipo ENTITY Especificacin XML 1.0 para tipo ENTITIES Especificacin XML 1.0 para tipo NOTATION Especificacin XML 1.0 para tipo NMTOKEN
Es posible definir un elemento por defecto mediante el atributo default e incluso establecer un valor fijo mediante el atributo fixed. Adems el usuario puede definir sus propios tipos de datos. Ejemplos: <xs:element name="color" type="xs:string" default=rojo/> <xs:element name="age" type="xs:Entero" fixed=18/> <xs:element name="dateborn" type="xs:date"/> Atributos Mediante el elemento attribute podemos definir atributos: <xs:attribute name="nombre_atributo" type="tipo_dato"/>
Opcionales o requeridos
Por defecto los atributos son opcionales, aunque se puede establecer como requeridos usando el atributo use, on incluso como prohibido si no queremos que se puede completar: <xs:attribute name="lang" type="xs:string" use="optional"/> <xs:attribute name="lang" type="xs:string" use="requered"/> <xs:attribute name="lang" type="xs:string" use="prohibited"/>
Restricciones a los valores
Es posible limitar los valores de un campo numrico: <xs:element name="age"> <xs:simpleType> <xs:restriction base="xs:integer"> <xs:minInclusive value="0"/> <xs:maxInclusive value="100"/> </xs:restriction> </xs:simpleType> </xs:element>
Restringir a un conjunto de valores
Podemos limitar los valores de un atributo a un conjunto de valores determinado: <xs:element name="coche"> <xs:simpleType> <xs:restriction base="xs:string">
Es posible delimitar el nmero de caracteres de un texto, sea un elemento o atributo: <xs:element name="password"> <xs:simpleType> <xs:restriction base="xs:string"> <xs:length value="8"/> </xs:restriction> </xs:simpleType> </xs:element> Restricciones Estas son las restricciones ms comunes que se pueden usar. Restriccin enumeration Descripcin Define lista de valores aceptados
fractionDigits Nmero mximo de decimales. Mayor o igual que cero. length Nmero exacto de caracteres permitidos. Mayor o igual que cero.
maxExclusive Lmite superior para valores numricos. Debe ser menor que este valor. maxInclusive Lmite superior para valores numricos. Debe ser menor o igual que este valor. maxLength Mximo nmero de caracteres o elementos de lista permitidos.
que este valor. minInclusive Lmite inferior para valores numricos. Debe ser mayor o igual que este valor. Mnimo nmero de caracteres o elementos de lista permitidos. Define la secuencia exacta de caracteres. Nmero exacto de dgitos permitidos. Define como manejar los carcteres de blancos.
minLength
Elementos complejos Un elemento complejo es un elemento formado por otros elementos o que tiene atributos. Los elementos que estn compuestos por otros elementos.
Indicadores de orden
Permiten definir el orden de los elementos hijo. xs:all, los hijos aparecen en cualquier orden pero solo una vez cada uno xs:sequence, establece el orden de aparicin de los hijos xs:choice, en el que slo puede aparecer uno de los hijos Para el siguiente XML: <director> <nombre>John</nombre> <apellidos>Smith</apellidos> </director> Podramos generar el XML schema: <xs:element name="director"> <xs:complexType> <xs:sequence> <xs:element name="nombre" type="xs:string"/> <xs:element name="apellidos" type="xs:string"/>
Indicadores de aparicin
maxOccurs: permite indicar un lmite superior de las veces que puede aparecer un elemento minOccurs: permite indicar un lmite inferior de las veces que puede aparecer un elemento
Un ejemplo, donde una persona puede tener entre 0 y 10 elementos hijo: <xs:element name="persona"> <xs:complexType> <xs:sequence> <xs:element name="nombre" type="xs:string"/> <xs:element name="hijo" type="xs:string" maxOccurs="10" minOccurs="0"/> </xs:sequence> </xs:complexType> </xs:element>
Indicadores de grupo
Permiten definir conjuntos de elementos y ser reutilizados en otras partes de la definicin: <xs:group name="oficina"> <xs:sequence> <xs:element name="nombre" type="xs:string"/> <xs:element name="apellidos" type="xs:string"/> <xs:element name="cumple" type="xs:date"/> </xs:sequence> </xs:group> <xs:element name="persona" type="personaninfo"/> <xs:complexType name="personaninfo"> <xs:sequence> <xs:group ref="oficina"/> <xs:element name="pais" type="xs:string"/> </xs:sequence> </xs:complexType>
podemos crear alias a las URIs que deseemos mediante el atributo xmlns seguido del nombre del Namespace: <?xml version="1.0" encoding="UTF-8"?> <empresa xmlns:negocio="http://www.negocio.com"> <negocio:nombre>Comercializadora SL</empresa:nombre> <negocio:actividad>Comercializadora de alimentos saludables</negocio:actividad> <negocio:director> <nombre>Lluis</nombre> <apellido1>Vives Garca</apellido1> <apellido2/> </negocio:director> </negocio:empresa> En el ejemplo anterior podemos ver como hemos definido el alias negocio a partir del URI http://www.negocio.com, por lo que ya podemos identificar claramente los elementos que pertenecen al espacio de nombres de un negocio. Podemos comprobar que la definicin del espacio de nombres slo es necesaria hacerla una vez y se aplica al propio elemento si no posee prefijo de espacio de nombres y a todos los elementos hijos. Si quisisemos ahora crear un espacio de nombres para personas, podramos hacer: <?xml version="1.0" encoding="UTF-8"?> <empresa xmlns:negocio="http://www.negocio.com"> <negocio:nombre>Comercializadora SL</empresa:nombre> <negocio:actividad>Comercializadora de alimentos saludables</negocio:actividad> <negocio:director xmlns:persona="http://www.persona.com"> <persona:nombre>Lluis</persona:nombre> <persona:apellido1>Vives Garca</persona:apellido1> <persona:apellido2/> </negocio:director> </negocio:empresa> De hecho ya habamos visto el uso de Namespaces antes, por ejemplo en los XML Schemas con el prefijo xs: <?xml version="1.0" encoding="UTF-8"?> <xs:schema
xmlns:xs="http://www.w3.org/2001/XMLSchema"> <xs:element name="Libro"> <xs:complexType> <xs:sequence> <xs:element name="Ttulo" type="xs:string"/> <xs:element name="Autores" type="xs:string" maxOccurs="10"/> <xs:element name="Editorial" type="xs:string"/> </xs:sequence> <xs:attribute name="precio" type="xs:double"/> </xs:complexType> </xs:element> </xs:schema> Se pueden declarar mltiples prefijos de espacios de nombres como atributos de un nico elemento, como se muestra en el siguiente ejemplo: <?xml version="1.0"?> <!-- ambos prefijos de espacio de nombres estn disponibles a continuacin --> <lb:libro xmlns:lb=urn:loc.gov:libros xmlns:isbn=urn:ISBN:0395-36341-6> <lb:titulo>Ms barato que una Docena</lb:titulo> <isbn:numero>1568491379</isbn:numero> </lb:libro> Si no se especifica el carcter dos puntos y el nombre del espacio de nombres, entonces el nombre de espacio de nombres asociado es el del espacio de nombres por defecto en el mbito del elemento al que est adjunto la declaracin. <?xml version="1.0"?> <!-- los nombres no prefijados pertenecen a "libros" --> <libro xmlns=urn:loc.gov:libros xmlns:isbn=urn:ISBN:0395-36341-6> <titulo>Ms barato que una Docena</titulo> <isbn:numero>1568491379</isbn:numero> </libro> En resumen, los espacios de nombres sirven para evitar las colisiones entre elementos del mismo nombre, y en general, para distinguir los distintos grupos de elementos en un mismo documento. Cada espacio de nombres se asocia con una URI, que slo sirve
SimpleXML (http://php.net/manual/en/book.simplexml.php) XML Parser (http://www.php.net/manual/en/book.xml.php) XMLReader (http://www.php.net/manual/en/book.xmlreader.php) XML Expat Parser (http://www.w3schools.com/php/php_xml_parser_expat.asp) Xerces (http://xerces.apache.org/xerces-c/) MSXML (http://msdn.microsoft.com/enus/library/ms763742(VS.85).aspx) libxml (http://xmlsoft.org/)
.Net
Validadores de XML La mayora de editores especialidados en XML o integrados en entornos de trabajo o IDE, permiten validar los XML que generemos, ya que incrustan procesadores XML. Prcticamente todos comprueban que estn correctamente formados, y muchos de ellos permiten validar el documento XML contra DTD y XML Schemas, identificando los posibles errores. En el punto 2.1.10 de este documento tienes alguno de ellos. Validacin online de XML Adems en Internet existen servicios externos que nos permiten realizar dicha validacin: http://validator.w3.org/ http://www.w3schools.com/xml/xml_validator.asp http://www.stg.brown.edu/service/xmlvalid/ http://www.xmlvalidation.com/ http://www.validome.org/xml/ Validacin online de DTD / Schema De igual manera en Internet tambin existen validadores de DTD y Schema para XML: http://www.w3schools.com/dtd/dtd_validation.asp http://www.validome.org/grammar/ http://schneegans.de/sv/ http://validate.openlaboratory.net/
XML para sus propios documentos. Por ejemplo, Microsoft Office guarda los documentos en formato XML, de ah que la extensin sea hora DOCX o XLSX. Existen multitud de herramientas para la conversin de XML a otros formatos o viceversa, mostramos a continuacin algunos ejemplos:
JSON - XML: http://jsontoxml.utilities-online.info/ XML a TXT con una XSLT: https://www.fpds.gov/wiki/index2.php/XML_Conversion_Utility Datos a XML: http://www.stylusstudio.com/convert_to_xml.html MySQL a XML en PHP (http://sentidoweb.com/tag/mysql-xml) XML a CSV, TXT, XLS, SQL (http://www.xmlconverter.com/spanish/) ODBC, MS SQL Server, Oracle, MySQL, TXT, CSV, (DOC, XLS, MDB) a XML (http://download.cnet.com/XML-ConverterStandard-Edition/3000-7241_4-10120976.htm)
Atom Es otra especificacin para la sindicacin de contenidos y que presupone algunas mejoras frente a RSS, principalmente en su compatibilidad con versiones anteriores. Sin embargo, su mayor baza es la apuesta de Google por Atom. Algunos ejemplos de fuentes en Atom: Diario Pblico: www.publico.es/estaticos/rss/ Google News: news.google.es/news? pz=1&cf=all&ned=es&hl=es&topic=h&num=3&output=atom Agregadores Para suscribirnos a un canal RSS o Atom necesitamos de una aplicacin que se conecte peridicamente a la fuente de contenido y obtenga los nuevos contenidos, estas aplicaciones se conocen como agregadores, y pueden ser aplicaciones de escritorio o de mvil, e incluso que estn en la propia web. Los agregadores permiten suscribirnos a multitud de fuentes web y clasificarlas segn nuestra conveniencia y consumir la informacin en funcin a nuestros intereses, configurando as nuestra manera de estar actualizados. En la actualidad la mayora de agregadores son capaces de leer ambas fuentes de noticias RSS y Atom, incluso muchas pginas web proveen de ambos tipos de fuentes de contenido. Los navegadores adems permiten identificar las fuentes con un icono naranja en la barra de nevegacin para poder fcilmente suscribirnos a las fuentes que deseemos. Agregadores de escritorio FeedReader (Windows). NetNewsWire (Mac). Liferea (Linux). Naufrago! (Linux). Agregadores en servicios web Google Reader. My Yahoo!. Bloglines. Netvibes. IGoogle Sitios Agregadores
Existen sitios web que valindose de la sindicacin de contenidos los agregan en sus sistemas para diversos propsitos, como mejorar la experiencia del usuario, enriquecer el contenido con opiniones, clasificarlos de otra forma, etc. Es el caso de sitios como Mename, Noticias.com o Divlgame.
Rendimiento bajo comparado con otros modelos distribuidos Al apoyarse en HTTP se pueden esquivar medidas de seguridad basadas en firewalls
2.5.4. XHTML
Son las siglas de eXtensible HyperText Markup Language o Lenguaje de Marcado de Hypertexto Extensible, y a grandes rasgos sera HTML
expresado como XML bien formado, cumpliendo todas las reglas que hemos visto en los captulos anteriores para documentos XML bien formados. XHTML surge como el primer paso de la W3C para separar claramente la informacin de la presentacin y facilitar a las aplicaciones la comprensin de los documentos para que puedan interpretarlos semnticamente de manera correcta. Es lo que se conoce como Web semntica. Ventajas del XHTML respecto al HTML Al ser XML se pueden aplicar herramientas de procesamiento de documentos XML (editores, XSLT, ...) El procesado del documento es ms sencillo al estar correctamente formado y no tener que estar haciendo suposiciones en casos de cierres incorrectos, malas anidaciones, etc. Se pueden usar Espacios de nombres XML Diferencias entre HTML y XHTML Los elementos vacos o no deben cerrarse siempre La anidacin de los elementos deber ser correcta Los valores de los atributos deber ir siempre entre comillas Los nombres de los elementos y atributos deben ir en minsculas Los atributos deben de tener siempre valor, aunque sea la cadena vaca Los atributos desaprobados en HTML 4.01 no forman parte de XHTML Doctype de XHTML En un documento XHTML el <!DOCTYPE> es obligatorio y permite elegir el DTD empleado para construccin y validacin del documento. Existen varias versiones de XHTML como por ejemplo la 1.0, 1.1, Bsico, etc. W3C provee para cada una de ellas una DTD con la que podemos validar nuestro documento XHTML. Por ejemplo, para incluir la DTD de XHTML 1.1 podra especificarse de la siguiente forma: <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="es"> <head>
Esta DTD contiene todos los elementos y atributos HTML, pero NO INCLUYE los elementos de presentacin, o en desuso (como font). Los framesets no estn permitidos. El marcado tambin debe ser escrito como XML bien formado. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
XHTML 1.0 Transitional
Esta DTD contiene todos los elementos y atributos HTML, pero INCLUYE los elementos de presentacin, o en desuso (como font). Los framesets no estn permitidos. El marcado tambin debe ser escrito como XML bien formado. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1transitional.dtd">
XHTML 1.0 Frameset
Igual que XHTML 1.0 Transitional pero permite el uso de framesets. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1frameset.dtd">
XHTML 1.1
Este DTD es igual a XHTML 1.0 Strict, pero permite aadir mdulos (por ejemplo, para proporcionar apoyo para idiomas de Asia Oriental). <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
2.5.5. Ajax
Es el acrnimo para Asynchronous JavaScript And XML o JavaScript asncrono y XML, y es una tcnica de desarrollo de pginas web para crear aplicaciones interactivas. Estas aplicaciones se ejecutan en el navegador en el cliente en vez de en el servidor y realizan una comunicacin asncrona con el mismo en segundo plano.
Asncrona quiere decir que los datos se solicitan al servidor en segundo plano sin interferir con la visualizacin y el comportamiento de la pgina. Una vez que se cargan los datos se ejecuta algn procedimiento como por ejemplo recargar parte de la pgina. Est relacionado con XML porque usa el protocolo de comunicacin XMLHttpRequest, sin embargo es posible enviar los datos en cualquier otro formato (por ejemplo JSON, texto plano o HTML). Las pginas que usan Ajax pueden ser ms amigables y fciles de usar al no estar cargando una pgina en cada interaccin con el usuario, permitiendo una mejor experiencia de uso. Inconvenientes Las pginas con Ajax son ms difciles de desarrollar que las pginas estticas. Las pginas creadas dinmicamente mediante peticiones sucesivas Ajax, no son registradas de forma automtica en el historial del navegador, as que haciendo clic en el botn de "volver" del navegador, el usuario no ser devuelto a un estado anterior de la pgina, en cambio puede volver a la ltima pgina que visit. Los motores de bsquedas no entienden JavaScript. La informacin en la pgina dinmica no se almacena en los registros del buscador. Por seguridad hay problemas usando Ajax entre nombres de dominios. Los sitios con Ajax usa ms recursos en el servidor. Es posible que pginas con Ajax no puedan funcionar en telfonos mviles, PDA u otros aparatos. Ajax no es compatible con todos los software para ciegos u otras discapacidades.