XML
Lenguaje de marcado extensible (XML) es un lenguaje de marcado y un formato de archivo para almacenar, transmitir y reconstruir datos arbitrarios. Define un conjunto de reglas para codificar documentos en un formato que sea tanto legible por humanos como por máquinas. La especificación XML 1.0 de 1998 del World Wide Web Consortium y varias otras especificaciones relacionadas (todas ellas estándares abiertos gratuitos) definen XML.
Los objetivos de diseño de XML enfatizan la simplicidad, la generalidad y la facilidad de uso en Internet. Es un formato de datos textuales con fuerte soporte a través de Unicode para diferentes idiomas 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, 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 en el procesamiento de datos XML.
Resumen
El objetivo principal de XML es la serialización, es decir, almacenar, transmitir y reconstruir datos arbitrarios. Para que dos sistemas dispares intercambien información, deben acordar un formato de archivo. XML estandariza este proceso. XML es análogo a una lingua franca para representar información.
Como lenguaje de marcado, XML etiqueta, categoriza y organiza estructuralmente la información. Las etiquetas XML representan la estructura de datos y contienen metadatos. Lo que hay dentro de las etiquetas son datos, codificados de la manera que especifica el estándar XML. Un esquema XML adicional (XSD) define los metadatos necesarios para interpretar y validar XML. (Esto también se denomina esquema canónico). Un documento XML que se adhiere a las reglas XML básicas está "bien formado"; uno que se adhiere a su esquema es "válido."
IETF RFC 7303 (que reemplaza al anterior RFC 3023), proporciona reglas para la construcción de tipos de medios para usar 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. RFC 7303 recomienda además que los lenguajes basados en XML reciban tipos de medios que terminen en +xml
, por ejemplo, image/svg+xml
para SVG.
Más 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.
Aplicaciones
XML se ha convertido en un uso común para el intercambio de datos a través de Internet. Se han desarrollado cientos de formatos de documentos que usan sintaxis XML, incluidos RSS, Atom, Office Open XML, OpenDocument, SVG y XHTML. XML también proporciona el lenguaje base para protocolos de comunicación como SOAP y XMPP. Es el formato de intercambio de mensajes para 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 la publicación, Darwin Information Typing Architecture es un estándar de datos de la industria XML. XML se usa ampliamente para respaldar varios formatos de publicación.
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 las construcciones clave que se encuentran con mayor frecuencia en el uso diario.
- Cara
- Un documento XML es una cadena de personajes. Cada personaje legal Unicode (excepto Null) puede aparecer en un documento XML (1.1) (mientras algunos se desalientan).
- Procesador y aplicación
- El procesador analiza el marcado y pasa información estructurada a un aplicación. La especificación coloca los requisitos en lo que un procesador XML debe hacer y no hacer, pero la aplicación está fuera de su alcance. El procesador (como la especificación lo llama) se refiere a menudo coloquialmente como un Parser XML.
- Marcación y contenido
- Los caracteres que componen un documento XML se dividen en Marco y contenido, que puede distinguirse por la aplicación de reglas sintácticas simples. Generalmente, las cuerdas que constituyen el marcador comienzan con el carácter
<
y terminar con un>
, o comienzan con el carácter&
y terminar con un;
. Criaturas de caracteres que no son marcados son contenidos. 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, el espacio blanco antes y después del elemento más externo se clasifica como marcado.
- Tag
- A etiqueta es una construcción de marcación que comienza con
<
y termina con>
. Hay tres tipos de etiquetas:- start-tag, como
;
- end-tag, como
;
- etiqueta de elemento vacío, como
.
- start-tag, como
- Elemento
- An elemento es un componente lógico de documento que comienza con una etiqueta inicial y termina con una etiqueta final que coincide o consiste sólo en una etiqueta de elemento vacío. Los caracteres entre el start-tag y el end-tag, si los hay, son el elemento contenido, y puede contener marcado, incluyendo otros elementos, que se llaman elementos del niño. Un ejemplo es
Hello, world!
. Otro es.
- Attribute
- An atributo es una construcción de marcación que consiste en un par nombre-valor que existe dentro de una etiqueta de inicio o elemento vacío. Un ejemplo es
, donde los nombres de los atributos son "src" y "alt", y sus valores son "madonna.jpg" y "Madonna" respectivamente. Otro ejemplo es
Connect A to B.
, donde el nombre del atributo es "número" y su valor es "3". Un atributo XML sólo puede tener un valor único y cada atributo puede aparecer a la mayor parte de una vez en cada elemento. En la situación común donde se desea una lista de múltiples valores, esto debe hacerse mediante la codificación de la lista en un atributo XML bien formado con algún formato más allá de lo que XML se define. Normalmente se trata de una lista delimitada de coma o semicolon o, si se sabe que los valores individuales no contienen espacios, se puede utilizar una lista delimitada por espacio.
, donde el atributo "clase" tiene tanto el valor "caja interior de saludo" como también indica los dos nombres de clase CSS "inner" y "greeting-box".Welcome!
- Declaración XML
- Los documentos XML pueden comenzar con un Declaración XML que describe cierta información sobre sí mismos. Un ejemplo es
.
Personajes y escapes
Los documentos XML se componen 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 se pueden usar directamente.
Caracteres válidos
Los puntos de código Unicode en los siguientes rangos son válidos en documentos XML 1.0:
- U+0009 (Tab horizontal), U+000A (Carrera de alimentación), U+000D (Retorno de carga): estos son los únicos controles C0 aceptados en XML 1.0;
- U+0020–U+D7FF, U+E000–U+FFFD: esto excluye a algunos no actores 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, incluyendo no caracteres.
XML 1.1 amplía el conjunto de caracteres permitidos para incluir todo lo anterior, además de 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 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 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.1.
Detección de codificación
El juego de caracteres Unicode se puede codificar en bytes para almacenarlo o transmitirlo de varias formas distintas, denominadas "codificaciones". Unicode mismo define codificaciones que cubren todo el repertorio; los más conocidos incluyen UTF-8 (que el estándar XML recomienda usar, sin BOM) y UTF-16. Hay muchas otras codificaciones de texto anteriores a Unicode, como ASCII y varias ISO/IEC 8859; sus repertorios de caracteres son en todos los casos 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 forma fiable, sin ningún conocimiento previo, qué codificación se está utilizando. Las codificaciones que no sean UTF-8 y UTF-16 no son necesariamente reconocidas por todos los analizadores XML (y en algunos casos ni siquiera UTF-16, aunque el estándar exige que también se reconozca).
Escapar
XML proporciona facilidades de escape para incluir caracteres que son problemáticos para incluir directamente. Por ejemplo:
- Los caracteres "traducidos" y "ciente" son marcadores de sintaxis clave y pueden no aparecer en contenido fuera de una sección CDATA. Se permite, pero no se recomienda, utilizar "según" en valores de entidad XML.
- Algunas codificaciones de caracteres solo soportan 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 personaje en la máquina del autor.
- Algunos personajes tienen glifos que no pueden distinguirse visualmente de otros personajes, como el espacio no rompedor (
А
) "A" y la carta de la capital latina A (A
"A".
Hay cinco entidades predefinidas:
<
representa "traducido";>
representa "Consiente";&
representa "fr";'
representa "'";"
representaciones '"'.
Todos los caracteres Unicode permitidos pueden representarse 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 中
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. Se necesita un mecanismo de codificación alternativo como Base64 para representar dichos 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 con <!--
y terminan con -->
. Por compatibilidad con SGML, la cadena "--" (doble guión) no está permitido dentro de los comentarios; 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 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 es necesario escapar de <code> &erio; tal en comentarios-->
Uso internacional
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 (aparte de los que tienen un significado simbólico especial en el propio XML, como como el signo menor que, "<"). El siguiente es un documento XML bien formado que incluye caracteres chinos, armenios y cirílicos:
¿Según la versión xml="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 cumple una lista de reglas de sintaxis proporcionadas en la especificación. Algunos puntos clave en la lista bastante larga incluyen:
- El documento contiene caracteres Unicode legales correctamente codificados.
- Ninguno de los caracteres de sintaxis especiales como
<
y&
aparecen excepto cuando desempeñan sus funciones de demarcación. - La etiqueta start-tag, end-tag, y el elemento vacío que delimitan los elementos están correctamente anidados, sin falta y sin superposición.
- Los nombres de las etiquetas son sensibles a los casos; la etiqueta inicial y la etiqueta final deben coincidir exactamente.
- Los nombres de las etiquetas no pueden contener ninguno de los personajes !"#$% igual'()*+,/; obtenidos= Confía?@[]^`{ vidas}~, ni un personaje espacial, y no puede comenzar con "-", ", o un dígito numérico.
- Un único elemento raíz contiene todos los demás elementos.
La definición de un documento XML excluye textos que contengan violaciones de las reglas de buena formación; simplemente no son XML. Se requiere que un procesador XML que encuentre una violación de este tipo informe dichos errores y detenga el procesamiento normal. Esta política, a la que en ocasiones se hace referencia como "manejo de errores draconianos" 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 cumple con 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 que especifica la DTD.
Los procesadores XML se clasifican como validantes o no validadores dependiendo de 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 un esquema o gramática. Desde la publicación inicial de XML 1.0, ha habido un trabajo sustancial en el área de los 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 que pueden aparecer y las relaciones padre/hijo permitidas.
Definición del tipo de documento
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:
- El soporte DTD es omnipresente debido a su inclusión en el estándar XML 1.0.
- Los DTD son terse comparados 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.
- DTD define a Tipo de documento en lugar de los tipos utilizados por un espacio de nombres, agrupando así todas las limitaciones para un documento en una sola colección.
Los DTD tienen las siguientes limitaciones:
- No tienen soporte explícito para nuevas características de XML, lo más importante es namespaces.
- Ellos carecen de expresividad. Los DTD XML son más simples que los DTD SGML y existen ciertas estructuras que no se pueden expresar con gramáticas regulares. Los DTD sólo admiten tipos de datos rudimentarios.
- No tienen legibilidad. Los diseñadores de DTD suelen hacer un uso pesado de las entidades del parámetro (que se comportan esencialmente como macros textuales), lo que facilita 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 puede ser.
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 marcas que el procesador XML inserta en la propia DTD y en el documento XML dondequiera que se les haga referencia, como escapes de caracteres.
La tecnología DTD todavía se usa en muchas aplicaciones debido a su ubicuidad.
Esquema
Un lenguaje de esquema más nuevo, descrito por el W3C como el sucesor de las DTD, es XML Schema, a menudo denominado XSD (definición de esquema XML) por las siglas de las instancias de esquema XML. Los XSD son mucho más potentes 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 ordinarias para ayudar a procesarlos.
xs:schema elemento que define un esquema:
################################################################################################################################################################################################################################################################- No. xmlns:xs="http://www.w3.org/2001/XMLSchema"> >
RELÁJATE 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 se pueden escribir en una sintaxis basada en XML o en una sintaxis no XML más compacta; las dos sintaxis son isomorfas 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 facilita su uso e implementación. También tiene la capacidad de usar complementos de marco de tipo de datos; un autor de esquema RELAX NG, por ejemplo, puede requerir valores en un documento XML para cumplir con las definiciones en tipos de datos de esquema XML.
Esquematrón
Schematron es un lenguaje para hacer afirmaciones sobre la presencia o ausencia de patrones en un documento XML. Por lo general, 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 lenguajes de esquemas pequeños, cada uno de los cuales se enfoca en problemas específicos. DSDL incluye sintaxis completa y compacta RELAX NG, lenguaje de aserción Schematron e idiomas para definir tipos de datos, restricciones de repertorio de caracteres, cambio de nombre y expansión de entidades, y enrutamiento basado en espacio de nombres de fragmentos de documentos a diferentes validadores. Los lenguajes de esquema DSDL aún no cuentan con el soporte del proveedor de esquemas XML y, en cierta medida, son una reacción de base 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 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; pueden, por ejemplo, proporcionar la función de aumento de conjuntos de información y valores predeterminados de atributos. RELAX NG y Schematron intencionalmente no los proporcionan.
Especificaciones relacionadas
Se ha desarrollado un grupo de especificaciones estrechamente relacionadas con XML, comenzando poco después de la publicación inicial de XML 1.0. Suele ocurrir que el término "XML" se utiliza para referirse a XML junto con una o más de estas otras tecnologías que se han visto como parte del núcleo XML.
- Los espacios de nombres XML permiten que el mismo documento contenga elementos XML y atributos tomados de diferentes vocabularios, sin que se produzcan colisiones de nombres. Aunque XML Namespaces no son parte de la especificación XML en sí, prácticamente todo el software XML también admite XML Namespaces.
- XML Base define el
xml:base
atributo, que se puede utilizar para establecer la base para la resolución de referencias URI relativas dentro del alcance de un único elemento XML. - Configuración de información XML o XML Infoset es un modelo de datos abstracto para documentos XML en términos de información. El infoset se utiliza comúnmente en las especificaciones de los idiomas XML, para mayor comodidad en describir las restricciones en el XML construye los idiomas que permiten.
- XSL (Extensible Stylesheet Language) es una familia de idiomas utilizados para transformar y renderizar documentos XML, divididos en tres partes:
- XSLT (XSL Transformations), un lenguaje XML para transformar documentos XML en otros documentos XML u otros formatos como HTML, texto plano o XSL-FO. XSLT está muy unido con XPath, que utiliza para abordar componentes del documento XML de entrada, principalmente elementos y atributos.
- XSL-FO (XSL Formatting Objects), un lenguaje XML para renderizar documentos XML, usado 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 es ampliamente utilizado en otras especificaciones Core-XML y en bibliotecas de programación para acceder a datos codificados por 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 está concebido principalmente como un lenguaje de consulta para bases de datos XML.
- XML Signature define reglas de sintaxis y procesamiento para crear firmas digitales en contenido XML.
- Encryption XML define reglas de sintaxis y procesamiento para encriptar contenido XML.
- Modelo XML (Parte 11: Schema Association de ISO/IEC 19757 – DSDL) define un medio de asociar cualquier documento xml con cualquiera de los tipos de esquemas mencionados anteriormente.
Algunas otras especificaciones concebidas como parte del "XML Core" no han podido encontrar una amplia adopción, incluidos 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 guía 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 caer en estas categorías:
- API orientadas a la corriente accesible desde un lenguaje de programación, por ejemplo SAX y StAX.
- Tree-traversal API accesibles desde un lenguaje de programación, por ejemplo DOM.
- Configuración de datos XML, que proporciona una traducción automática entre un documento XML y objetos de lenguaje de programación.
- Lenguas de transformación declarativas como XSLT y XQuery.
- Extensiones sintaxis a lenguajes de programación para fines generales, por ejemplo LINQ y Scala.
Las funciones 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 árboles normalmente requieren el uso de mucha más memoria, pero a menudo se encuentran más convenientes para 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 en grandes bases de datos XML.
API sencilla para XML
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 llamada 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 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 aparezcan en el documento.
Extracción de análisis
El análisis de extracción trata el documento como una serie de elementos leídos en secuencia mediante el patrón de diseño del iterador. Esto permite la escritura de 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 se transmiten (como parámetros de función) en funciones de nivel inferior, o devueltos (como valores de retorno de función) a funciones de nivel superior. Los 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 pull crea un iterador que visita secuencialmente los diversos elementos, atributos y datos en 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 final, 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. El código puede así extraer información del documento a medida que lo atraviesa. El enfoque de descenso recursivo tiende a prestarse para mantener los datos como variables locales escritas en el código que realiza el análisis, mientras que SAX, por ejemplo, generalmente requiere un analizador para mantener manualmente los datos intermedios dentro de una pila de elementos que son elementos principales del elemento. siendo analizado. El código de análisis pull puede ser más sencillo de entender y mantener que el código de análisis SAX.
Modelo de objeto de documento
Document Object Model (DOM) es una API que permite navegar por todo el documento como si fuera un árbol de objetos de nodo que representan el contenido del documento. Un analizador puede crear un documento DOM o los usuarios pueden generarlo manualmente (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 que se permita el acceso.
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 del código y, en muchos casos, permite que los problemas se identifiquen en tiempo de compilación en lugar de en tiempo de ejecución. Es 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. Los sistemas de vinculación de datos de ejemplo incluyen la arquitectura Java para vinculación 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 idiomas. 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.. E4X es compatible con los navegadores Mozilla 2.5+ (aunque ahora 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 versiones posteriores, 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 XML de manera similar como un tipo de datos, utilizando la <[ ]> notación. El marco de descripción de recursos define un tipo de datos rdf:XMLLiteral
para 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 fines 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 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.
XML fue compilado por un grupo de trabajo de once miembros, respaldado por un grupo de interés de (aproximadamente) 150 miembros. El debate técnico se llevó a cabo en la lista de correo del Grupo de Interés y los asuntos se resolvieron por consenso o, cuando eso falló, por mayoría de votos del Grupo de Trabajo. Michael Sperberg-McQueen compiló un registro de las 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 el elemento vacío <empty />
sintaxis 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 la mitad del proyecto, Bray aceptó un contrato de consultoría con Netscape, lo que provocó vociferantes protestas de Microsoft. Se le pidió a Bray que renunciara temporalmente a la dirección. 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 grupo de trabajo XML 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 alcanzaron 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 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 del procesamiento de la representación (procesamiento instrucciones) y la sintaxis de paréntesis angular predeterminada. Se eliminó la declaración SGML; 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 TEI (Iniciativa de codificación de texto), que definió un perfil de SGML para usar 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, se inventó el atributo xml:lang
y (como HTTP) los metadatos acompañaban al recurso en lugar de ser necesarios en la declaración de un enlace. El proyecto ERCS (Sintaxis Concreta de Referencia Extendida) del proyecto SPREAD (Proyecto de Estandarización de 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 admitir mejor ERCS, XML y HTML, el estándar SGML IS 8879 se revisó en 1996 y 1998 con adaptaciones WebSGML. El encabezado XML siguió al de ISO HyTime.
Las ideas que se desarrollaron durante la discusión que son novedosas en XML incluyeron el algoritmo para la detección de codificación y el encabezado de codificación, el objetivo de instrucción de procesamiento, el atributo xml:space y el nuevo delimitador de cierre para etiquetas de elementos vacíos. La noción de buena formación en oposición a la validez (que permite el análisis sin un esquema) se formalizó por primera vez en XML, aunque se había implementado con éxito en la tecnología de libros electrónicos "Dynatext" software; el software del New Oxford English Dictionary Project 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 EE. UU.; Contexto gráfico de mentores; Sistema de publicación Interleaf y Xerox.
Versiones
1.0 y 1.1
La primera (XML 1.0) se definió inicialmente en 1998. Ha sido objeto de 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. Es ampliamente implementado y aún recomendado para uso general.
La segunda (XML 1.1) se publicó inicialmente el 4 de febrero de 2004, el mismo día que la tercera edición de XML 1.0, y actualmente se encuentra en su segunda edición, publicada el 16 de agosto de 2006. Contiene características (algunas polémicas) que están destinados a hacer que XML sea más fácil de usar en ciertos casos. Los cambios principales consisten en habilitar el uso de caracteres de final de línea que se usan en las plataformas EBCDIC y el uso de scripts y caracteres ausentes en Unicode 3.2. XML 1.1 no está muy extendido y se recomienda su uso sólo por aquellos que necesitan sus características particulares.
Antes del lanzamiento 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 mediante un versión 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 escritura balinesa, cham o fenicia, entre muchos otros añadidos 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, por "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). 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 se pueden escribir directamente.
2.0
Se ha hablado de un XML 2.0, aunque ninguna organización ha anunciado planes para trabajar en dicho proyecto. XML-SW (SW para skunkworks), que escribió uno de los desarrolladores originales de XML, contiene algunas propuestas sobre cómo podría ser un XML 2.0, incluida la eliminación de DTD de la sintaxis, así como la integración de espacios de nombres XML, XML Base y Conjunto de información XML en el estándar base.
XML binario
El Consorcio World Wide Web también tiene un Grupo de Trabajo de Caracterización de XML Binario que realiza investigaciones preliminares 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 ningún estándar oficial. Dado que, por definición, XML se basa en texto, ITU-T e ISO utilizan el nombre Fast Infoset para su propio formato binario (ITU-T Rec. X.891 e ISO/IEC 24824-1) para evitar confusiones.
Crítica
XML y sus extensiones han sido criticados regularmente por verbosidad, complejidad y redundancia.
Asignar 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 usa para intercambiar datos altamente estructurados entre aplicaciones, que no era su principal objetivo 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 usar DOM o SAX para recuperar datos de una representación directa del XML. sí mismo. Esto se logra mediante la creación automática de un mapeo entre los elementos del esquema XML XSD del documento y los miembros de una clase que se representará en la memoria.
Otras críticas intentan refutar la afirmación de que XML es un lenguaje autodescriptivo (aunque la especificación XML en sí misma no hace tal afirmación).
JSON, YAML y S-Expressions se proponen con frecuencia como alternativas más sencillas (consulte Comparación de formatos de serialización de datos) que se centran en representar datos muy estructurados en lugar de documentos, que pueden contener contenido muy estructurado y relativamente no estructurado. Sin embargo, las especificaciones del esquema XML estandarizado por 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.
Contenido relacionado
Solicitud del sistema
Widget
Ceceo común