XML - XML

XML (estándar)
Lenguaje de marcado extensible
Lenguaje de marcado extensible (XML) logo.svg
Estado Publicado, Recomendación del W3C
Año iniciado 1996 ; Hace 25 años ( 1996 )
Publicado por primera vez 10 de febrero de 1998 ; Hace 23 años (como recomendación del W3C) ( 1998-02-10 )
Ultima versión 1.1 (Segunda edición)
29 de septiembre de 2006 ; hace 15 años ( 29 de septiembre de 2006 )
Organización Consorcio World Wide Web (W3C)
Editores
Estándares básicos SGML
Estándares relacionados Esquema XML
Dominio Serialización de datos
Abreviatura XML
Sitio web www .w3 .org / xml
XML (formato de archivo)
Extensión de nombre de archivo
.xml
Tipo de medio de Internet
Identificador de tipo uniforme (UTI) public.xml
Conformación de UTI public.text
número mágico <?xml
Desarrollado por Consorcio Mundial de la red
Tipo de formato Lenguaje de marcado
Extendido desde SGML
Extendido a
Estándar
¿ Formato abierto ?

El lenguaje de marcado extensible ( XML ) es un lenguaje de marcado que define un conjunto de reglas para codificar documentos en un formato que es legible por humanos y por máquina . La especificación XML 1.0 del World Wide Web Consortium de 1998 y varias otras especificaciones relacionadas, todas ellas estándares abiertos libres , definen XML.

Los objetivos de diseño de XML enfatizan la simplicidad, la generalidad y la usabilidad en Internet . Es un formato de datos textuales con un fuerte soporte a través de Unicode para diferentes lenguajes humanos . Aunque el diseño de XML se centra en documentos, el lenguaje se utiliza ampliamente para la representación de estructuras de datos arbitrarias como las que se utilizan en los servicios web .

Existen varios sistemas de esquema para ayudar en la definición de lenguajes basados ​​en XML, mientras que los programadores han desarrollado muchas interfaces de programación de aplicaciones (API) para ayudar al procesamiento de datos XML.

Aplicaciones

La esencia de por qué son necesarios los lenguajes de marcado extensibles se explica en Lenguaje de marcado (por ejemplo, consulte Lenguaje de marcado § XML ) y en Lenguaje de marcado generalizado estándar .

Se han desarrollado cientos de formatos de documentos que utilizan sintaxis XML, incluidos RSS , Atom , SOAP , SVG y XHTML . Formatos basados en XML se han convertido en el valor predeterminado para muchas herramientas de oficina-productividad, incluyendo Microsoft Office ( Office Open XML ), OpenOffice.org y LibreOffice ( OpenDocument ), y de Apple 's iWork . XML también ha proporcionado el lenguaje base para protocolos de comunicación como XMPP . Las aplicaciones para Microsoft .NET Framework utilizan archivos XML para la configuración y las listas de propiedades son una implementación del almacenamiento de configuración construido en XML.

Muchos estándares de datos de la industria, como Health Level 7 , OpenTravel Alliance , FpML , MISMO y National Information Exchange Model, se basan en XML y las características enriquecidas de la especificación del esquema XML. Muchos de estos estándares son bastante complejos y no es raro que una especificación comprenda varios miles de páginas. En la publicación, Darwin Information Typing Architecture es un estándar de datos de la industria XML. XML se utiliza ampliamente para respaldar varios formatos de publicación.

XML se utiliza ampliamente en una arquitectura orientada a servicios (SOA). Los sistemas dispares se comunican entre sí mediante el intercambio de mensajes XML. El formato de intercambio de mensajes está estandarizado como un esquema XML (XSD). Esto también se conoce como esquema canónico. XML se ha vuelto de uso común para el intercambio de datos a través de Internet. IETF RFC: 3023 , ahora reemplazado por RFC: 7303 , dio reglas para la construcción de tipos de medios de Internet para su uso al enviar XML. También define los tipos de medios application/xmly text/xml, que solo dicen que los datos están en XML, y nada sobre su semántica .

RFC 7303 también recomienda que a los lenguajes basados ​​en XML se les den tipos de medios terminados en +xml; por ejemplo image/svg+xmlpara SVG . Otras pautas para el uso de XML en un contexto de red aparecen en RFC 3470, también conocido como IETF BCP 70, un documento que cubre muchos aspectos del diseño y la implementación de un lenguaje basado en XML.

Terminología clave

El material de esta sección se basa en la especificación XML. Esta no es una lista exhaustiva de todas las construcciones que aparecen en XML; Proporciona una introducción a los conceptos clave que se encuentran con mayor frecuencia en el uso diario.

Personaje

Un documento XML es una cadena de caracteres . Casi todos los caracteres Unicode legales pueden aparecer en un documento XML.

Procesador y aplicación

El procesador analiza el marcado y pasa información estructurada a una aplicación . La especificación establece requisitos sobre lo que un procesador XML debe hacer y lo que no debe hacer, pero la aplicación está fuera de su alcance. El procesador (como lo llama la especificación) a menudo se denomina coloquialmente un analizador XML .

Marcado y contenido

Los caracteres que componen un documento XML se dividen en marcado y contenido , que pueden distinguirse por la aplicación de reglas sintácticas simples. Generalmente, las cadenas que constituyen el marcado comienzan con el carácter <y terminan con a >, o comienzan con el carácter &y terminan con a ;. Las cadenas de caracteres que no están marcadas son contenido. Sin embargo, en una sección CDATA , los delimitadores <![CDATA[y ]]>se clasifican como marcado, mientras que el texto entre ellos se clasifica como contenido. Además, los espacios en blanco antes y después del elemento más externo se clasifican como marcado.

Etiqueta

Una etiqueta es una construcción de marcado que comienza con <y termina con >. Hay tres tipos de etiquetas:
  • etiqueta de inicio , como <section>;
  • etiqueta final , como </section>;
  • etiqueta de elemento vacío , como <line-break />.

Elemento

Un elemento es un componente de documento lógico que comienza con una etiqueta de inicio y termina con una etiqueta de finalización coincidente o consta solo de una etiqueta de elemento vacío. Los caracteres entre la etiqueta inicial y la etiqueta final, si los hay, son el contenido del elemento y pueden contener marcas, incluidos otros elementos, que se denominan elementos secundarios . Un ejemplo es <greeting>Hello, world!</greeting>. Otro es <line-break />.

Atributo

Un atributo es una construcción de marcado que consta de un par de nombre-valor que existe dentro de una etiqueta de inicio o una etiqueta de elemento vacío. Un ejemplo es <img src="madonna.jpg" alt="Madonna" />, donde los nombres de los atributos son "src" y "alt", y sus valores son "madonna.jpg" y "Madonna" respectivamente. Otro ejemplo es <step number="3">Connect A to B.</step>, donde el nombre del atributo es "número" y su valor es "3". Un atributo XML solo puede tener un valor único y cada atributo puede aparecer como máximo una vez en cada elemento. En la situación común en la que se desea una lista de valores múltiples, esto debe hacerse codificando la lista en un atributo XML bien formado con algún formato más allá de lo que XML define a sí mismo. Por lo general, se trata de una lista delimitada por comas o por punto y coma o, si se sabe que los valores individuales no contienen espacios, se puede utilizar una lista delimitada por espacios. <div class="inner greeting-box">Welcome!</div>, donde el atributo "clase" tiene tanto el valor "cuadro de saludo interno" y también indica los dos nombres de clase CSS "interno" y "cuadro de saludo".

Declaración XML

Los documentos XML pueden comenzar con una declaración XML que describe cierta información sobre sí mismos. Un ejemplo es <?xml version="1.0" encoding="UTF-8"?>.

Personajes y escapar

Los documentos XML constan enteramente de caracteres del repertorio Unicode . Excepto por una pequeña cantidad de caracteres de control específicamente excluidos , cualquier carácter definido por Unicode puede aparecer dentro del contenido de un documento XML.

XML incluye facilidades para identificar la codificación de los caracteres Unicode que componen el documento y para expresar caracteres que, por una razón u otra, no pueden usarse directamente.

Caracteres válidos

Los puntos de código Unicode en los siguientes rangos son válidos en documentos XML 1.0:

  • U + 0009 (pestaña horizontal), U + 000A (salto de línea), U + 000D (retorno de carro): estos son los únicos controles C0 aceptados en XML 1.0;
  • U + 0020 – U + D7FF, U + E000 – U + FFFD: esto excluye algunos no caracteres en el BMP (todos los sustitutos, U + FFFE y U + FFFF están prohibidos);
  • U + 10000 – U + 10FFFF: esto incluye todos los puntos de código en planos suplementarios, incluidos los no caracteres.

XML 1.1 amplía el conjunto de caracteres permitidos para incluir todo lo anterior, más los caracteres restantes en el rango U + 0001 – U + 001F. Al mismo tiempo, sin embargo, restringe el uso de caracteres de control C0 y C1 que no sean U + 0009 (tabulación horizontal), U + 000A (salto de línea), U + 000D (retorno de carro) y U + 0085 (siguiente línea ) requiriendo que se escriban en formato de escape (por ejemplo, U + 0001 debe escribirse como &#x01;o su equivalente). En el caso de los caracteres C1, esta restricción es una incompatibilidad hacia atrás; se introdujo para permitir la detección de errores de codificación comunes.

El punto de código U + 0000 (nulo) es el único carácter que no está permitido en ningún documento XML 1.0 o 1.1.

Detección de codificación

El conjunto de caracteres Unicode se puede codificar en bytes para su almacenamiento o transmisión de diversas formas, denominadas "codificaciones". El propio Unicode define codificaciones que cubren todo el repertorio; los más conocidos incluyen UTF-8 y UTF-16 . Hay muchas otras codificaciones de texto anteriores a Unicode, como ASCII e ISO / IEC 8859 ; sus repertorios de caracteres en casi todos los casos son subconjuntos del juego de caracteres Unicode.

XML permite el uso de cualquiera de las codificaciones definidas por Unicode y cualquier otra codificación cuyos caracteres también aparezcan en Unicode. XML también proporciona un mecanismo mediante el cual un procesador XML puede determinar de manera confiable, sin ningún conocimiento previo, qué codificación se está utilizando. Las codificaciones distintas de UTF-8 y UTF-16 no son necesariamente reconocidas por todos los analizadores XML.

Escapando

XML proporciona facilidades de escape para incluir caracteres cuya inclusión directa es problemática. Por ejemplo:

  • Los caracteres "<" y "&" son marcadores de sintaxis clave y es posible que nunca aparezcan en el contenido fuera de una sección CDATA . Se permite, pero no se recomienda, utilizar "<" en valores de entidad XML.
  • Algunas codificaciones de caracteres solo admiten un subconjunto de Unicode. Por ejemplo, es legal codificar un documento XML en ASCII, pero ASCII carece de puntos de código para caracteres Unicode como "é".
  • Puede que no sea posible escribir el carácter en la máquina del autor.
  • Algunos caracteres tienen glifos que no se pueden distinguir visualmente de otros caracteres, como el espacio que no se separa ( &#xa0;) "" y el espacio ( &#x20;) "", y la letra mayúscula cirílica A ( &#x410;) "А" y la letra mayúscula latina A ( &#x41;) "A".

Hay cinco entidades predefinidas :

  • &lt; representa "<";
  • &gt; representa ">";
  • &amp; representa "&";
  • &apos;representa " ' ";
  • &quot;representa ' " '.

Todos los caracteres Unicode permitidos se pueden representar con una referencia de carácter numérico . Considere el carácter chino "中", cuyo código numérico en Unicode es hexadecimal 4E2D, o decimal 20,013. Un usuario cuyo teclado no ofrezca ningún método para ingresar este carácter aún podría insertarlo en un documento XML codificado como &#20013;o &#x4e2d;. De manera similar, la cadena "I <3 Jörg" podría codificarse para su inclusión en un documento XML como I &lt;3 J&#xF6;rg.

&#0;Sin embargo, no se permite porque el carácter nulo es uno de los caracteres de control excluidos de XML, incluso cuando se utiliza una referencia de carácter numérico. Se necesita un mecanismo de codificación alternativo como Base64 para representar tales caracteres.

Comentarios

Los comentarios pueden aparecer en cualquier parte de un documento fuera de otras marcas. Los comentarios no pueden aparecer antes de la declaración XML. Los comentarios comienzan <!--y terminan con -->. Por compatibilidad con SGML , la cadena "-" (guión doble) no está permitida dentro de los comentarios; esto significa que los comentarios no se pueden anidar. El signo comercial no tiene un significado especial dentro de los comentarios, por lo que las referencias a entidades y caracteres no se reconocen como tales y no hay forma de representar caracteres fuera del conjunto de caracteres de la codificación del documento.

Un ejemplo de un comentario válido: <!--no need to escape <code> & such in comments-->

Uso internacional

XML 1.0 (quinta edición) y XML 1.1 admiten el uso directo de casi cualquier carácter Unicode en los nombres de elementos, atributos, comentarios, datos de caracteres e instrucciones de procesamiento (que no sean los que tienen un significado simbólico especial en XML mismo, como less -que el signo, "<"). El siguiente es un documento XML bien formado que incluye caracteres chinos , armenios y cirílicos :

<?xml version="1.0" encoding="UTF-8"?>
<俄语 լեզու="ռուսերեն">данные</俄语>

Corrección sintáctica y manejo de errores

La especificación XML define un documento XML como un texto bien formado , lo que significa que satisface una lista de reglas de sintaxis proporcionadas en la especificación. Algunos puntos clave en la lista bastante extensa incluyen:

  • El documento solo contiene caracteres Unicode legales codificados correctamente.
  • Ninguno de los caracteres de sintaxis especial, como <y, &aparece excepto cuando desempeñan sus funciones de marcado y delimitación.
  • La etiqueta de inicio, la etiqueta de fin y la etiqueta de elemento vacío que delimitan los elementos están correctamente anidadas, sin que falte ninguna y ninguna se superponga.
  • Los nombres de las etiquetas distinguen entre mayúsculas y minúsculas; la etiqueta de inicio y la etiqueta de finalización deben coincidir exactamente.
  • ¡Los nombres de las etiquetas no pueden contener ninguno de los caracteres! "# $% & '() * +, /; <=>? @ [\] ^` {|} ~, Ni un carácter de espacio, y no pueden comenzar con "-", ".", o un dígito numérico.
  • Un solo elemento raíz contiene todos los demás elementos.

La definición de un documento XML excluye los textos que contienen violaciones de las reglas de forma correcta; simplemente no son XML. Un procesador XML que se encuentra con una infracción de este tipo debe informar dichos errores y detener el procesamiento normal. Esta política, a la que en ocasiones se hace referencia como " manejo draconiano de errores", contrasta notablemente con el comportamiento de los programas que procesan HTML , que están diseñados para producir un resultado razonable incluso en presencia de graves errores de marcado. La política de XML en esta área ha sido criticada como una violación de la ley de Postel ("Sea conservador en lo que envía; sea liberal en lo que acepta").

La especificación XML define un documento XML válido como un documento XML bien formado que también se ajusta a las reglas de una definición de tipo de documento (DTD).

Esquemas y validación

Además de estar bien formado, un documento XML puede ser válido . Esto significa que contiene una referencia a una definición de tipo de documento (DTD), y que sus elementos y atributos se declaran en esa DTD y siguen las reglas gramaticales para ellos que especifica la DTD.

Los procesadores XML se clasifican como con validación o no validación dependiendo de si verifican o no la validez de los documentos XML. Un procesador que descubre un error de validez debe poder informarlo, pero puede continuar con el procesamiento normal.

Un DTD es un ejemplo de esquema o gramática . Desde la publicación inicial de XML 1.0, ha habido un trabajo sustancial en el área de lenguajes de esquema para XML. Dichos lenguajes de esquema normalmente restringen el conjunto de elementos que se pueden usar en un documento, qué atributos se les pueden aplicar, el orden en el que pueden aparecer y las relaciones padre / hijo permitidas.

Definición de tipo de documento

El lenguaje de esquema más antiguo para XML es la definición de tipo de documento (DTD), heredada de SGML.

Los DTD tienen los siguientes beneficios:

  • El soporte DTD es omnipresente debido a su inclusión en el estándar XML 1.0.
  • Los DTD son concisos en comparación con los lenguajes de esquema basados ​​en elementos y, en consecuencia, presentan más información en una sola pantalla.
  • Los DTD permiten la declaración de conjuntos de entidades públicas estándar para la publicación de caracteres.
  • Los DTD definen un tipo de documento en lugar de los tipos utilizados por un espacio de nombres, agrupando así todas las restricciones de un documento en una sola colección.

Los DTD tienen las siguientes limitaciones:

  • No tienen soporte explícito para características más nuevas de XML, lo más importante, espacios de nombres .
  • Carecen de expresividad. Los DTD XML son más simples que los DTD SGML y hay ciertas estructuras que no se pueden expresar con gramáticas regulares. Los DTD solo admiten tipos de datos rudimentarios.
  • Carecen de legibilidad. Los diseñadores de DTD suelen hacer un uso intensivo de entidades de parámetros (que se comportan esencialmente como macros textuales ), que facilitan la definición de gramáticas complejas, pero a expensas de la claridad.
  • Utilizan una sintaxis basada en la sintaxis de expresión regular , heredada de SGML, para describir el esquema. Las API XML típicas, como SAX , no intentan ofrecer a las aplicaciones una representación estructurada de la sintaxis, por lo que es menos accesible para los programadores que una sintaxis basada en elementos.

Dos características peculiares que distinguen a las DTD de otros tipos de esquemas son el soporte sintáctico para incrustar una DTD en documentos XML y para definir entidades , que son fragmentos arbitrarios de texto o marcado que el procesador XML inserta en la DTD misma y en el documento XML dondequiera que se encuentren. se hace referencia, como el carácter escapa.

La tecnología DTD todavía se utiliza en muchas aplicaciones debido a su ubicuidad.

Esquema

Un lenguaje de esquema más nuevo, descrito por el W3C como el sucesor de DTD, es XML Schema , a menudo denominado por el inicialismo para instancias de XML Schema, XSD (Definición de esquema XML). Los XSD son mucho más poderosos que los DTD para describir lenguajes XML. Utilizan un rico sistema de tipificación de datos y permiten restricciones más detalladas en la estructura lógica de un documento XML. Los XSD también usan un formato basado en XML, lo que hace posible usar herramientas XML comunes para ayudar a procesarlos.

xs: elemento de esquema que define un esquema:

<?xml version="1.0" encoding="ISO-8859-1" ?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"></xs:schema>

RELAJAR NG

RELAX NG (Lenguaje regular para XML de próxima generación) fue especificado inicialmente por OASIS y ahora es un estándar (Parte 2: Validación basada en gramática regular de ISO / IEC 19757 - DSDL ). Los esquemas RELAX NG pueden escribirse en una sintaxis basada en XML o en una sintaxis no XML más compacta; las dos sintaxis son isomórficas y la herramienta de conversión de James Clark , Trang, puede convertir entre ellas sin pérdida de información. RELAX NG tiene un marco de definición y validación más simple que XML Schema, lo que lo hace más fácil de usar e implementar. También tiene la capacidad de utilizar complementos de marco de tipo de datos ; un autor de esquemas RELAX NG, por ejemplo, puede requerir valores en un documento XML para ajustarse a las definiciones en XML Schema Datatypes.

Schematron

Schematron es un lenguaje para hacer afirmaciones sobre la presencia o ausencia de patrones en un documento XML. Normalmente utiliza expresiones XPath . Schematron es ahora un estándar (Parte 3: Validación basada en reglas de ISO / IEC 19757 - DSDL ).

DSDL y otros lenguajes de esquema

DSDL (Lenguajes de definición de esquemas de documentos) es un estándar ISO / IEC de varias partes (ISO / IEC 19757) que reúne un conjunto completo de pequeños lenguajes de esquemas, cada uno dirigido a problemas específicos. DSDL incluye sintaxis completa y compacta RELAX NG , lenguaje de aserción Schematron y lenguajes para definir tipos de datos, restricciones de repertorio de caracteres, cambio de nombre y expansión de entidades, y enrutamiento de fragmentos de documentos basado en espacios de nombres a diferentes validadores. Los lenguajes de esquema DSDL aún no cuentan con el soporte de los esquemas XML por parte de los proveedores y, hasta cierto punto, son una reacción popular de los editores industriales ante la falta de utilidad de los esquemas XML para la publicación .

Algunos lenguajes de esquema no solo describen la estructura de un formato XML en particular, sino que también ofrecen facilidades limitadas para influir en el procesamiento de archivos XML individuales que se ajustan a este formato. Tanto los DTD como los XSD tienen esta capacidad; por ejemplo, pueden proporcionar la facilidad de aumento del conjunto de información y los valores predeterminados de los atributos. RELAX NG y Schematron no los proporcionan intencionalmente.

Especificaciones relacionadas

Se ha desarrollado un conjunto de especificaciones estrechamente relacionadas con XML, que comenzó poco después de la publicación inicial de XML 1.0. Es frecuente el caso de que el término "XML" se utilice para referirse a XML junto con una o más de estas otras tecnologías que se han llegado a considerar como parte del núcleo de XML.

  • Los espacios de nombres XML permiten que el mismo documento contenga elementos y atributos XML tomados de diferentes vocabularios, sin que se produzcan colisiones de nombres . Aunque los espacios de nombres XML no forman parte de la especificación XML en sí, prácticamente todo el software XML también admite espacios de nombres XML.
  • XML Base define el xml:baseatributo, que puede usarse para establecer la base para la resolución de referencias URI relativas dentro del alcance de un solo elemento XML.
  • XML Information Set o XML Infoset es un modelo de datos abstracto para documentos XML en términos de elementos de información . El conjunto de información se usa comúnmente en las especificaciones de los lenguajes XML, por conveniencia al describir las restricciones en las construcciones XML que esos lenguajes permiten.
  • XSL (Extensible Stylesheet Language) es una familia de lenguajes que se utilizan para transformar y representar documentos XML, divididos en tres partes:
  • XSLT (Transformaciones XSL), un lenguaje XML para transformar documentos XML en otros documentos XML u otros formatos como HTML, texto sin formato o XSL-FO. XSLT está estrechamente acoplado con XPath, que utiliza para abordar componentes del documento XML de entrada, principalmente elementos y atributos.
  • XSL-FO (Objetos de formato XSL), un lenguaje XML para renderizar documentos XML, que se utiliza a menudo para generar archivos PDF.
  • XPath (XML Path Language), un lenguaje no XML para abordar los componentes (elementos, atributos, etc.) de un documento XML. XPath se usa ampliamente en otras especificaciones core-XML y en bibliotecas de programación para acceder a datos codificados en XML.
  • XQuery (XML Query) es un lenguaje de consulta XML fuertemente arraigado en XPath y XML Schema. Proporciona métodos para acceder, manipular y devolver XML, y se concibe principalmente como un lenguaje de consulta para bases de datos XML .
  • XML Signature define la sintaxis y las reglas de procesamiento para crear firmas digitales en contenido XML.
  • El cifrado XML define la sintaxis y las reglas de procesamiento para cifrar el contenido XML.
  • xml-model (Parte 11: Asociación de esquemas de ISO / IEC 19757 - DSDL ) define un medio para asociar cualquier documento xml con cualquiera de los tipos de esquema mencionados anteriormente .

Algunas otras especificaciones concebidas como parte del "XML Core" no han logrado una amplia adopción, incluidas XInclude , XLink y XPointer .

Interfaces de programación

Los objetivos de diseño de XML incluyen: "Será fácil escribir programas que procesen documentos XML". A pesar de esto, la especificación XML casi no contiene información sobre cómo los programadores podrían realizar dicho procesamiento. La especificación XML Infoset proporciona un vocabulario para hacer referencia a las construcciones dentro de un documento XML, pero no proporciona ninguna orientación sobre cómo acceder a esta información. Se han desarrollado y utilizado una variedad de API para acceder a XML, y algunas se han estandarizado.

Las API existentes para el procesamiento de XML tienden a pertenecer a estas categorías:

  • API orientadas a la transmisión accesibles desde un lenguaje de programación, por ejemplo, SAX y StAX .
  • API de cruce de árboles accesibles desde un lenguaje de programación, por ejemplo DOM .
  • Enlace de datos XML , que proporciona una traducción automática entre un documento XML y objetos del lenguaje de programación.
  • Lenguajes de transformación declarativa como XSLT y XQuery .
  • Extensiones de sintaxis para lenguajes de programación de propósito general, por ejemplo LINQ y Scala .

Las instalaciones orientadas a la transmisión requieren menos memoria y, para determinadas tareas basadas en un recorrido lineal de un documento XML, son más rápidas y sencillas que otras alternativas. Las API de enlace de datos y de recorrido de árbol normalmente requieren el uso de mucha más memoria, pero a menudo resultan más convenientes para que las utilicen los programadores; algunos incluyen la recuperación declarativa de los componentes del documento mediante el uso de expresiones XPath.

XSLT está diseñado para la descripción declarativa de transformaciones de documentos XML y se ha implementado ampliamente tanto en paquetes del lado del servidor como en navegadores web. XQuery se superpone a XSLT en su funcionalidad, pero está diseñado más para buscar grandes bases de datos XML .

API simple para XML

API simple para XML (SAX) es un léxico , orientada a eventos de la API en la que se lee en serie de un documento y su contenido son reportados como devoluciones de llamada a varios métodos en un objeto manejador de diseño del usuario. SAX es rápido y eficiente de implementar, pero difícil de usar para extraer información al azar del XML, ya que tiende a sobrecargar al autor de la aplicación con el seguimiento de qué parte del documento se está procesando. Se adapta mejor a situaciones en las que ciertos tipos de información siempre se manejan de la misma manera, sin importar dónde se encuentren en el documento.

Extraer análisis sintáctico

El análisis de extracción trata el documento como una serie de elementos leídos en secuencia utilizando el patrón de diseño de iterador . Esto permite la escritura de analizadores de descenso recursivos en los que la estructura del código que realiza el análisis refleja la estructura del XML que se analiza, y los resultados analizados intermedios se pueden usar y acceder como variables locales dentro de las funciones que realizan el análisis, o se pueden transmitir ( como parámetros de función) en funciones de nivel inferior, o devuelto (como valores de retorno de función) a funciones de nivel superior. Ejemplos de analizadores de extracción incluyen Data :: Edit :: Xml en Perl , StAX en el lenguaje de programación Java , XMLPullParser en Smalltalk , XMLReader en PHP , ElementTree.iterparse en Python , System.Xml.XmlReader en .NET Framework y DOM API transversal (NodeIterator y TreeWalker).

Un analizador de extracción crea un iterador que visita secuencialmente los distintos elementos, atributos y datos de un documento XML. El código que usa este iterador puede probar el elemento actual (para decir, por ejemplo, si es una etiqueta de inicio o una etiqueta de fin, o texto) e inspeccionar sus atributos (nombre local, espacio de nombres , valores de atributos XML, valor de texto, etc.), y también puede mover el iterador al siguiente elemento. De este modo, el código puede extraer información del documento a medida que lo atraviesa. El enfoque de descenso recursivo tiende a prestarse a mantener los datos como variables locales escritas en el código que realiza el análisis, mientras que SAX, por ejemplo, normalmente requiere un analizador para mantener manualmente los datos intermedios dentro de una pila de elementos que son elementos padres del elemento. siendo analizado. El código de análisis extraído puede ser más sencillo de entender y mantener que el código de análisis SAX.

Modelo de objetos de documento

Document Object Model (DOM) es una API que permite la navegación de todo el documento como si fuera un árbol de objetos de nodo que representan el contenido del documento. Un documento DOM puede ser creado por un analizador o puede ser generado manualmente por los usuarios (con limitaciones). Los tipos de datos en los nodos DOM son abstractos; las implementaciones proporcionan sus propios enlaces específicos del lenguaje de programación . Las implementaciones de DOM tienden a consumir mucha memoria , ya que generalmente requieren que todo el documento se cargue en la memoria y se construya como un árbol de objetos antes de permitir el acceso.

El enlace de datos

El enlace de datos XML es el enlace de documentos XML a una jerarquía de objetos personalizados y fuertemente tipados, en contraste con los objetos genéricos creados por un analizador DOM. Este enfoque simplifica el desarrollo de código y, en muchos casos, permite identificar los problemas en tiempo de compilación en lugar de en tiempo de ejecución. Es adecuado para aplicaciones donde la estructura del documento es conocida y fija en el momento en que se escribe la aplicación. Los sistemas de enlace de datos de ejemplo incluyen la arquitectura Java para el enlace XML (JAXB), la serialización XML en .NET Framework . y serialización XML en gSOAP .

XML como tipo de datos

XML ha aparecido como un tipo de datos de primera clase en otros lenguajes. La extensión ECMAScript para XML (E4X) para el lenguaje ECMAScript / JavaScript define explícitamente dos objetos específicos (XML y XMLList) para JavaScript, que admiten nodos de documentos XML y listas de nodos XML como objetos distintos y utilizan una notación de puntos que especifica las relaciones entre padres e hijos. . E4X es compatible con los navegadores Mozilla 2.5+ (aunque ahora están en desuso) y Adobe Actionscript , pero no se ha adoptado de manera más universal. Se usan notaciones similares en la implementación de LINQ de Microsoft para Microsoft .NET 3.5 y superior, y en Scala (que usa Java VM). La aplicación xmlsh de código abierto, que proporciona un shell similar a Linux con características especiales para la manipulación de XML, trata de manera similar a XML como un tipo de datos, utilizando la notación <[]>. El marco de descripción de recursos define un tipo de datos rdf:XMLLiteralpara contener XML canónico envuelto . Facebook ha producido extensiones para los lenguajes PHP y JavaScript que agregan XML a la sintaxis central de manera similar a E4X, a saber, XHP y JSX respectivamente.

Historia

XML es un perfil de aplicación de SGML (ISO 8879).

La versatilidad de SGML para la visualización dinámica de información fue comprendida por los primeros editores de medios digitales a finales de la década de 1980 antes del surgimiento de Internet. A mediados de la década de 1990, algunos practicantes de SGML habían adquirido experiencia con la entonces nueva World Wide Web y creían que SGML ofrecía soluciones a algunos de los problemas que probablemente enfrentaría la Web a medida que crecía. Dan Connolly agregó SGML a la lista de actividades del W3C cuando se unió al personal en 1995; El trabajo comenzó a mediados de 1996 cuando el ingeniero de Sun Microsystems , Jon Bosak, desarrolló una carta y reclutó colaboradores. Bosak estaba bien conectado en la pequeña comunidad de personas que tenían experiencia tanto en SGML como en la Web.

XML fue compilado por un grupo de trabajo de once miembros, apoyado por (aproximadamente) 150 miembros del Grupo de Interés. El debate técnico se llevó a cabo en la lista de correo del Grupo de Interés y los problemas se resolvieron por consenso o, cuando eso falló, por mayoría de votos del Grupo de Trabajo. Michael Sperberg-McQueen compiló un registro de decisiones de diseño y sus fundamentos el 4 de diciembre de 1997. James Clark se desempeñó como Líder Técnico del Grupo de Trabajo, contribuyendo notablemente con la <empty />sintaxis de elementos vacíos y el nombre "XML". Otros nombres que se habían propuesto para su consideración incluían "MAGMA" (Arquitectura mínima para aplicaciones de marcado generalizado), "SLIM" (Lenguaje estructurado para marcado de Internet) y "MGML" (Lenguaje de marcado mínimo generalizado). Los coeditores de la especificación fueron originalmente Tim Bray y Michael Sperberg-McQueen . A mitad del proyecto, Bray aceptó un contrato de consultoría con Netscape , lo que provocó vociferantes protestas de Microsoft. A Bray se le pidió temporalmente que renunciara a la dirección editorial. Esto condujo a una intensa disputa en el Grupo de Trabajo, que finalmente se resolvió con el nombramiento de Jean Paoli de Microsoft como tercer coeditor.

El XML Working Group nunca se reunió cara a cara; el diseño se logró mediante una combinación de correo electrónico y teleconferencias semanales. Las principales decisiones de diseño se tomaron en una breve ráfaga de intenso trabajo entre agosto y noviembre de 1996, cuando se publicó el primer Borrador de trabajo de una especificación XML. El trabajo de diseño adicional continuó hasta 1997, y XML 1.0 se convirtió en una Recomendación del W3C el 10 de febrero de 1998.

Fuentes

XML es un perfil de un SGML estándar ISO, y la mayor parte de XML procede de SGML sin cambios. De SGML proviene la separación de estructuras lógicas y físicas (elementos y entidades), la disponibilidad de validación basada en gramática (DTD), la separación de datos y metadatos (elementos y atributos), el contenido mixto, la separación del procesamiento de la representación ( procesamiento instrucciones ) y la sintaxis predeterminada de corchetes angulares. Se eliminó la declaración SGML; por tanto, XML tiene un conjunto de delimitadores fijo y adopta Unicode como conjunto de caracteres del documento .

Otras fuentes de tecnología para XML fueron la TEI (Iniciativa de codificación de texto), que definió un perfil de SGML para su uso como "sintaxis de transferencia"; y HTML , en el que los elementos estaban sincronizados con su recurso, los conjuntos de caracteres del documento estaban separados de la codificación del recurso, el xml:langatributo fue inventado y (como HTTP ) los metadatos acompañaron al recurso en lugar de ser necesarios en la declaración de un enlace. El proyecto ERCS (Extended Reference Concrete Syntax) del proyecto SPREAD (Proyecto de estandarización sobre documentos de Asia oriental) del grupo de expertos en procesamiento de documentos de China / Japón / Corea relacionado con ISO fue la base de las reglas de nomenclatura de XML 1.0; SPREAD también introdujo referencias de caracteres numéricos hexadecimales y el concepto de referencias para hacer disponibles todos los caracteres Unicode. Para soportar mejor ERCS, XML y HTML, el estándar SGML IS 8879 fue revisado en 1996 y 1998 con Adaptaciones WebSGML. El encabezado XML siguió al de ISO HyTime .

Las ideas que se desarrollaron durante la discusión y que son novedosas en XML incluyeron el algoritmo para la detección de codificación y el encabezado de codificación, el objetivo de la instrucción de procesamiento, el atributo xml: space y el nuevo delimitador de cierre para etiquetas de elementos vacíos. La noción de forma correcta en oposición a validez (que permite el análisis sintáctico sin un esquema) se formalizó por primera vez en XML, aunque se había implementado con éxito en el software "Dynatext" de Electronic Book Technology; el software del Proyecto del Nuevo Diccionario de Inglés Oxford de la Universidad de Waterloo; el procesador de texto RISP LISP SGML en Uniscope, Tokio; el sistema de hipertexto IADS del Comando de Misiles del Ejército de los Estados Unidos; Contexto de Mentor Graphics; Interleaf y Xerox Publishing System.

Versiones

Hay dos versiones actuales de XML:

XML 1.0

La primera ( XML 1.0 ) se definió inicialmente en 1998. Desde entonces ha sido objeto de revisiones menores, sin que se le haya dado un nuevo número de versión, y actualmente se encuentra en su quinta edición, publicada el 26 de noviembre de 2008. Está ampliamente implementada y todavía recomendado para uso general.

XML 1.1

El segundo ( XML 1.1 ) se publicó inicialmente el 4 de febrero de 2004, el mismo día que XML 1.0 Third Edition, y actualmente se encuentra en su segunda edición, tal como se publicó el 16 de agosto de 2006. Contiene características (algunas contenciosas) que están destinadas para facilitar el uso de XML en determinados casos. Los principales cambios son permitir el uso de caracteres finales de línea utilizados en plataformas EBCDIC y el uso de scripts y caracteres ausentes en Unicode 3.2. XML 1.1 no está ampliamente implementado y se recomienda para su uso solo por aquellos que necesitan sus características particulares.

Caracteres Unicode válidos en XML 1.0 y XML 1.1

Antes de su lanzamiento de la quinta edición, XML 1.0 se diferenciaba de XML 1.1 en tener requisitos más estrictos para los caracteres disponibles para su uso en los nombres de elementos y atributos e identificadores únicos: en las primeras cuatro ediciones de XML 1.0 los caracteres se enumeraban exclusivamente utilizando una versión específica del Estándar Unicode (Unicode 2.0 a Unicode 3.2.) La quinta edición sustituye el mecanismo de XML 1.1, que está más preparado para el futuro pero reduce la redundancia . El enfoque adoptado en la quinta edición de XML 1.0 y en todas las ediciones de XML 1.1 es que solo ciertos caracteres están prohibidos en los nombres, y todo lo demás está permitido para acomodar caracteres de nombre adecuados en futuras versiones de Unicode. En la quinta edición, los nombres XML pueden contener caracteres en los scripts balineses , cham o fenicios, entre muchos otros agregados a Unicode desde Unicode 3.2.

Casi cualquier punto de código Unicode se puede utilizar en los datos de caracteres y valores de atributo de un documento XML 1.0 o 1.1, incluso si el carácter correspondiente al punto de código no está definido en la versión actual de Unicode. En datos de caracteres y valores de atributos, XML 1.1 permite el uso de más caracteres de control que XML 1.0, pero, para "robustez", la mayoría de los caracteres de control introducidos en XML 1.1 deben expresarse como referencias de caracteres numéricos (y del # x7F al # x9F , que se habían permitido en XML 1.0, están en XML 1.1 incluso se requiere que se expresen como referencias de caracteres numéricos). Entre los caracteres de control admitidos en XML 1.1 hay dos códigos de salto de línea que deben tratarse como espacios en blanco. Los caracteres de espacio en blanco son los únicos códigos de control que se pueden escribir directamente.

XML 2.0

Se ha hablado de un XML 2.0, aunque ninguna organización ha anunciado planes para trabajar en un proyecto de este tipo. XML-SW (SW para skunkworks ), escrito por uno de los desarrolladores originales de XML, contiene algunas propuestas sobre cómo se vería un XML 2.0: eliminación de DTD de la sintaxis, integración de espacios de nombres , XML Base y XML Information Set en la base estándar.

XML binario

El Consorcio World Wide Web también tiene un Grupo de Trabajo de Caracterización Binaria XML que realiza una investigación preliminar sobre casos de uso y propiedades para una codificación binaria de Conjunto de Información XML. El grupo de trabajo no está autorizado para producir normas oficiales. Dado que XML está por definición basado en texto, ITU-T e ISO están utilizando el nombre Fast Infoset para su propio conjunto de información binario para evitar confusiones (véanse la Rec. UIT-T X.891 e ISO / CEI 24824-1).

Crítica

XML y sus extensiones han sido criticados regularmente por su verbosidad, complejidad y redundancia.

Mapear el modelo de árbol básico de XML a sistemas de tipos de lenguajes de programación o bases de datos puede ser difícil, especialmente cuando se usa XML para intercambiar datos altamente estructurados entre aplicaciones, que no era su objetivo principal de diseño. Sin embargo, los sistemas de enlace de datos XML permiten que las aplicaciones accedan a datos XML directamente desde objetos que representan una estructura de datos de los datos en el lenguaje de programación utilizado, lo que garantiza la seguridad de los tipos , en lugar de utilizar DOM o SAX para recuperar datos de una representación directa del XML. sí mismo. Esto se logra creando automáticamente un mapeo entre los elementos del esquema XML XSD del documento y los miembros de una clase para ser representados en la memoria.

Otras críticas intentan refutar la afirmación de que XML es un lenguaje de autodescripción (aunque la especificación XML en sí no hace tal afirmación).

JSON , YAML y S-Expressions se proponen con frecuencia como alternativas más simples (consulte Comparación de formatos de serialización de datos ) que se enfocan en representar datos altamente estructurados en lugar de documentos, que pueden contener contenido altamente estructurado y relativamente no estructurado. Sin embargo, las especificaciones de esquemas XML estandarizados de W3C ofrecen una gama más amplia de tipos de datos XSD estructurados en comparación con los formatos de serialización más simples y ofrecen modularidad y reutilización a través de espacios de nombres XML .

Ver también

Notas

Referencias

Otras lecturas

enlaces externos