El lenguaje de marcado extensible ( XML ) es un lenguaje de marcado y un formato de archivo para almacenar, transmitir y reconstruir datos arbitrarios. [2] Define un conjunto de reglas para codificar documentos en un formato que sea legible tanto para humanos como para máquinas . La especificación XML 1.0 del World Wide Web Consortium [3] de 1998 [4] y varias otras especificaciones relacionadas [5] —todas ellas estándares abiertos y gratuitos— definen XML. [6]
Los objetivos de diseño de XML enfatizan la simplicidad, la generalidad y la facilidad de uso en Internet . [7] Es un formato de datos textual con un fuerte soporte a través de Unicode para diferentes lenguajes humanos . Aunque el diseño de XML se centra en los documentos, el lenguaje se utiliza ampliamente para la representación de estructuras de datos arbitrarias , [8] como las que se utilizan en los servicios web . [9]
Existen varios sistemas de esquemas 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. [10]
El objetivo principal de XML es la serialización , es decir, el almacenamiento, la transmisión y la reconstrucción de datos arbitrarios. Para que dos sistemas distintos intercambien información, deben acordar un formato de archivo. XML estandariza este proceso. Por lo tanto, es análogo a una lengua franca para representar información. [11] : 1
Como lenguaje de marcado , XML etiqueta, clasifica y organiza estructuralmente la información. [11] : 11 Las etiquetas XML representan la estructura de los datos y contienen metadatos . Lo que hay dentro de las etiquetas son datos, codificados de la manera que especifica el estándar XML. [11] : 11 Un esquema XML adicional (XSD) define los metadatos necesarios para interpretar y validar XML. (Esto también se conoce como el esquema canónico). [11] : 135 Un documento XML que se adhiere a las reglas básicas de XML está "bien formado"; uno que se adhiere a su esquema es "válido". [11] : 135
La RFC 7303 de IETF (que reemplaza a la antigua RFC 3023) proporciona reglas para la construcción de tipos de medios para su uso en mensajes XML. Define tres tipos de medios: application/xml
( text/xml
es un alias), application/xml-external-parsed-entity
( text/xml-external-parsed-entity
es un alias) y application/xml-dtd
. Se utilizan para transmitir archivos XML sin procesar sin exponer su semántica interna . La RFC 7303 recomienda además que a los lenguajes basados en XML se les asignen tipos de medios que terminen en +xml
, por ejemplo, image/svg+xml
para SVG .
En el 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, aparecen más directrices para el uso de XML en un contexto de red. [10] [9]
XML se ha vuelto de uso común para el intercambio de datos a través de Internet. Se han desarrollado cientos de formatos de documentos que utilizan la sintaxis XML, [12] incluidos RSS , Atom , Office Open XML , OpenDocument , SVG , COLLADA y XHTML . XML también proporciona el lenguaje base para protocolos de comunicación como SOAP y XMPP . Es uno de los formatos de intercambio de mensajes utilizados en la técnica de programación Asynchronous JavaScript and XML (AJAX) .
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 en las ricas características de la especificación de esquema XML. En el ámbito editorial, 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.
Una de las aplicaciones de XML es la transferencia de información meteorológica operacional (OPMET) basada en estándares IWXXM . [13]
El material de esta sección se basa en la especificación XML . No se trata de una lista exhaustiva de todas las construcciones que aparecen en XML; proporciona una introducción a las construcciones clave que se encuentran con más frecuencia en el uso diario.
<
y terminan con un >
, o comienzan con el carácter &
y terminan con un ;
. Las cadenas de caracteres que no son marcado son contenido. Sin embargo, en una sección CDATA<![CDATA[
, los delimitadores y ]]>
se clasifican como marcado, mientras que el texto entre ellos se clasifica como contenido. Además, el espacio en blanco antes y después del elemento más externo se clasifica como marcado.<
y termina con >
. Hay tres tipos de etiquetas:<section>
;</section>
;<line-break />
.<greeting>Hello, world!</greeting>
. Otro es <line-break />
.<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 "number" y su valor es "3". Un atributo XML solo puede tener un único valor y cada atributo puede aparecer como máximo una vez en cada elemento. En la situación común donde se desea una lista de múltiples valores, esto debe hacerse codificando la lista en un atributo XML bien formado [i] con algún formato más allá de lo que XML define por sí mismo. Por lo general, se trata de una lista delimitada por comas o punto y coma o, si se sabe que los valores individuales no contienen espacios, [ii] se puede utilizar una lista delimitada por espacios. <div class="inner greeting-box">Welcome!</div>
, donde el atributo "class" tiene tanto el valor "inner greeting-box" como también indica los dos nombres de clase CSS "inner" y "greeting-box".<?xml version="1.0" encoding="UTF-8"?>
.Los documentos XML están compuestos en su totalidad por caracteres del repertorio Unicode . A excepción de 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 se pueden utilizar directamente.
Los puntos de código Unicode en los siguientes rangos son válidos en documentos XML 1.0: [14]
XML 1.1 amplía el conjunto de caracteres permitidos para incluir todos los anteriores, más los caracteres restantes en el rango U+0001–U+001F. [15] Al mismo tiempo, sin embargo, restringe el uso de caracteres de control C0 y C1 distintos de U+0009 (tabulador horizontal), U+000A (salto de línea), U+000D (retorno de carro) y U+0085 (línea siguiente) al requerir que se escriban en forma de escape (por ejemplo, U+0001 debe escribirse como 
o su equivalente). En el caso de los caracteres C1, esta restricción es una incompatibilidad con versiones anteriores; se introdujo para permitir que se detecten 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.1.
El conjunto de caracteres Unicode se puede codificar en bytes para su almacenamiento o transmisión de diversas maneras, llamadas "codificaciones". Unicode en sí define codificaciones que cubren todo el repertorio; las más conocidas incluyen UTF-8 (que el estándar XML recomienda usar, sin una BOM ) y UTF-16 . [16] Hay muchas otras codificaciones de texto que son anteriores a Unicode, como ASCII y varias ISO/IEC 8859 ; sus repertorios de caracteres son en todos los casos subconjuntos del conjunto 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 por el cual un procesador XML puede determinar de manera confiable, sin ningún conocimiento previo, qué codificación se está utilizando. [17] Las codificaciones distintas de UTF-8 y UTF-16 no son necesariamente reconocidas por todos los analizadores XML (y en algunos casos ni siquiera UTF-16, a pesar de que el estándar exige que también se reconozca).
XML ofrece funciones de escape para incluir caracteres cuya inclusión directa es problemática. Por ejemplo:
 
) " " y el espacio (  
) " ", y la letra mayúscula cirílica A ( А
) "А" y la letra mayúscula latina A ( A
) "A".Hay cinco entidades predefinidas :
<
representa "<";>
representa ">";&
representa "&";'
representa " ' ";"
representa ' " '.Todos los caracteres Unicode permitidos pueden representarse con una referencia numérica de carácter . Consideremos 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 introducir este carácter podría insertarlo en un documento XML codificado como 中
o 中
. De manera similar, la cadena "I <3 Jörg" podría codificarse para su inclusión en un documento XML como I <3 Jörg
.
�
no está permitido 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. [19] Se necesita un mecanismo de codificación alternativo como Base64 para representar dichos caracteres.
Los comentarios pueden aparecer en cualquier parte de un documento fuera de otro marcado. Los comentarios no pueden aparecer antes de la declaración XML. Los comentarios comienzan con <!--
y terminan con -->
. Para compatibilidad con SGML , la cadena "--" (doble guión) no está permitida dentro de los comentarios; [20] esto significa que los comentarios no se pueden anidar. El ampersand no tiene un significado especial dentro de los comentarios, por lo que las referencias de 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-->
XML 1.0 (quinta edición) y XML 1.1 admiten el uso directo de casi cualquier carácter Unicode en nombres de elementos, atributos, comentarios, datos de caracteres e instrucciones de procesamiento (excepto aquellos que tienen un significado simbólico especial en XML, como el signo menor que, "<"). El siguiente es un documento XML bien formado que incluye caracteres chinos , armenios y cirílicos :
<?xml version="1.0" encoding="UTF-8"?> <俄语֥֦֬ւ= "ָּ ւֽ֥ր֥ւ" > данные </俄语>
La especificación XML define un documento XML como un texto bien formado , lo que significa que cumple una lista de reglas de sintaxis proporcionadas en la especificación. Algunos puntos clave de la lista, bastante extensa, incluyen:
<
y &
aparecen excepto cuando cumplen su función de delimitación de marcado.!"#$%&'()*+,/;<=>?@[\]^`{|}~
, ni un espacio, y no pueden comenzar con "-", "." o un dígito numérico.La definición de un documento XML excluye los textos que contienen violaciones de las reglas de formato correcto; simplemente no son XML. Un procesador XML que encuentra una violación de este tipo está obligado a informar de dichos errores y a 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. [21] La política de XML en esta área ha sido criticada por ser una violación de la ley de Postel ("Sea conservador en lo que envía; sea liberal en lo que acepta"). [22]
La especificación XML define un documento XML válido como un documento XML bien formado que también cumple con las reglas de una Definición de Tipo de Documento (DTD). [23] [24]
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 están declarados en esa DTD y siguen las reglas gramaticales que especifica la DTD para ellos.
Los procesadores XML se clasifican como validadores o no validadores según si comprueban 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, se ha trabajado mucho en el área de lenguajes de esquema para XML. Dichos lenguajes de esquema suelen limitar el conjunto de elementos que se pueden utilizar en un documento, los atributos que se les pueden aplicar, el orden en el que pueden aparecer y las relaciones padre/hijo permitidas.
El lenguaje de esquema más antiguo para XML es la definición de tipo de documento (DTD), heredado de SGML.
Los DTD tienen los siguientes beneficios:
Los DTD tienen las siguientes limitaciones:
Dos características peculiares que distinguen a las DTD de otros tipos de esquemas son el soporte sintáctico para incrustar una DTD dentro de documentos XML y para definir entidades , que son fragmentos arbitrarios de texto o marcado que el procesador XML inserta en la propia DTD y en el documento XML donde sea que se haga referencia a ellas, como escapes de caracteres.
La tecnología DTD todavía se utiliza en muchas aplicaciones debido a su ubicuidad.
Un lenguaje de esquema más nuevo, descrito por el W3C como el sucesor de los DTD, es XML Schema , a menudo denominado por las siglas de las instancias de XML Schema, XSD (XML Schema Definition). Los XSD son mucho más potentes que los DTD a la hora de describir lenguajes XML. Utilizan un sistema de tipificación de datos enriquecido y permiten restricciones más detalladas sobre la estructura lógica de un documento XML. Los XSD también utilizan un formato basado en XML, lo que hace posible utilizar herramientas XML comunes para ayudar a procesarlos.
xs:elemento schema que define un esquema:
<?xml version="1.0" encoding="UTF-8" ?> <xs:schema xmlns:xs= "http://www.w3.org/2001/XMLSchema" ></xs:schema>
RELAX NG (Regular Language for XML Next Generation) 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 usar complementos de marco de tipos de datos ; un autor de esquemas RELAX NG, por ejemplo, puede requerir que los valores en un documento XML se ajusten a las definiciones en los tipos de datos de esquemas XML.
Schematron es un lenguaje para realizar 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 (Document Schema Definition Languages) es un estándar ISO/IEC de varias partes (ISO/IEC 19757) que reúne un conjunto completo de lenguajes de esquemas pequeños, cada uno orientado a problemas específicos. DSDL incluye la sintaxis completa y compacta RELAX NG , el 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 basado en espacios de nombres de fragmentos de documentos a diferentes validadores. Los lenguajes de esquema DSDL aún no cuentan con el soporte de los proveedores de los esquemas XML y, en cierta medida, son una reacción de base de los editores industriales a la falta de utilidad de los esquemas XML para la publicación .
Algunos lenguajes de esquema no sólo describen la estructura de un formato XML particular, sino que también ofrecen funciones 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 función de ampliación de conjuntos de información y valores predeterminados de atributos. RELAX NG y Schematron no proporcionan estos valores intencionalmente.
Poco después de la publicación inicial de XML 1.0 se desarrolló un conjunto de especificaciones estrechamente relacionadas con XML. Con frecuencia, se utiliza el término "XML" para referirse a XML junto con una o más de estas otras tecnologías que se han llegado a considerar parte del núcleo de XML.
xml:base
atributo que puede usarse para establecer la base para la resolución de referencias URI relativas dentro del alcance de un solo elemento XML.Algunas otras especificaciones concebidas como parte del "Núcleo XML" no han logrado una amplia adopción, entre ellas XInclude , XLink y XPointer .
Los objetivos de diseño de XML incluyen: "Debe ser fácil escribir programas que procesen documentos XML". [7] A pesar de esto, la especificación XML no contiene casi ninguna información sobre cómo los programadores pueden llevar a cabo 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 guía sobre cómo acceder a esta información. Se han desarrollado y utilizado diversas API para acceder a XML, y algunas se han estandarizado.
Las API existentes para el procesamiento de XML tienden a caer en estas categorías:
Las herramientas orientadas a flujos requieren menos memoria y, para ciertas tareas basadas en un recorrido lineal de un documento XML, son más rápidas y sencillas que otras alternativas. Las API de recorrido de árboles y de enlace de datos suelen requerir el uso de mucha más memoria, pero suelen resultar más cómodas para los programadores; algunas incluyen la recuperación declarativa de componentes de documentos 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 la búsqueda en bases de datos XML de gran tamaño .
Simple API for XML (SAX) es una API léxica basada en eventos en la que un documento se lee en serie y su contenido se informa como devoluciones de llamadas a varios métodos en un objeto controlador diseñado por el 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 cargar al autor de la aplicación con el seguimiento de qué parte del documento se está procesando. Es más adecuado para 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.
El análisis pull trata el documento como una serie de elementos leídos en secuencia utilizando el patrón de diseño iterador . Esto permite escribir analizadores descendentes 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 pasar (como parámetros de función) a funciones de nivel inferior, o devolver (como valores de retorno de función) a funciones de nivel superior. [25] Algunos ejemplos de analizadores pull incluyen Data::Edit::Xml en Perl , StAX en el lenguaje de programación Java , XMLPullParser en Smalltalk , XMLReader en PHP , ElementTree.iterparse en Python , SmartXML en Red , System.Xml.XmlReader en .NET Framework y la API de recorrido DOM (NodeIterator y TreeWalker).
Un analizador pull crea un iterador que visita secuencialmente los distintos elementos, atributos y datos de un documento XML. El código que utiliza este iterador puede probar el elemento actual (para saber, por ejemplo, si es una etiqueta de inicio o 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 recorre. El enfoque de descenso recursivo tiende a prestarse a mantener los datos como variables locales tipificadas en el código que realiza el análisis, mientras que SAX, por ejemplo, normalmente requiere que un analizador mantenga manualmente los datos intermedios dentro de una pila de elementos que son elementos primarios del elemento que se está analizando. El código de análisis pull puede ser más sencillo de entender y mantener que el código de análisis SAX.
El modelo de objetos de documento (DOM) es una API que permite la navegación por 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 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 XML es una técnica para simplificar el desarrollo de aplicaciones que necesitan trabajar con documentos XML. Implica asignar el documento XML a una jerarquía de objetos fuertemente tipados, en lugar de utilizar los objetos genéricos creados por un analizador DOM. El código resultante suele ser más fácil de leer y mantener, y puede ayudar a identificar problemas en tiempo de compilación en lugar de en tiempo de ejecución. El enlace de datos XML es particularmente adecuado para aplicaciones en las que la estructura del documento se conoce y se fija en el momento en que se escribe la aplicación. Al crear una representación fuertemente tipada de los datos XML, los desarrolladores pueden aprovechar los entornos de desarrollo integrados (IDE) modernos que proporcionan funciones como autocompletar, refactorización de código y resaltado de código. Esto puede facilitar la escritura de código correcto y eficiente, y reducir el riesgo de errores y fallos. Algunos ejemplos de sistemas de enlace de datos incluyen la Arquitectura Java para Enlace XML (JAXB), Serialización XML en .NET Framework [26] y serialización XML en gSOAP .
XML ha aparecido como un tipo de datos de primera clase en otros lenguajes. La extensión ECMAScript para XML (E4X) del 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 padre-hijo. [27] E4X es compatible con los navegadores Mozilla 2.5+ (aunque ahora está en desuso) y Adobe Actionscript , pero no ha sido ampliamente adoptado. Se utilizan notaciones similares en la implementación LINQ de Microsoft para Microsoft .NET 3.5 y superiores, y en Scala (que utiliza Java VM). La aplicación de código abierto xmlsh, 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 <[ ]>. [28] El Resource Description Framework define un tipo de datos para contener XML canónicordf:XMLLiteral
encapsulado . [29] Facebook ha producido extensiones para los lenguajes PHP y JavaScript que agregan XML a la sintaxis central de manera similar a E4X, es decir, XHP y JSX respectivamente.
XML es un perfil de aplicación de SGML (ISO 8879). [30]
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 los años 1980, antes del surgimiento de Internet. [31] [32] A mediados de los años 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 la Web probablemente enfrentaría a medida que creciera. 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ó un estatuto 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. [33]
XML fue compilado por un grupo de trabajo de once miembros, [34] apoyado por un grupo de interés de (aproximadamente) 150 miembros. El debate técnico tuvo lugar en la lista de correo del grupo de interés y los problemas se resolvieron por consenso o, cuando esto no era posible, por mayoría de votos del grupo de trabajo. Michael Sperberg-McQueen recopiló un registro de las decisiones de diseño y sus fundamentos el 4 de diciembre de 1997. [35] James Clark se desempeñó como líder técnico del grupo de trabajo, contribuyendo notablemente con la sintaxis de elementos vacíos <empty />
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 mínimo de marcado 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ó enérgicas protestas de Microsoft. Se le pidió a Bray que renunciara temporalmente a su puesto de editor, lo que dio lugar 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 grupo de trabajo de XML se comunicaba principalmente por correo electrónico y teleconferencias semanales. Las decisiones de diseño más importantes se tomaron en un breve período de intenso trabajo entre agosto y noviembre de 1996, [36] cuando se publicó el primer borrador de trabajo de una especificación XML. [37] El trabajo de diseño continuó durante 1997 y XML 1.0 se convirtió en una recomendación del W3C el 10 de febrero de 1998.
XML es un perfil de un estándar ISO SGML, y la mayor parte de XML proviene 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), contenido mixto, la separación de procesamiento de representación ( instrucciones de procesamiento ) y la sintaxis predeterminada de corchetes angulares. La declaración SGML fue eliminada; por lo tanto, XML tiene un conjunto de delimitadores fijo y adopta Unicode como el conjunto de caracteres del documento .
Otras fuentes de tecnología para XML fueron la TEI (Text Encoding Initiative), que definió un perfil de SGML para su uso como "sintaxis de transferencia" y HTML . El proyecto ERCS (Extended Reference Concrete Syntax) del proyecto SPREAD (Standardization Project Regarding East Asian Documents) del grupo de expertos en procesamiento de documentos de China/Japón/Corea relacionado con la ISO fue la base de las reglas de denominación de XML 1.0; SPREAD también introdujo referencias de caracteres numéricos hexadecimales y el concepto de referencias para que estuvieran disponibles todos los caracteres Unicode. Para dar un mejor soporte a ERCS, XML y HTML, el estándar SGML IS 8879 se revisó en 1996 y 1998 con las adaptaciones WebSGML.
Entre las ideas que se desarrollaron durante la discusión y que son novedosas en XML se encuentran 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 las etiquetas de elementos vacíos. La noción de formación correcta en contraposición a la validez (que permite el análisis sin un esquema) se formalizó por primera vez en XML, aunque ya se había implementado con éxito en el software "Dynatext" de Electronic Book Technology; [38] el software del Proyecto New Oxford English Dictionary 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 EE. UU.; Mentor Graphics Context; Interleaf y Xerox Publishing System.
El primer código (XML 1.0) se definió inicialmente en 1998. Ha sufrido revisiones menores desde entonces, sin que se le haya asignado 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 implementado y aún se recomienda para uso general.
La segunda versión (XML 1.1) se publicó inicialmente el 4 de febrero de 2004, el mismo día que XML 1.0 Third Edition, [39] y actualmente se encuentra en su segunda edición, publicada el 16 de agosto de 2006. Contiene características (algunas polémicas) que tienen como objetivo hacer que XML sea más fácil de usar en ciertos casos. [40] Los principales cambios son permitir el uso de caracteres de final de línea utilizados en plataformas EBCDIC y el uso de scripts y caracteres ausentes en Unicode 3.2. XML 1.1 no está muy ampliamente implementado y se recomienda su uso solo a quienes necesitan sus características particulares. [41]
Antes de su quinta edición, XML 1.0 se diferenciaba de XML 1.1 en que tenía requisitos más estrictos para los caracteres disponibles para su uso en 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 es más a prueba de 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 las escrituras balinesa , cham o fenicia, entre muchas otras agregadas a Unicode desde Unicode 3.2. [40]
Casi cualquier punto de código Unicode puede utilizarse en los datos de caracteres y valores de atributos de un documento XML 1.0/1.1, incluso si el carácter correspondiente al punto de código no está definido en la versión actual de Unicode. En los datos de caracteres y valores de atributos, XML 1.1 permite el uso de más caracteres de control que XML 1.0, pero, por razones de "robustez", la mayoría de los caracteres de control introducidos en XML 1.1 deben expresarse como referencias de caracteres numéricos (y #x7F a #x9F, que se habían permitido en XML 1.0, en XML 1.1 incluso se requiere que se expresen como referencias de caracteres numéricos [42] ). Entre los caracteres de control admitidos en XML 1.1 hay dos códigos de salto de línea que deben tratarse como caracteres de espacio en blanco, que son los únicos códigos de control que pueden escribirse directamente.
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 ), que uno de los desarrolladores originales de XML ha escrito, [43] contiene algunas propuestas sobre cómo podría ser un XML 2.0, incluyendo la eliminación de DTD de la sintaxis, así como la integración de espacios de nombres XML , XML Base y XML Information Set en el estándar base.
En 2012, James Clark (director técnico del Grupo de trabajo XML) y John Cowan (editor de la especificación XML 1.1) formaron el Grupo comunitario MicroXML dentro del W3C y publicaron una especificación para un subconjunto significativamente reducido de XML. [44]
El Consorcio World Wide Web también cuenta con 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 del Conjunto de Información XML. El grupo de trabajo no está autorizado para producir ningún estándar oficial. Dado que XML es por definición un formato basado en texto, la UIT-T y la ISO están utilizando el nombre Fast Infoset para su propio formato binario (ITU-T Rec. X.891 e ISO/IEC 24824-1) para evitar confusiones.
XML y sus extensiones han sido criticados regularmente por su verbosidad, complejidad y redundancia. [45]
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 XML se utiliza para intercambiar datos altamente estructurados entre aplicaciones, lo cual no era su objetivo de diseño principal. 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 tipos , en lugar de utilizar el DOM o SAX para recuperar datos de una representación directa del propio XML. Esto se logra creando automáticamente un mapeo entre elementos del esquema XML XSD del documento y miembros de una clase que se va a representar en memoria.
Otras críticas intentan refutar la afirmación de que XML es un lenguaje autodescriptivo [46] (aunque la propia especificación XML 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 ) [47] que se centran en representar datos altamente estructurados en lugar de documentos, que pueden contener contenido altamente estructurado y relativamente no estructurado. Sin embargo, las especificaciones de esquema XML estandarizadas del W3C ofrecen una gama más amplia de tipos de datos XSD estructurados en comparación con formatos de serialización más simples y ofrecen modularidad y reutilización a través de espacios de nombres XML .
{{cite journal}}
: CS1 maint: DOI inactivo a partir de septiembre de 2024 ( enlace ){{cite journal}}
: Requiere citar revista |journal=
( ayuda ){{cite journal}}
: Requiere citar revista |journal=
( ayuda ){{cite journal}}
: CS1 maint: DOI inactivo a partir de septiembre de 2024 ( enlace )