miércoles, 5 de junio de 2013

Desarrollo con XML

                                                            DEFINICIÓN

XML es un  formato universal para documentos y datos estructurados en Internet; este estándar permite el intercambio de información estructurada entre diferentes plataformas. Por lo que se  puede usar en bases de datos, editores de texto, hojas de cálculo y casi cualquier cosa imaginable… 

                                                         CARACTERÍSTICAS
Sus características más relevantes son:

1. – XML es un estándar para escribir datos estructurados en un fichero de texto.
XML provee un conjunto de reglas, normas y convenciones para diseñar formatos de texto para  datos estructurados que van desde las hojas de cálculo, o las libretas de direcciones de Internet, hasta parámetros de configuración, transacciones financieras o dibujos técnicos.

Su uso  Los programas que los generan, utilizan normalmente formatos binarios o de texto. XML es permite resolver problemas comunes, como la falta de extensibilidad, carencias de soporte debido a características de internacionalización, o problemas asociados a plataformas específicas.

2. – XML parece HTML pero no lo es.
Tanto XML como HTML  usan marcas y atributos, más su diferencia radica en que, HTML cada marca y atributo estable un significado a la vez que incluyendo el aspecto que debe tener al verse en un navegador, en XML sólo se usan las marcas para delimitar fragmentos de datos, dejando la interpretación de éstos a la aplicación que los lee.

3. – XML está en formato texto, pero no para ser leído. 

El formato texto puede ser usado en cualquier plataforma, esto le da innumerables ventajas de portabilidad, depuración, independencia de plataforma, e incluso de edición, pero su sintaxis es más estricta que la de HTML: una marca olvidada o un valor de atributo sin comillas convierten el documento en inutilizable. No hay permisividad en la construcción de documentos, ya que esa es la única forma de protegerse contra problemas más graves.

4. – XML consta de una familia de tecnologías.

La definición (estándar) de XML 1.0 que viene de Febrero 98, pero su desarrollo se ha ido enriqueciendo paulatinamente a medida que se veían sus posibilidades: de esa forma, contamos con una especificación Xlink, que describe un modo estándar de añadir hipervínculos a un documento XML. XPointer y XFragments son especificaciones para establecer la forma de vincular partes de un documento XML. Incluso el lenguaje de hojas de estilo (CSS) se puede utilizar con XML al igual que se hace con HMTL. XSL es precisamente, una extensión del anterior, en la que se dispone de todo un lenguaje de programación exclusivamente para definir criterios de selección de los datos almacenados en un documento XML, y que funciona conjuntamente con las CSS o con HTML para suministrar al programador y al usuario mecanismos de presentación y selección de información, que no requieran de la intervención constante del servidor. Se basa en un lenguaje anterior para transformación (XSLT) que permite modificar atributos y marcas de forma dinámica.

5. – XML es prolijo, pero eso no supone un problema.

Los ficheros resultantes, son casi siempre mayores que sus equivalentes binarios. Esto es intencionado, y las ventajas ya las hemos comentado más arriba, mientras que las desventajas, siempre pueden ser soslayadas mediante técnicas de programación que permite comprimir los datos.

6. – XML es nuevo, pero no tanto. 

El estándar empezó a diseñarse en 1996, y se publicó la recomendación en Febrero/98. Como ya hemos comentado, eso no significa que la tecnología no esté suficientemente madura, ya que el estándar SGML en el que se basa, data de una especificación ISO del año 1986.

7. – XML no requiere licencia

Es un estándar abierto  independiente de la plataforma, y tiene un amplio soporte extendido a un sinnúmero herramientas y desarrolladores.

                            LENGUAJE DE MARCADO GENERALIZADO

Un lenguaje de marcado o lenguaje de marcas es una forma de codificar un documento que, junto con el texto, incorpora etiquetas o marcas que contienen información adicional acerca de la estructura del texto o su presentación.

El lenguaje de marcas más extendido es el HTML ("HyperText Markup Language", Lenguaje de marcado de hipertexto), fundamento del World Wide Web (entramado de comunicación de alcance mundial).
Los lenguajes de marcado suelen confundirse con lenguajes de programación. Sin embargo, no son lo mismo, ya que el lenguaje de marcado no tiene funciones aritméticas o variables, como sí poseen los lenguajes de programación. Históricamente, el marcado se usaba y se usa en la industria editorial y de la comunicación, así como entre autores, editores e impresores.

Un ejemplo de cómo funciona el lenguaje de marcado puede observarse en el dictado de viva voz de un documento a una persona que lo transcribe a máquina:
Ponga estilo de carta. ponga comillas, ponga mayúsculas, Estimado Juan, ponga dos puntos, aparte, sangría, ponga primera letra mayúscula, te escribo esta carta, ponga negrillas, de forma muy urgente, cierre negrilla, ya que no me has enviado... etc".

CLASES DE LENGUAJE MARCADO 

Se suele diferenciar entre tres clases de lenguajes de marcado, aunque en la práctica pueden combinarse varias clases en un mismo documento. Por ejemplo, el HTML contiene etiquetas puramente procedimentales, como la B de bold (negrita), junto con otras puramente descriptivas ('BLOCKQUOTE, el atributo HREF). El HTML también incluye el elemento PRE, que indica que el texto debe representarse tal y como está escrito.

MARCADO DE PRESENTACIÓN

El marcado de presentación es aquel que indica el formato del texto. Este tipo de marcado es útil para maquetar la presentación de un documento para su lectura, pero resulta insuficiente para el procesamiento automático de la información. El marcado de presentación resulta más fácil de elaborar, sobre todo para cantidades pequeñas de información. Sin embargo resulta complicado de mantener o modificar, por lo que su uso se ha ido reduciendo en proyectos grandes en favor de otros tipos de marcado más estructurados.
Se puede tratar de averiguar la estructura de un documento de esta clase buscando pistas en el texto. Por ejemplo, el título puede ir precedido de varios saltos de línea, y estar ubicado centrado en la página. Varios programas pueden deducir la estructura del texto basándose en esta clase de datos, aunque el resultado suele ser bastante imperfecto.

MARCADO DE PROCEDIMIENTOS

El marcado de procedimientos está enfocado hacia la presentación del texto, sin embargo, también es visible para el usuario que edita el texto. El programa que representa el documento debe interpretar el código en el mismo orden en que aparece. Por ejemplo, para formatear un título, debe haber una serie de directivas inmediatamente antes del texto en cuestión, indicándole al software instrucciones tales como centrar, aumentar el tamaño de la fuente, o cambiar a negrita. Inmediatamente después del título deberá haber etiquetas inversas que reviertan estos efectos. En sistemas más avanzados se utilizan macros o pilas que facilitan el trabajo.

Algunos ejemplos de marcado de procedimientos son nroff, troff, TeX. Este tipo de marcado se ha usado extensivamente en aplicaciones de edición profesional, manipulados por tipógrafos calificados, ya que puede llegar a ser extremadamente complejo.

MARCADO DESCRIPTIVO

El marcado descriptivo o semántico utiliza etiquetas para describir los fragmentos de texto, pero sin especificar cómo deben ser representados, o en que orden. Los lenguajes expresamente diseñados para generar marcado descriptivo son el SGML y el XML.

Las etiquetas pueden utilizarse para añadir al contenido cualquier clase de metadatos. Por ejemplo, el estándar Atom, un lenguaje de sindicación, proporciona un método para marcar la hora "actualizada", que es el dato facilitado por el editor de cuándo ha sido modificada por última vez cierta información. El estándar no especifica como se debe representar, o siquiera si se debe representar. El software puede emplear este dato de múltiples maneras, incluyendo algunas no previstas por los diseñadores del estándar.

Una de las virtudes del marcado descriptivo es su flexibilidad: los fragmentos de texto se etiquetan tal como son, y no tal como deben aparecer. Estos fragmentos pueden utilizarse para más usos de los previstos inicialmente. Por ejemplo, los hiperenlaces fueron diseñados en un principio para que un usuario que lee el texto los pulse. Sin embargo, los buscadores los emplean para localizar nuevas páginas con información relacionada, o para evaluar la popularidad de determinado sitio web.

El marcado descriptivo también simplifica la tarea de reformatear un texto, debido a que la información del formato está separada del propio contenido. Por ejemplo, un fragmento indicado como cursiva (<i>texto</i>), puede emplearse para marcar énfasis o bien para señalar palabras en otro idioma. Esta ambigüedad, presente en el marcado presentacional y en el procedimental, no puede soslayarse más que con una tediosa revisión a mano. Sin embargo, si ambos casos se hubieran diferenciado descriptivamente con etiquetas distintas, podrían representarse de manera diferente sin esfuerzo.

El marcado descriptivo está evolucionando hacia el marcado genérico. Los nuevos sistemas de marcado descriptivo estructuran los documentos en árbol, con la posibilidad de añadir referencias cruzadas. Esto permite tratarlos como bases de datos, en las que el propio almacenamiento tiene en cuenta la estructura, no como en los grandes objetos binarios (blobs) como en el pasado. Estos sistemas no tienen un esquema estricto como las bases relacionales, por lo que a menudo se las considera bases semiestructuradas.

LENGUAJE EXTENSIBLE DE MARCADO DE HIPERTEXTO


El XHTML (eXtensible Hypertext Markup Language) o Lenguaje de Etiquetado  Hipertextual Extensible es una reformulación del lenguaje HTML como aplicación XML que se recoge en la Recomendación del World Wide Web Consortium (W3C) XHTML 1.0 The Extensible HyperText Markup Language  (http://www.w3.org/TR/xhtml1/). Además, han surgido otras Recomendaciones en torno a XHTML como la Modularización de XHTML o Modularizatin of XHTML (http://www.w3.org/TR/xhtml-modularization/) que especifica un compendio de la modularización de XHTML usando Definiciones de Tipo de Documento (DTDs) XML y extiende. XHTML a todas las plataformas emergentes

El lenguaje XHTML surgió ante los problemas de compatibilidad que surgían cuando se usaba un documento HTML en distintas plataformas. La especificación XHTML viene a ser una reformulación del HTML como aplicación XML. En realidad, es una reformulación de las tres definiciones de tipo de documento HTML 4.0 como aplicaciones XML. Su finalidad es que pueda ser usado como lenguaje de contenidos que sea a su vez conforme a XML y, si se siguen algunas sencillas directrices, funciona en agentes de usuario (esto es, las aplicaciones que leen y procesan documentos) conformes con HTML4.0.

Utilizar XHTML en lugar de HTML presenta las siguientes mejoras:
  •  Los documentos XHTML son conformes a XML. Como tales, son fácilmente visualizados, editados y validados con herramientas XML estándar. 
  •  Los documentos XHTML pueden escribirse para que funcionen igual o mejor que lo hacían antes tanto en las aplicaciones de usuario conformes a HTML 4.0 como en los nuevas aplicaciones conformes a XHTML 1.0. 
  •  Los documentos XHTML pueden usar aplicaciones (por ejemplo scripts y applets) que se basen ya sea en el Modelo del Objeto Documento de HTML o XML[DOM]. 
  •  A medida que la familia XHTML evolucione, los documentos conformes a XHTML 1.0 estarán más preparados para interactuar dentro de y entre distintos entornos XHTML. 
  • El lenguaje XHTML es una familia de módulos y tipos de documentos que reproduce, engloba y extiende HTML 4.0. Los tipos de documentos de la familia XHTML están basados en XML y diseñados fundamentalmente para trabajar en conjunto con aplicaciones de usuario basados en XML.
En realidad, XHTML es HTML con sintaxis XML, esto es, XHTML es una aplicación XML que se puede leer con los navegadores normales. Dos elementos destacables son, por un lado, que todo el código debe ir en minúsculas y, por otro, que es obligatorio cerrar las etiquetas. Así pues, <img src="1" alt=uno" debe ser ahora  <img src="1" alt="uno" />

He aquí 2 ejemplos de documentos XHTML válidos:

<?xml version="1.0"?>
<!DOCTYPE html 
     PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
    "xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="sp">
  <head>
    <title>Hipertexto: El nuevo documento en la cultura de la imagen</title>
  </head>
  <body>
<p>Hipertexto:</p>
    <p><a href="http://www.hipertexto.info/">Hipertexto</a>.</p>
<p><a href="http://www.google.es">Google</a></p>
  </body>
</html>
<?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="en" > 
<head>  <title>Virtual Library</title></head>
<body><p>Moved to <a href="http://vlib.org/">vlib.org</a>.</p>  </body></html>

En este ejemplo, la declaración XML está incluida. Una declaración XML como la de arriba no está requerida en todos los documentos XML. También se puede usar XHTML con otros espacios nominales XMLNames, por ejemplo la inclusión de metadatos expresados en RDF dentro de documentos XHTML o con otras recomendaciones como XMath, XML, etc. 

Para validar el documento XML se puede utilizar cualquier parser de XML.  En XMLSoftware se pueden encontrar muchas de estas herramientas (http://html.programacion.net/xhtml/).

Una aplicación de usuario debe cumplir todos y cada uno de los criterios de conformidad que se especifican en la Recomendación. Los documentos deben ser "gramaticalmente correctos". La gramaticalidad de los documentos es un nuevo concepto introducido por XML. Esencialmente significa que todos los elementos bien deben tener etiquetas de cierre y deben ser escritos de manera correcta, y que todos los elementos deben estar anidados, pues, aunque el solapamiento de elementos no estaba permitido en SGML, era tolerado en los navegadores existentes.

En realidad, no resulta demasiado complicado convertir un documento HTML a un documento XHTML válido. Depende esencialmente de cómo hayamos construido nuestro documento HTML. Si lo hemos construido y codificado bien en HTML, es decir, hemos entrecomillado todos y cada uno de los atributos, hemos cerrado todas las etiquetas y las anidamos correctamente, mantenemos la estructura esencial de la página, etc., y lo escribimos todo en minúsculas, la conversión de HTML a XHTML es prácticamente inmediata. Así pues, se puede hacer esta conversión de forma manual, aunque también existen editores y convertidores automáticos que convierten HTML en XHTML, como una herramienta llamada HTML Tidy  desarrollada por Dave Raggett del W3C Consortium (http://www.w3.org/People/Raggett/tidy/) o Amaya que es un navegador/editor que guarda documentos HTML como XHTML (http://www.w3.org/Amaya/).



Etiquetas XHTML

La especificación XHTML daba una explicación clara de por qué es necesario usar XHTML:
 Los desarrolladores de aplicaciones de usuario y documentos descubren constantemente nuevas formas de expresar sus ideas usando nuevas etiquetas. En XML, es relativamente fácil añadir nuevos elementos así como atributos adicionales a dichos elementos o a los ya existentes. La familia XHTML está concebida para acomodar estas extensiones a través de módulos XHTML y técnicas para desarrollar nuevos módulos conformes a XHTM (tal y como se describe en en la especificación sobre Modularización XHTML). Estos módulos permiten la combinación de las características existentes con las nuevas características al crear contenidos para la Web así como al desarrollar nuevas aplicaciones de usuario. 

 Constantemente se desarrollan nuevas formas de acceder a Internet. Algunas estimaciones indican que en el año 2002, un 75% de las peticiones de documentos que se visualicen en Internet se realizarán desde esas plataformas alternativas. La familia XHTML está concebida teniendo en mente la interoperabilidad con aplicaciones de usuario generales. A través de un nuevo mecanismo de especificación de documentos y aplicaciones de usuarios, los servidores, proxies, y aplicaciones de usuario finales podrán realizar una mejor transformación del contenido. Como objetivo final, será posible desarrollar contenido conforme a XHTML que sea utilizable por cualquier aplicación de usuario conforme a XHTML. 

Y esto es lo que hace la Modularization of XHTML. http://www.w3.org/TR/xhtml-modularization/ ha hecho. Esta modularización especifica un compendio de la modularización de XHTML y ofrece una implementación de dicho compendio usando las DTDs o Document Type Definitions de XML o Esquemas XML. Esta modularización proporciona un medio para subdividir y extender XHTML, una característica necesaria para extender el alcance de XHTML a las plataformas emergentes
HTML ha sido el lenguaje de etiquetado de documentos con más éxito del mundo. Pero cuando se presentó XML, se organizó un taller de dos días de duración para analizar si era necesaria una nueva versión de HTML basada en XML. La opinión general del taller fue un rotundo "Sí": con un HTML basado en XML, otros lenguajes XML podrían incluir porciones de XHTML, y los documentos XHTML podrían incluir porciones de otros lenguajes de etiquetado. Incluso se podría aprovechar el rediseño para limpiar algunas de las partes más descuidadas de HTML, y añadir algunas funcionalidades nuevas y necesarias, tales como mejores formularios.

Si los documentos son XHTML 1.0 puro (sin incluir otros lenguajes de etiquetado) entonces las diferencias con HTML no serán muy significativas. Sin embargo, a medida que proliferan las herramientas XML, como XSLT para la transformación de documentos, las ventajas de usar XHTML serán más visibles. XForms por ejemplo, permitirá editar documentos XHTML (u otros tipos de documentos XML) de forma sencilla. Además, las aplicaciones de Web Semántica serán capaces de sacar provecho de los documentos XHTML.

Sin embargo, si los documentos son algo más que XHTML 1.0, por ejemplo si incluyen MathML, SMIL, o SVG, entonces las ventajas son inmediatas, ya que este tipo de combinaciones no son posibles con HTML.

Los navegadores HTML aceptan cualquier entrada, ya sea correcta o no, e intentan mostrar algo perceptible con lo que reciben. Dicha corrección de errores hace que los navegadores  sean muy difíciles de implementar, especialmente si se espera que todos los navegadores actúen de igual manera. Esto también supone que una enorme cantidad de documentos HTML sean incorrectos, ya que, al mostrarse correctamente en el navegador, el autor no es consciente de los errores. Todo ello hace que sea realmente complicado implementar nuevos agentes de usuario, puesto que los documentos que se supone son HTML, frecuentemente tienen errores.

Aunque los navegadores son, de hecho, usuarios importantes de HTMLy XHTML, hay otros programas y sistemas que leen esos documentos. Los motores de búsqueda, por ejemplo, leen documentos pero no son navegadores. Por eso se utiliza el término agente de usuario, en vez de navegadores, ya que con este término se incluye a cualquier aplicación que lee y procesa un documento en un determinado lenguaje.

Por ejemplo, cuando hacemos una búsqueda, en algunos casos vemos que en el resultado de búsqueda aparece algo similar a: "Esta página Web contiene marcos, pero su navegador no los soporta", lo que desanima a los usuarios a hacer clic en ese vínculo. El autor del sitio Web en cuestión no se ha dado cuenta de que no todo son navegadores, y de que se debe incluir un texto mejor en la sección <noframes>, para que de esta forma no se muestren tan carentes de sentido cuando los usuarios hagan búsquedas en su sitio Web.

Otra característica importante en es que en XHTM se utilizan los espacios de nombres o namespaces.  Las declaraciones de los espacios de nombres indican al navegador o a otro agente de usuario a qué lenguaje pertenecen los elementos y atributos que están contenidos en un documento, para que este navegador o agente los reconozca. En los primeros tiempos del lenguaje HTML diferentes grupos y compañías añadieron nuevos elementos y atributos al HTML y esto podía provocar un caos entre las distintas versiones de HTML que se convertían en no interoperables. Sin embargo, XML (la X significa eXtensible) permite a cualquiera utilizar elementos de diferentes lenguajes, por lo que hay que indicar qué lenguaje estamos utilizando.

La modularización de XHTML no se dirige a los usuarios normales de XHTML, sino a los diseñadores de lenguajes basados en XHTML. Las compañías y grupos tienen la tendencia a diseñar sus propias versiones de HTML y XHTML, y éstas a menudo no son interoperables en los niveles básicos. La modularización XHTML divide XHTML en una serie de módulos que pueden seleccionarse individualmente cuando se define un nuevo lenguaje; de esta manera se garantiza que cualquier lenguaje basado en XHTML que utilice por ejemplo tablas, utilice la misma definición de tablas, y no otra versión divergente. La modularización también aclara dónde es correcto añadir nuevos elementos y dónde no lo es.

A la vez que el uso de XHTML vaya pasando de las aplicaciones de usuario del ordenador de sobremesa tradicional a otras plataformas, está claro que no todos los elementos de XHTML serán necesarios en todas las plataformas. Por ejemplo un dispositivo de mano o un teléfono móvil pueden soportar sólo un subconjunto elementos de XHTML. El proceso de modularización rompe XHTML en una serie de pequeños conjuntos de elementos. Dichos elementos pueden ser recombinados para cumplir las necesidades de diferentes comunidades.
La Modularización de XHTML es una descomposición de XHTML y, por referencia, de HTML 4, en una colección de módulos resumen que proporcionan tipos de funcionalidad específicos. Estos módulos resumen son implementados en esta especificación usando el lenguaje de Definición de Tipo de Documento de XML o Esquemas XML. Los módulos pueden ser combinados con cualquiera de los otros y con otros módulos para crear subconjuntos y extensiones de tipos de documento XHTML que puedan calificarse como miembros de la familia de tipos de documentos XHTML.

La modularización conlleva diversas ventajas:
 Provee un mecanismo formal para acotar XHTML.

 Provee un mecanismo formal para extender XHTML.

 Simplifica la transformación entre tipos de documento.

 Promueve la reutilización de módulos en nuevos tipos de documento.

La modularización de XHTML está recogida en 2 Especificaciones:

 XHTML Basic (http://www.w3.org/TR/xhtml-basic/) que incluye el conjunto mínimo de módulos requeridos para un tipo de documento XHTML que incluye imágenes, formularios, tablas básicas y soporte de objetos, y está pensado para los diseñadores de Webs que no soportan todo el conjunto de características XHTML como, por ejemplo, clientes Web tales como teléfonos móviles, PDAs, paginadores, cajas de lectura, etc. El tipo de documento es lo suficientemente rico para la creación de contenidos. El objetivo de XHTML Básico es ser una base común que pueda ser extendida. Por ejemplo, un módulo de eventos que sea más genérico que el tradicional sistema de eventos HTML 4 podría ser añadido o podría ser extendido con módulos adicionales procedentes de la modularización de XHTML, tales como el Módulo Scripting. El objetivo de XHTML Basic es proporcionar un lenguaje común soportado por varias clases de agentes de usuario.   

 Modularizacion of xHTML (http://www.w3.org/TR/xhtml-modularization/) que incluye los módulos de núcleo como son los módulos de estructura (body, head, title, html), texto, hipertexto y lista, módulo de applet, módulo de extensión del texto (presentación, edición, texto bidireccional), módulos de formulario, módulos de tablas, módulo de imagen, módulo de mapa de imagen del lado del cliente, módulo de imagen del lado del servido, módulo de objetos, módulo de marcos, módulo de eventos, módulo de metainformación, módulo de scripting, módulo de hojas de estilo, módulo link, módulo de identificación de nombre, módulos DTD, módulos Esquema, etc.

Así pues, la modularización y extensibilidad de XHTML ha mejorado las posibilidades de estructuración, eliminación de características repetidas en XML, usabilidad, accesibilidad, internacionalización, independencia del dispositivo, mejores formularios y reducción de la necesidad de scripts, etc.

DIFERENCIAS ENTRE "HTML" Y "XHTML"

a siguiente lista muestra algunas reglas de XHTML 1.0 que lo diferencian de HTML 4.01. Muchas de estas diferencias vienen con el cambio de ser una aplicación SGML a ser una aplicación del más estricto XML:
Los elementos vacíos deben cerrarse siempre:
  • Incorrecto: <br>
  • Correcto: <br></br> o <br/> o <br />
Nota: Cualquiera de las tres formas es válida en XHTML. Para compatibilidad según el "Apéndice C" debe usarse <br />.
  • Los elementos no vacíos también deben cerrarse siempre:
  • Incorrecto: <p>Primer párrafo<p>Segundo párrafo
  • Correcto: <p>Primer párrafo</p><p>Segundo párrafo</p>
Los elementos anidados deben tener un correcto orden de apertura/cierre (el que se abre último, debe cerrarse primero).
  • Incorrecto: <em><strong>Texto</em></strong>
  • Correcto: <em><strong>Texto</strong></em>
Los valores de los atributos deben siempre ir encerrados entre comillas (simples o dobles).
  • Incorrecto: <td rowspan=3>
  • Correcto: <td rowspan="3">
  • Correcto: <td rowspan='3'>
Los nombres de elementos y atributos deben ir en minúsculas.
  • Incorrecto: <A HREF="http://www.domname.com">Domname</A>
  • Correcto: <a href="http://www.domname.com">Domname</a>
No está permitida la minimización de atributos (se usa el nombre del atributo como valor).
  • Incorrecto: <textarea readonly>Solo-lectura</textarea>
  • Correcto: <textarea readonly="readonly">Solo-lectura</textarea>
Los atributos desaprobados en HTML 4.01 no forman parte de XHTML.
  • Incorrecto: <font color="#0000FF">Blue text</font>
  • Correcto: <span style="color: #0000FF;">Blue text</span> 

Reglas para DTDs estrictos 

El texto no debe ser insertado directamente en el cuerpo (dentro de la etiqueta body).
  • Incorrecto: <body>Texto plano</body>
  • Correcto: <body><span>Texto plano</span></body>

No se deben insertar elementos de bloque dentro de elementos de línea.
  • Incorrecto: <em><h2>Título</h2></em>
  • Correcto: <h2><em>Título</em></h2>

ESTRUCTURA DE UN DOCUMENTO XML

La tecnología XML busca dar solución al problema de expresar información estructurada de la manera más abstracta y reutilizable posible. Que la información sea estructurada quiere decir que se compone de partes bien definidas, y que esas partes se componen a su vez de otras partes. Entonces se tiene un árbol de trozos de información. Ejemplos son un tema musical, que se compone de compases, que están formados a su vez por notas. Estas partes se llaman elementos, y se las señala mediante etiquetas.
Una etiqueta consiste en una marca hecha en el documento, que señala una porción de éste como un elemento. Un pedazo de información con un sentido claro y definido. Las etiquetas tienen la forma <nombre>, donde nombre es el nombre del elemento que se está señalando.
A continuación se muestra un ejemplo para entender la estructura de un documento XML:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE Edit_Mensaje SYSTEM "Edit_Mensaje.dtd">
<Edit_Mensaje>
     <Mensaje>
          <Remitente>
               <Nombre>Nombre del remitente</Nombre>
               <Mail> Correo del remitente </Mail>
          </Remitente>
          <Destinatario>
               <Nombre>Nombre del destinatario</Nombre>
               <Mail>Correo del destinatario</Mail>
          </Destinatario>
          <Texto>
               <Asunto>
                    Este es mi documento con una estructura muy sencilla 
                    no contiene atributos ni entidades...
               </Asunto>
               <Parrafo>
                    Este es mi documento con una estructura muy sencilla 
                    no contiene atributos ni entidades...
               </Parrafo>
          </Texto>
     </Mensaje>
</Edit_Mensaje>
Aquí está el ejemplo de código del DTD del documento «Edit_Mensaje.dtd»:
<?xml version="1.0" encoding="ISO-8859-1" ?>
<!-- Este es el DTD de Edit_Mensaje -->
<!ELEMENT Mensaje (Remitente, Destinatario, Texto)*>
<!ELEMENT Remitente (Nombre, Mail)>
<!ELEMENT Nombre (#PCDATA)>
<!ELEMENT Mail (#PCDATA)>
<!ELEMENT Destinatario (Nombre, Mail)>
<!ELEMENT Nombre (#PCDATA)>
<!ELEMENT Mail (#PCDATA)>
<!ELEMENT Texto (Asunto, Parrafo)>
<!ELEMENT Asunto (#PCDATA)>
<!ELEMENT Parrafo (#PCDATA)>

DOCUMENTOS XML BIEN FORMADOS Y CONTROL DE ERRORES

Los documentos denominados como «bien formados» (del inglés well formed) son aquellos que cumplen con todas las definiciones básicas de formato y pueden, por lo tanto, analizarse correctamente por cualquier analizador sintáctico (parser) que cumpla con la norma. Se separa esto del concepto de validez que se explica más adelante.
Los documentos han de seguir una estructura estrictamente jerárquica con lo que respecta a las etiquetas que delimitan sus elementos. Una etiqueta debe estar correctamente incluida en otra, es decir, las etiquetas deben estar correctamente anidadas. Los elementos con contenido deben estar correctamente cerrados.
Los documentos XML sólo permiten un elemento raíz del que todos los demás sean parte, es decir, solo pueden tener un elemento inicial.
Los valores atributos en XML siempre deben estar encerrados entre comillas simples o dobles.
El XML es sensible a mayúsculas y minúsculas. Existe un conjunto de caracteres llamados espacios en blanco (espacios, tabuladores, retornos de carro, saltos de línea) que los procesadores XML tratan de forma diferente en el marcado XML.
Es necesario asignar nombres a las estructuras, tipos de elementos, entidades, elementos particulares, etc. En XML los nombres tienen alguna característica en común.
Las construcciones como etiquetas, referencias de entidad y declaraciones se denominan marcas; son partes del documento que el procesador XML espera entender. El resto del documento entre marcas son los datos «entendibles» por las personas.
Partes de un documento XML
Un documento XML está formado por el prólogo y por el cuerpo del documento así como texto de etiquetas que contiene una gran variedad de efectos positivos o negativos en la referencia opcional a la que se refiere el documento, hay que tener mucho cuidado de esa parte de la gramática léxica para que se componga de manera uniforme.

PROLOGO

Aunque no es obligatorio, los documentos XML pueden empezar con unas líneas que describen la versión XML, el tipo de documento y otras cosas.
El prólogo de un documento XML contiene:
Una declaración XML. Es la sentencia que declara al documento como un documento XML.
Una declaración de tipo de documento. Enlaza el documento con su DTD (definición de tipo de documento), o el DTD puede estar incluido en la propia declaración o ambas cosas al mismo tiempo.
Uno o más comentarios e instrucciones de procesamiento.
EJEMPLO: <?xml version="1.0" encoding="UTF-8"?>
Cuerpo
A diferencia del prólogo, el cuerpo no es opcional en un documento XML, el cuerpo debe contener solo un elemento raíz, característica indispensable también para que el documento esté bien formado. Sin embargo es necesaria la adquisición de datos para su buen funcionamiento.
EJEMPLO:

       <Edit_Mensaje>
           (...)
       </Edit_Mensaje>

ELEMENTOS

Los elementos XML pueden tener contenido (más elementos, caracteres o ambos), o bien ser elementos vacíos.
Atributos
Los elementos pueden tener atributos, que son una manera de incorporar características o propiedades a los elementos de un documento. Deben ir entre comillas.
Por ejemplo, un elemento «estudiante» puede tener un atributo «Mario» y un atributo «tipo», con valores «come croquetas» y «taleno» respectivamente.
<Estudiante Mario="come croquetas" tipo="taleno">Esto es un día que Mario va paseando…</Estudiante>
Entidades predefinidas
Entidades para representar caracteres especiales para que, de esta forma, no sean interpretados como marcado en el procesador XML.
Ejemplo: entidad predefinida: & carácter: &.
Secciones CDATA
Es una construcción en XML para especificar datos utilizando cualquier carácter sin que se interprete como marcado XML. No confundir con 2(#PCDATA) que es para los elementos. Permite que caracteres especiales no rompan la estructura. Ejemplo:
<![CDATA[contenido especial: áéíóúñ&]]>
Comentarios
Comentarios a modo informativo para el programador que han de ser ignorados por el procesador. Los comentarios en XML tienen el siguiente formato:
  <!--- Esto es un comentario --->
  <!-- Otro comentario -->

VALIDEZ

Que un documento esté «bien formado» solamente se refiere a su estructura sintáctica básica, es decir, que se componga de elementos, atributos y comentarios como XML especifica que se escriban. Ahora bien, cada aplicación de XML, es decir, cada lenguaje definido con esta tecnología, necesitará especificar cuál es exactamente la relación que debe verificarse entre los distintos elementos presentes en el documento.
Esta relación entre elementos se especifica en un documento externo o definición (expresada como DTD —Document Type Definition, 'Definición de Tipo de Documento'— o como XSchema). Crear una definición equivale a crear un nuevo lenguaje de marcado, para una aplicación específica.

DOCUMENT TYPE DEFINITION

La Document Type Definition o DTD (en español "definición de tipo de documento") define los tipos de elementos, atributos y entidades permitidas, y puede expresar algunas limitaciones para combinarlos. Los documentos XML que se ajustan a su DTD son denominados válidos.
Declaraciones tipo elemento
Los elementos deben ajustarse a un tipo de documento declarado en una DTD para que el documento sea considerado como válido.
Modelos de contenido
Un modelo de contenido es un patrón que establece los subelementos aceptados, y el orden en que se aceptan.
Declaraciones de lista de atributos
Los atributos se usan para añadir información adicional a los elementos de un documento.
Tipos de atributos

Atributos CDATA y NMTOKEN
Atributos enumerados y notaciones
Atributos ID e IDREF

DECLARACION DE ENTIDADES

XML hace referencia a objetos que no deben ser analizados sintácticamente según las reglas XML, mediante el uso de entidades. Las entidades pueden ser:

Internas o externas
Analizadas o no analizadas
Generales o parametrizadas

ESPACIOS DE NOMBRES

Los espacios de nombres XML permiten separar semánticamente los elementos que forman un documento XML.

XML SCHEMAS (XSD)

Un Schema es algo similar a un DTD. Define qué elementos puede contener un documento XML, cómo están organizados y qué atributos y de qué tipo pueden tener sus elementos.

Ventajas de los Schemas frente a los DTD

Usan sintaxis de XML, al contrario que los DTD.
Permiten especificar los tipos de datos.
Son extensibles.

HERRAMIENTAS PARA TRABAJAR CON DOCUMENTOS XML

De hecho cualquier procesador de texto, que sea capaz de producir archivos .txt es capaz de generar XML, aunque en los entornos de desarrollo como Eclipse o Visual Studio, se facilita, ya que reconoce los formatos y ayuda a generar un XML bien formado.
Lenguajes creados usando XML

Extensible Stylesheet Language (XSL)
El Lenguaje de Hoja de Estilo Extensible (eXtensible Stylesheet Language, XSL) es una familia de lenguajes que permiten describir como los archivos codificados en xml serán formateados (para mostrarlos) o transformados. Hay tres lenguajes en esta familia: XSL Transformations (XSLT), XSL Formatting Objects (XSL-FO)y XML Path Language.

Lenguaje de enlace XML (XLINK)

XLink es una aplicación XML que intenta superar las limitaciones que tienen los enlaces de hipertexto en HTML. XLink 1.1 es ya una recomendación W3C.

Otras tecnologías:

Hojas de estilo 
o XSL-FO
o XSLT
o XLink
o XPointer
o XSL
o hojas de estilo en cascada (CSS)
o XLT (XML representation of Lexicons and Terminologies)
Programación 
o JDOM
o SAX
o StAX
o VTD-XML
Consulta de datos 
o XQuery
o Xpath
Seguridad 
o Xades (XML Advanced Electronic Signatures)

Hay quien opina que XML es demasiado pesado para algunas aplicaciones y difícil de editar con un editor de texto simple. Por ello merece la pena mencionar algunas alternativas más ligeras y simples. Los lenguajes de marcas ligeros:

Simple Outline XML: es un XML simplificado que se puede convertir sin problemas en XML completo.

YAML y OGDL. Estos dos son ficheros de solo texto que no están emparentados con XML como el SOX, antes comentado.

BBCode. Éste tiene un uso muy restringido para dar formato nada más.
También hay por lo menos un lenguaje basado en XML en formato binario, llamado EBML.

XSL y CSS

Fundamentos XSL

El lenguaje XSL está aún en desarrollo. En el momento de la escritura, que es un borrador de trabajo del W3C. Toda la sintaxis que se muestra aquí es por tanto provisional, y sólo pretende introducir los conceptos.

El grueso de una hoja XSL es una serie de reglas patrón-acción. Los patrones son similares a los de la CSS selectores (en función, no necesariamente en la sintaxis), pero la parte de acción pueden crear un número arbitrario de "objetos." La parte de acción de la regla se llama la "plantilla" en XSL, y una plantilla y un patrón en conjunto se les conoce como la "regla de la plantilla."

Un autor de una hoja XSL selecciona un conjunto adecuado de objetos para su tarea. El conjunto de objetos puede ser cualquier cosa para la que existe una especificación que define la sintaxis dentro de las plantillas XSL, a continuación se muestra cómo esa especificación podría buscar CSS. Los objetos no tienen que ser objetos de formato: podrían, por ejemplo , ser objetos que crean SMIL elementos o RDF ​​elementos. En principio, cuando ya existe una sintaxis XML para un formato de datos, que debe ser bastante fácil para derivar un formato de plantilla XSL de eso.

Una hoja XSL se parece a un documento XML con una mezcla de dos tipos de elementos: los definidos por XSL y los definidos por el lenguaje objeto.

El resultado de la aplicación de todos los patrones de juego a un documento de forma recursiva un árbol de objetos. El árbol de objetos resultante se interpreta a continuación, de arriba hacia abajo, de acuerdo con la definición de cada objeto. Si son (hipotética) objetos HTML, se producen un documento HTML, probablemente uno de los elementos HTML para cada objeto HTML. Si lo están, como en esta nota, objetos CSS, que se producen una cierta representación en la pantalla o en algún otro medio.

Para dar un ejemplo sencillo, la regla de plantilla muestra cómo un elemento XML ("número de la pieza") se expande a una serie de objetos de estilo CSS, con el contenido del elemento XML ampliado su interior. "Process-niños" indica el lugar donde se debe poner el contenido del número de la pieza. Los elementos de "plantilla" y "proceso-los niños" son definidos por XSL, "pedazo" es un objeto de CSS (definido por la presente nota). Los elementos no XSL debe anteponer una cadena corta que termina en dos puntos, para distinguirlas de las palabras clave XSL, en esta nota que hemos utilizado "css:".

<template match="partnumber">
  <Css: display trozo = "block"
            font-weight = "bold"
            margin-top = "20px">
    <Css: display trozo = "inline"
              color = "rojo">
      Número de parte: <css:space/>
    </ Css: trozo>
    <css:chunk color="green">
      <process-children/>
    </ Css: trozo>
  </ Css: trozo> <- final de la secuencia ->
</ Template>
CSS también es compatible con versiones auditivas. Una plantilla similar que produce objetos CSS para salida de audio podría ser:

<template match="partnumber">
  <Css: trozo parecen = "normal"
            voice-family = "hembra"
            cue-before = "número de la pieza-jingle.au"
            pause-after = "15 ms">
    Número de parte:
    <process-children/>
  </ Css: trozo>
</ Template>
Estos ejemplos sólo sirven para darle el sabor de XSL. XSL apoya mucho más potentes transformaciones que estos dos ejemplos muestran.

Declarar la objetos CSS

Como se explicó anteriormente, XSL está diseñado para ser utilizado con diferentes conjuntos de objetos. El resultado-ns atributo en la parte superior de la hoja XSL declara la cadena corta que se usa como prefijo (que hemos elegido "css" en esta nota, pero que podría haber utilizado "fo" o "r", o cualquier cosa más), y otro atributo a continuación se une el prefijo a la definición de los objetos:

<Hoja de estilo
    resultado-ns = "css"
    xmlns: css = ""> http://www.w3.org/TR/XSL-for-CSS
  ... resto de la hoja, con objetos de estilo CSS ...
</ Stylesheet>
Nota: como se explicó anteriormente, se sigue desarrollando la sintaxis XSL. Aunque habrá maneras de escribir selectores (patrones) y plantillas, y declarar el conjunto de objetos, la sintaxis no se congela hasta XSL se emite como Recomendación del W3C.

Principios para la creación de objetos CSS

CSS no tiene una sintaxis XML, por lo que la definición de la sintaxis de la plantilla XSL un poco más difícil de lo que sería para, por ejemplo , SMIL o MathML . A continuación se presentan una serie de principios para la conversión, y algunos ejemplos de los resultados.

CSS tiene propiedades como la fuente y la frontera , sino también font-size y border-top , que permiten a los pequeños aspectos de una fuente o de la frontera que se determine. Los objetos CSS para XSL podría bien mantener esta redundancia, o permitir sólo una manera de establecer una propiedad. Para reducir al mínimo el número de sorpresas para las personas que utilizan los objetos CSS, lo que permite tanto la taquigrafía y las propiedades individuales es probablemente aconsejable.

Propiedades CSS convierten atributos XML en la sintaxis XSL. Algunas propiedades CSS ( font-family , contenido ) aceptan ambas cadenas y palabras clave entre comillas. En la sintaxis XSL que se convertiría en font-family = "'Times New Roman', serif" , que invita a los errores. Algunas de las formas posibles para evitar la doble cotización se indican a continuación.

El objeto principal de CSS se llama trozo . Una parte tiene propiedades y por lo general algún contenido de texto y / o objetos incrustados (a menudo otros trozos). Si el medio de salida es visual, un pedazo típicamente produce una sola caja, aunque también puede producir múltiples cajas, si su propiedad 'display' es 'inline', o no cajas de todo, si 'display' es 'none'.

Algunos objetos auxiliares que sean necesarias, ya sea en las variantes de bloques con funciones adicionales ( por ejemplo , el ancla ), u objetos de conseguir alrededor de las restricciones a la sintaxis XSL ( por ejemplo , cambio ). Un fragmento es una reminiscencia de la {...}-block de una regla CSS normal. Por ejemplo:

{
  font-size: 10px;
  color: # FB9;
  text-indent: 1 em
}
se convertiría en:

<Css: porción
  font-size = "10px"
  color = "# FB9"
  text-indent = "1 em">
Las pseudo-clases

Las pseudo-clases de CSS sirven para seleccionar los elementos sobre la base de información distinta de lo que se puede aprender de el documento de origen. Algunos ejemplos son "activo", ": visited," y ": hover". Una manera de manejarlos es con un objeto de conmutación que contiene trozos de todos los estados posibles, y dejar que el interruptor de procesador entre los trozos, con base en la verdad de alguna condición vinculada a ellos. Por ejemplo:

<Css: Interruptor text-decoration = "underline"
            background = "rojo"
            font-style = "italic">
  <Css: Estado porción = "active | libración"
              color = "..."> ... </>
  <Css: Estado porción = "visitado"
              color = "..."> ... </>
</ Css: Interruptor>
El interruptor de objeto contiene las propiedades comunes a las alternativas, y cada alternativa tiene una condición de atributo que contiene las condiciones en que se muestra este fragmento. (También si hay más de una URL, una condición como "visitado" necesita una forma de indicar que URL se visita.)

Tenga en cuenta que el "primer hijo" pseudo-clase está a cargo de los patrones de XSL directamente.

Los pseudo-elementos

Los pseudo-elementos de CSS se refieren a partes de un elemento se muestra, para los que no existe (o no puede) de marcado en el documento de origen. ": Antes" y ": después de" se usa para insertar nuevos elementos que la dejase fuente 't tiene ninguna, y ": first-letter" y ": first-line" referirse a la primera letra / de línea de una caja de bloque que en realidad aparece en la pantalla.

Desde plantillas XSL permiten un número arbitrario de objetos que se cree, el ": antes" y ": después de" se atienden automáticamente. El ": first-letter" y ": first-line" probablemente necesita algo así como el objeto de conmutación arriba. Por ejemplo:

<Css: Fuente del compuesto = "Tiempos 12pt"
              line-height = "1.2"
              text-align = "left">
  <CSS: first-line font-variant = "small-caps"
                  color = "green" />
  <process-children/>
</ Css: Compuesto>
El compuesto objeto es como una normal, trozo , pero puede tener dos niños especiales, de primera línea y la primera carta , que tienen las propiedades de los seudo-elementos.

Cuadro de

Para los medios paginados, CSS2 permite que las características de las páginas que se describirán con @-reglas. Desde XSL no tiene lugar para declaraciones globales (al menos no en el proyecto de agosto de 1998), el mejor lugar para ponerlos es probablemente cerca de la raíz del árbol de objetos generados. Una regla @ page- podría traducirse en una página de objeto:

<template match="/">
  <Css: tamaño de página = "paisaje"
            Margen = "1.5in 1in"
            marcas = "cosecha" />
  <Css: Nombre page = "left"
            ... />
  <Css: Nombre de la página = "girar"
            ... />
</ Template>
Tipos de soporte

Selección de salida de medio podría ser manejado fuera de XSL, como lo es para CSS nivel 1. Eso significa que para escribir una hoja XSL para dos medios de comunicación, por ejemplo impresión y la pantalla, uno tiene que escribir dos hojas. Aún podían importar una hoja con normas comunes.

Web-fonts

Otra @-regla en CSS es la de definir la Web los fuentes . Estos, de nuevo, probablemente deben convertirse en objetos que están conectados cerca de la raíz del árbol de objetos:

<template match="/">
  <Css: fuente font-family = "Pantani"
            panose1 = "4726402695"
            font-style = "all" />
</ Template>
Los elementos reemplazados

Los elementos reemplazados podrían ser manejados con una reemplazado objeto, que tiene los atributos combinados de la porción y el objeto elemento de HTML:

<Css: reemplazado src = "/ Icons/w3c_home.png"
              type = "image / png"
              params = "..."
              border = "red sólida"
              ... />
Los elementos interactivos

Anclajes de origen de hipervínculo y elementos de formulario tienen no sólo estilo, pero también un comportamiento cuando un usuario los activa. En CSS que el comportamiento no tiene que ser especificado, ya que las cajas que aparecen en la pantalla tienen una relación directa con los elementos de la fuente y los elementos vienen con su propia semántica. Debido a la transformación que tiene lugar en las plantillas XSL, que de vínculo no está disponible, y la transformación necesaria para llevar adelante cualquier información sobre el comportamiento de los elementos de origen de los objetos generados. Cómo esto puede hacerse mejor es todavía una cuestión abierta. La introducción de objetos como anclaje (como la porción , pero con un extra href atributo), y de forma, entrada, etc puede ser una solución.

Contadores y la propiedad de contenido

Para hacer la sintaxis ligeramente más fácil de leer, puede ser posible hacer que los contadores en contador de objetos. XSL permite que el texto literal que se inserta en las plantillas directamente, obviando la necesidad de que el contenido de la propiedad.

Hay varias posibilidades para la definición de manipulación espacio en blanco dentro de las plantillas. La forma más fácil parece ser la definición de que los espacios en blanco en las plantillas no es significativo, excepto como separador entre palabras. Otra forma de expresar esto es decir que los espacios en blanco se derrumbó: espacio inicial y final se elimina, y cualquier otra secuencia de espacios en blanco sustituido por un único espacio. Para conseguir espacios adicionales o nuevas líneas o pestañas, tienen que ser insertados de forma explícita. A continuación vamos a utilizar el espacio para insertar un espacio y un salto de línea para insertar un salto de línea dura. XSL probablemente proporcionar un genérico de texto para ese objeto (algo similar a la previa de HTML), en cuyo caso el espacio y salto de línea pueden ser definidas como macros XSL.

<template match="fig">
  <css:chunk text-align="center">
    Figura
    <css:space/>
    <Css: Nombre de contador = estilo "figno" = "upper-alpha"
                 font-weight = "bold"
                 color = "blue" />
    <css:newline/>
    <process-children/>
  </ Css: trozo>
</ Template>
XSL proporciona un objeto predefinido que inserta el valor de un atributo. Uso de que, la función de CSS attr (...) se sustituye por

<value-of expr="attribute(...)" />
Otras propiedades de cadena de valor

Font-family es otra propiedad que utiliza una mezcla de cadenas y palabras clave entre comillas. Se podría dividirse en dos. Eso haría que el modelo de herencia diferente, pero evite citas dentro de citas:

<Css: trozo font-family = "Helvetica, sans enmalle"
            generic-font-family = "sans-serif"> ... </>
text-align También acepta cadenas, una división similar podría ser posible.

Objetos Especializados

Se puede llevar a las hojas más fácilmente legibles si un pequeño número de objetos de conveniencia, en forma de "subclases" o versiones "curry" de trozo se añade,. Los candidatos obvios son hr (regla horizontal, un trozo de ciertas propiedades de borde predeterminado), bloque (un trozo de 'display' preset a 'block'), y en línea (similar a 'inline').

Aquí está un ejemplo de una regla de plantilla que utiliza esos objetos derivados. Da formato Pará elementos del documento de origen como elementos de bloque de CSS con un signo Pilcrow roja al final.

<template match="para">
  <css:block margin-top="1.2em">
    <process-children />
    <css:inline color="#F00"> ¶ </ css: inline>
  </ Css: block>
</ Template>

API SIMPLE PARA XML Y MODELO EN OBJETOS PARA LA REPRESENTACIÓN DE DOCUMENTOS.

API simple para XML y modelo en objetos para la representacion de documentos

SAX son las siglas de "Simple API for XML", originalmente, una API únicamente para el lenguaje de programación Java, que después se convirtió en la API estándar de facto para usar XML en JAVA. Existen versiones de SAX no sólo para JAVA, si no también para otros lenguajes de programación (como python).
Analizador o parser SAX

Detecta cuándo empieza y termina un elemento o el documento, o un conjunto de caracteres, etc. (genera eventos)
Gestiona los espacios de nombres.
Comprueba que el documento está bien formado.
Las aplicaciones necesitan implementar manejadores de los eventos notificados.
SAX lee secuencialmente de principio a fin, sin cargar todo el documento en memoria.
Ventaja y desventajas
Eficiencia en cuanto al tiempo y la memoria empleados en el análisis
No dispone de la estructura en árbol.
Es más difícil de manipular.
Realiza una lectura secuencial del documento por lo que una vez leído no se puede volver atrás, algo que DOM sí permite.
El DocumentObjectModel o DOM ('Modelo de Objetos del Documento' o 'Modelo en Objetos para la Representación de Documentos') es esencialmente una interfaz de programación de aplicaciones (API) que proporciona un conjunto estándar de objetos para representar documentos HTML y XML, un modelo estándar sobre cómo pueden combinarse dichos objetos, y una interfaz estándar para acceder a ellos y manipularlos. A través del DOM, los programas pueden acceder y modificar el contenido, estructura y estilo de los documentos HTML y XML, que es para lo que se diseñó principalmente.

El responsable del DOM es el World Wide Web Consortium (W3C).
El DOM es una interfaz de programación de aplicaciones para acceder, añadir y cambiar dinámicamente contenido estructurado en documentos con lenguajes como ECMAScript (JavaScript).

DESARROLLO DEL DOM

La primera vez que el DOM se utilizó, fue con el navegador Netscape Navigator en su versión 2.0. Este DOM se conoce también como «modelo básico», o «DOM nivel 0». Internet Explorer 3.0 fue el primer navegador de Microsoft que utilizó este nivel. Netscape 3.0 empezó a utilizar rollovers. Microsoft empezó a usar rollovers en Internet Explorer 4.0. Netscape 4.0 agregó la capacidad de detectar eventos ocurridos en el ratón y el teclado. Una característica de este navegador fue el uso de capas. Sin embargo, esta capacidad se ha eliminado en los navegadores creados posteriormente.

En Internet Explorer 4.0 todos los elementos de una página web se empezaron a considerar objetos computacionales con la capacidad de ser modificados. Debido a las diferencias en estos navegadores, el World Wide Web Consortium emitió una especificación denominada «DOM nivel 1» en el mes de octubre de 1998 en la cual se consideraron las características y manipulación de todos los elementos existentes en los archivos HTML y XML. En noviembre del año 2000 se emitió la especificación del «DOM nivel 2». En esta especificación se incluyó la manipulación de eventos en el navegador, la capacidad de interacción con CSS, y la manipulación de partes del texto en las páginas de la web. «DOM nivel 3» se emitió en abril de 2004; utiliza la definición de tipo de documento (DTD) y la validación de documentos.

Creación y Consumo de servicios web XML.

Existen numerosas definiciones de Servicios Web y esto demuestra, en parte, la gran complejidad de los servicios que se agrupan bajo este término y las implicaciones asociadas a ellos. Hasta ahora la definición más general y convincente es decir que los Servicios Web son el conjunto de aplicaciones o tecnologías con capacidad para interoperar en la Web. Estas tecnologías intercambian datos entre ellas con el fin de ofrecer unos servicios.

La World Wide Web no es sólo un espacio de información, también es un espacio de interacción. Utilizando la Web como plataforma, los usuarios, de forma remota, pueden solicitar un servicio que algún proveedor ofrezca en la red. Pero para que esta interacción funcione, deben existir unos mecanismos de comunicación estándares entre diferentes aplicaciones. Estos mecanismos deben poder interactuar entre sí para presentar la información de forma dinámica al usuario. Se precisa, pues, una arquitectura de referencia estándar que haga posible la interoperabilidad y extensibilidad entre las distintas aplicaciones y que permita su combinación para realizar operaciones complejas.


Fuente: W3C Oficina Española. "Los Servicios Web en funcionamiento". Guía Breve de Servicios Web. http://www.w3c.es/Divulgacion/Guiasbreves/ServiciosWeb

Con el fin de estandarizar los diferentes aspectos relacionados con los servicios web o Web Services (WS), el W3C recoge todo lo referente a estos en: Web Services Activity (http://www.w3.org/2002/ws/).

Así pues, Web Services (WS) ofrece una un significado estándar para interoperar entre diferentes aplicaciones de software corriendo en diferentes plataformas y/o marcos de trabajo. El W3C pretende diseñar la arquitectura, definirla y crear el núcleo de tecnologías que hagan posible los Servicios Web. Esta arquitectura se basa en los siguientes componentes:

· Diseñar un marco de mensajería: 

o Simple SOAP: Simple Object Access Protocol es un protocolo simple para intercambiar información estructurada en un ambiente descentralizado y distribuido. "Messaging Framework" define, usando tecnologías XML, un marco extensible de mensajería que contiene una construcción del mensaje que se pueda intercambiar con una variedad de protocolos subyacentes. http://www.w3.org/TR/soap12-part1/

o Web Services Addressing (WS-Addressing): Direccionamiento de Servicios Web. La dirección de los servicios Web proporciona mecanismos neutrales para transportar los servicios web y los mensajes. Define un sistema de características abstractas y una representación de XML para referirse a servicios de la Web y para facilitar la dirección final de los mensajes. Esta especificación permite a los sistemas de mensajería soportar la transmisión del mensaje a través de redes que incluyen el procesado de nodos tales como gestión final, cortafuegos y pasarelas mediante una forma de transporte neutro. http://www.w3.org/TR/ws-addr-core/

o SOAP Message Transmission Optimization (MTOM) Descripción de la Optimización de la Transmisión del Mensaje. Describe una característica abstracta y una puesta en práctica concreta para optimizar el formato de la transmisión y/o de la vía de los mensajes SOAP. http://www.w3.org/TR/soap12-mtom/

· Descripción de los Servicios: 

o Web Services Description Language (WSDL): Lenguaje de Descripción de los Servicios Web. Se trata de un lenguaje para describir Servicios Web. La especificación define el lenguaje básico que puede usarse para describir servicios Web basados en un modelo abstracto de lo que ofrece el servicio. También define los criterios de conformidad de los documentos en relación a este lenguaje. http://www.w3.org/TR/wsdl20/

o Web Services Choreography Description Language (WS-CDL): Lenguaje de Descripción de la Coreografía de los Servicios Web. Es un lenguaje basado en XML que describe colaboraciones peer to peer de los participantes definiendo, desde un punto de vista global, un comportamiento observable común y complementario; donde ordenado el mensaje, intercambia el resultado de acuerdo a un objetivo de negocios común. http://www.w3.org/TR/ws-cdl-10/

Los servicios web que se basan en XML permiten que las aplicaciones compartan información y que además invoquen funciones de otras aplicaciones independientemente de cómo se hayan creado dichas aplicaciones e independientemente del sistemas operativo o plataforma en que se ejecuten y de los dispositivos utilizados en el acceso. Los servicios Web XML, aunque sean independientes entre sí, pueden vincularse para realizar una tarea. Por ejemplo, Google, utiliza un Servicio Web -Google Web APIs- basado en los estándares SOAP y WSDL que permite programar en Java, Perl ó Visual Studio.NET y que sirve para la recuperación de información permitiendo utilizar este buscador en distintas plataformas y Servicios Web. http://www.google.com/apis/ Por su parte, Amazon Web Services ofrece una serie de de aplicaciones de referencia que permiten a los desarrolladores acceso directo a la plataforma de tecnología de Amazon y construir aplicaciones propias. Una lista promenorizada de muchos de los servicios web existentes en la actualidad los ofrece XMethod: http://www.xmethods.com

Además, existen numerosos proyectos como Web Services and Semantic (WS2) Project (http://www.w3.org/2004/WS2/) cuyo objetivo es promover los Servicios Web y trabajar en la integración de la semántica en la Web, o el proyecto Infrawebs Europe http://www.infrawebs.org/ cuyo objetivo es desarrollar un marco para que los desarrolladores de software y proveedores de servicios puedan generar y establecer plataformas de desarrollo para aplicaciones de Servicios Web que sean abiertas, extensibles y reconfigurables.

Como se ha afirmado anteriormente, los servicios web se componen de varias capas entre las que destacan: servicios de transporte (constituidos por los protocolos del nivel más bajo, que codifican la información independientemente de su formato, y que pueden ser comunes a otros servicios), de mensajería, de descripción y de descubrimiento. 

En la capa inferior se encuentran los servicios de transporte que son los encargados de establecer la conexión y el puerto utilizado. Lo más común es emplear el protocolo de hipertexto HTTP, pero también se pueden usar otros protocolos como SMTP (Simple Mail Transfer Protocol o Protocolo de Transmisión de Correo Simple que es el protocolo que nos permite recibir correos electrónicos), o el protocolo FTP (File Transfer Protocol). En la capa siguiente se encuentran los servicios de mensajería que especifican cómo se tiene que codificar el mensaje que contiene los datos que se intercambian entre el ordenador cliente y el ordenador servidor. Como se ha afirmado, el protocolo más utilizado en esta capa es SOAP que permite utilizar cualquiera de los protocolos de transporte antes mencionados y que utiliza el lenguaje XML para especificar los mensajes.

Por su parte, la función del lenguaje WSDL (Web Service Description Language) es decirle a una aplicación qué formato usar para comunicarse, especificando por medio de un lenguaje estándar, tanto la dirección del servicio como la interfaz que se va a utilizar. WSDL es un lenguaje basado en XML para describir servicios en la Web. Ofrece a los proveedores de servicios, una formato básico de descripción de las peticiones de servicios web sobre diferentes protocolos o codificaciones. 

Existe un grupo de trabajo dentro del W3C, el Web Services Description Working Group http://www.w3.org/2002/ws/desc/ que analiza y desarrolla el lenguaje WSDL. WSDL se usa para describir qué puede hacer un servicio web, dónde reside, y cómo invocarlo. WSDL define los servicios como colecciones de puntos finales de la red o puertos. En WSDL la definición abstracta de puntos finales y mensajes se separa de su concreto despliegue en la red o formato de datos ligados. Esto permite reutilizar las definiciones abstractas de los mensajes, que son descripciones abstractas de los datos que están siendo intercambiados, y los tipos de puerto, que son colecciones abstractas de operaciones. El protocolo concreto y las especificaciones del formato de datos para un tipo particular de puerto constituye un enlace reutilizabe. Un puerto se define por asociación a una dirección de red con un enlace reutilizable; una colección de puertos define un servicio. Y, así, un documento WSDL usa los siguientes elementos en la definición de servicios en red:

· Tipos (Types): un contenedor para definiciones del tipo de datos que usan algunos tipos de sistemas (tal como XSD). 

· Mensaje (Message): una definición abstracta tipo del dato que está siendo comunicado. 

· Operación (Operation): una descripción abstracta de una acción soportada por el servicio. 

· Tipo de puerto (Port Type): un conjunto abstracto de operaciones soportadas por uno o más puntos finales. 

· Conexión (Binding): un protocolo concreto y una especificación de formato de datos para un tipo de puerto particular. 

· Puerto (Port): un punto final individual definido como una combinación de una conexióny una dirección de la red. 

· Servicio (Service): una colección de puntos finales relacionados. 

Por último, en la capa superior se encuentra UDDI (Universal Description, Discovery and Integration), un protocolo que permite no sólo describir servicios web, sino también describir productos, compañías, transacciones, etc. UDDI es uno de los principales edificios construidos para llevar a cabo los servicios Web. UDDI provee un mecanismo para que los clientes encuentren de forma dinámica otros servicios web creando una plataforma interoperable estándar que permite a las compañías usar de forma rápida, fácil y dinámica los servicios Web. Usando la interfaz de UDDI, pueden conectarse dinámicamente la empresas con los servicios proporcionados por socios externos. Para ello es necesario registrarse en UDDI y los registros pueden tener diversos propósitos y usarse en distintos contextos. Existen 2 tipos de clientes: compañías que desean publicar un servicio (y su interfaz de uso) y clientes que desean obtener cierta clase de servicios por medio de una conexión. UDDI se monta sobre SOAP y asume que las consultas y las respuestas son objetos de UDDI enviados como mensajes de SOAP. El W3C también está teniendo en consideración los desarrollos del protocolo UDDI. Se trata de un esfuerzo conjunto de la industria y en el que intervienen proveedores de las principales plataformas y software, así como operadores en el mercado y líderes de los negocios dentro del consorcio de los estándares OASIS. El proyecto UDDI no es específico de una industria, sino que cualquier compañía de cualquier parte del mundo puede beneficiarse de esta iniciativa. http://www.uddi.org/

Así pues, la plataforma básica de los Servicios Web es el lenguaje XML construido sobre el protocolo de hipertexto HTTP y para el intercambio de esta información estructurada en un entorno descentralizado y distribuido, se utiliza el protocolo SOAP (Simple Object Access Protocol), pero en los Servicios Web también intervienen otros mecanismos, lenguajes y tecnologías entre las que se encuentran el lenguaje WSDL, el protocolo UDDI y otros lenguajes como WSFL, WSML, WSMO, WSMX, etc.

El lenguaje WSFL o Web Services Flow Language es un lenguaje XML para describir la composición de los servicios web como parte de una definición del proceso de negocio. Fue diseñado por IBM como parte de un marco tecnológico de servicios web y para completar las especificaciones existentes. WSDL considera 2 tipos de servicios web: el primer tipo especifica un proceso de negocio ejecutable conocido como Modelo de flujo (flowModel) y el segundo tipo es un negocio en colaboración conocido como Modelo global (globalModel). 



The layered Web services stack with UDDI. 
Fuente: Tom Bellwood. Understanding UDDI.


Flow of UDDI messages between Client and Registry.Fuente: Tom Bellwood. Understanding UDDI.

Para describir los servicios web, el W3C recomienda utilizar el Web Service Modeling Language (WSML) o Lenguaje de Modelado de Servicios Web que provee una sintaxis formal y una semántica para el modelado de ontologías de servicios web (Web Service Modeling Ontology -WSMO-). WSML está basado en diferentes lógicas formales, llamadas Lógica de descripción (Description Logics), Lógica de Primer Orden (First-Order Logic) y Lógica de Programación (Logic Programming), que se usan para el modelado de Servicios de la Web Semántica. WSML consta de un número de variantes basadas en estas diferentes lógicas formales llamadas WSML-Core, WSML-DL, WSML-Flight, WSML-Rule y WSML-Full. WSML-Core es el núcleo el lenguaje y las otras variantes WSML ofrecen incrementos de expresividad en la dirección de la Descripción Lógica y la Lógica de Programación. Por último, ambos paradigmas se unifican en WSML-Full, la variante más expresiva de WSML.

WSML se especifica en términos de una sintaxis normativa legible por seres humanos. Pero además de esta sintaxis legible por seres humanos, WSML tiene una sintaxis XML y RDF para el intercambio sobre la Web y para la interoperabilidad con aplicaciones basadas en RDF. También es posible el mapeo entre ontologías WSML y ontologías OWL para interoperar con ontologías OWL por medio de un subconjunto semántico común de OWL y WSML. Más información al respecto, se puede obtener en: http://www.wsmo.org/wsml/wsml-syntax, http://www.wsmo.org/wsml y http://www.w3.org/Submission/WSML/.

Por su parte, Web Service Modeling Ontology (WSMO) u Ontología de Modelado para Servicios Web se basa en el Marco de Modelado de Servicios Web (WSMF) que separa los elementos que se necesitan para describir servicios en ontologías, servicios Web, objetivos y mediadores. WSML es el lenguaje usado para describir todos estos elementos. El modelo de servicios describe el comportamiento del servicio en términos de procesos y de constructos de control. La base conecta procesos, entradas y salidas en el modelo de proceso a un determinado protocolo de transporte descrito en un documento de WSDL (http://www.wsmo.org y http://www.w3.org/Submission/WSMO/)

WSMO supone uno de los mayores esfuerzos con el propósito de especificar la información semántica de los Servicios Web para hacer posible la automatización de servicios, su composición y ejecución. WSMO recomienda el uso de vocabularios ampliamente aceptados tales como metadatos Dublin Core y FOAF. En WSMO, un objetivo especifica qué quiere el usuario y las descripción del servicio Web definen la capacidad que proporciona el servicio. Con WSMO también pueden expresarse las propiedades no funcionales del servicio. (http://www.wsmo.org/TR/d2/v1.2/)

También se ha desarrollado WSMX (Web Service Modelling eXecution environment) que es el entorno de ejecución de modelado de servicios web y la implementación de referencia de WSMO. Se trata de la ejecución de un entorno para integración de las aplicaciones de los compañías donde los servicios web están integrados por varias aplicaciones. El objetivo es incrementar la automatización de los procesos en los negocios de una manera flexible mientras se ofrecen soluciones de integración escalable. El lenguaje interno de WSMX es WSML. (http://www.wsmx.org/)

Por último, también existe el lenguaje SWSL (Semantic Web Services Language) un lenguaje para describir la ontología de los servicios de la Web Semántica (SWSO). SWSL tiene 2 partes: SWSL-FOL, un lenguaje de lógica de primer orden, y SWSLRules, un lenguaje basado en reglas. SWSL-FOL se usa principalmente para la especificación formal de la ontología y para proeer interoperabilidad con otros modelos de procesos basados en la lógica de primer orden y otras ontologías de servicios. Por el contrario, SESL-Rules está diseñado para ser un lenguaje actual para la especificación de servicios. (http://www.w3.org/Submission/SWSF-SWSL/)

Otros proyectos destacables en el campo de la semántica de los servicios web son: 

· Semantic Web Enabled Web Services (SWWS): es un proyecto de la UE. http://swws.semanticweb.org/

· Ontogrid: es un proyecto que coordina la Universidad Politécnica de Madrid. http://www.ontogrid.net

· Ajax MAssive Storage Systems (AMASS): http://codinginparadise.org/projects/storage/README.html

Un nuevo estudio de la industria, Semantic Wave 2006, predice que el mercado de la tecnología semántica rondará los "50 billones de dólares USA" hacia 2010, con los consiguientes impactos sobre las industrias de las tecnologías de la información y la comunicación. Pero, sin duda, también tendrán su impacto económico sobre los usuarios de la red. Los servicios de la Web Semántica permiten que las aplicaciones ya no estén alojadas en los ordenadores clientes (como hasta ahora ocurría con las aplicaciones que se descargaban, ejecutaban e instalaban en el ordenador del usuario, ya fuera mediante programas originales o copias piratas), sino que permanecerán en los servidores y serán ofrecidas por un proveedor a modo de servicio web al que se deberá acceder cada vez que se quiera hacer uso del servicio. Esto es, con la puesta en marcha de los servicios web se podrá cobrar por cada acceso o uso individual del servicio web correspondiente. Una filosofía de signo bien contrario a la que, en paralelo, se está desarrollando mediante la llamada Web social y colaborativa o Web 2.0


1 comentario:

  1. muy bien amed, te felicito te estas superando, nada mas como aporte, o te falta agregar mas imagenes, por que eso de agregar mucho texto aburre el que esta leyendo...

    ResponderEliminar