Entiendo el propósito de XML, pero siempre escucho que la gente se queja de lo malo que es. Realmente no entiendo ¿qué tiene de malo? Por lo general, escucho los términos "hinchado" y "lento".
Pero supongo que como programadores, ¿para qué lo usas principalmente? ¿Y realmente lo considera "malo" ... porque si lo es, mucha gente lo usa para transportar datos ...
Respuestas:
Xml es ideal para lo que fue diseñado: un protocolo de transferencia de datos legible por humanos, neutral en la plataforma, con algunas capacidades para imponer la validación de datos a niveles bajos. Dudo que alguien que use Xml de esta manera tenga una queja real. ¿Es el formato de cable más sucinto? No. Pero hay peores opciones. ¿Es tan rápido como leer su formato binario personalizado? No. Pero sus socios comerciales pueden leerlo en cualquier pila que estén usando.
El problema, sin embargo, es que los humanos, especialmente la raza conocida como arquitectos empresariales, son malvados y toman cosas buenas y las hacen malas. En el caso de Xml, la primera parte de este siglo vio a Xml como el martillo universal para cada problema de TI. Espolvorea un pequeño diseño por comité y terminas con algunas monstruosidades horribles como SOAP y oXML . Ninguno de los dos debe ser deseado para los enemigos, sin importar amigos o colegas.
fuente
XML es solo una herramienta que viene en muchos sabores y usos. XML sobresale en algunas cosas y apesta en otras. Creo que uno de los problemas es que la gente ha visto XML "empresarial" que es innecesariamente complejo con espacios de nombres y basura esparcidos (¿SOAP, alguien?). El truco para diseñar formatos XML para humanos es agregar un significado real a los datos sin hacerlos abrumadores de leer.
Una de las cosas con las que la gente tiene problemas es que el XML a veces se ahoga en algún carácter o en algún soporte faltante. Sin embargo, hay tanto una ventaja como una desventaja incluso en eso. Lo bueno es que no tienes ambigüedad como la que tienes con HTML, donde diferentes casos de sintaxis semi-inválida se pueden interpretar de manera diferente.
La desventaja es que es un poco más difícil de autor y más difícil de aprender. Estoy de acuerdo en que se debe argumentar que la web no se habría vuelto tan grande tan rápido si HTML fuera tan estricto como XML, pero también argumentaría que nos alegraría si lo hiciera hoy. :)
Además, no lo use para todo solo porque pueda, tenga el sentido y el criterio para aplicarlo adecuadamente. Si todo lo que tiene es XML, tiende a ser siempre una transformación XSLT lejos de lo que desea. :)
Yo diría que el formato solo importa cuando los humanos necesitan interactuar con él. Si está escribiendo un programa que serializa algo y lo envía a un lugar donde será consumido por otro de sus programas, ¿a quién le importa cómo se vea siempre que sea lo más eficiente posible? Use un formato binario o conejitos y unicornios para todo lo que me importa.
Pros de XML
Contras
Buenos usos
No tan buenos usos
fuente
Jeff Atwood tiene una publicación de blog bastante buena en XML: The Angle Bracket Tax sobre esto si desea que una fuente hable de ello.
Los usos más comunes que tengo para ello son:
Servicios hablando entre ellos. Por ejemplo, un sitio web que utiliza un sistema de gestión de contenido debe enviar algunos datos a un sistema de gestión de relaciones con el cliente y esto se hace con XML.
Almacenamiento de configuración. Web.config y app.config son ejemplos comunes, pero los scripts nAnt también pueden usar algunos XML para ellos.
No creo que sea óptimo, pero eso solo no me hace mal.
fuente
Dos razones:
fuente
<Problem:Worsening> <Problem:TimeDescription>Now</Problem:TimeDescription> <Problem:Posessive>they have</Problem:Posessive> <Problem:Quantity>many, many</Problem:Quantity> <Problem:WorseningDescription>more problems</Problem:WorseningDescription> </ProblemWorsening>
No es la sintaxis más compacta, pero es claramente la más expresiva. ¿Legible por humanos? depende de cómo diseñas tu idioma. La mayoría de las personas no diseñan un lenguaje para XML, solo serializan objetos como XML.
Es omnipresente. Puede consultar una base de datos XML con XQuery, transformar los resultados con XSLT como XHTML o Atom, obtener Atom u otro formato XML de otros servicios web, obtener XML de los usuarios que usan XForms, validarlo con XMLSchema, Relax NG o Schematron, procesarlo con XProc, guárdelo de nuevo en la base de datos con XQuery Update. Todas estas herramientas entienden XML, por lo que no hay necesidad de mapear entre diferentes representaciones.
XML no es una tecnología de serialización, es un conjunto de información de propósito general.
fuente
Aquí, lo usamos para el intercambio de datos entre diferentes sistemas realizados por diferentes proveedores con diferentes representaciones internas. Creamos un sistema de transformación / intercambio XML para transportar los datos de un lado a otro. Funciona bien para eso.
XML no es inherentemente malo, pero reconozco que diseñar una solución "buena" usando XML no es trivial.
fuente
"La esencia de XML es esta: el problema que resuelve no es difícil y no resuelve bien el problema". - Phil Wadler, POPL 2003
Mi opinión personal es que mientras no te importe la validación, los esquemas, los XSLT y el resto de cosas feas y mantengas pequeño el tamaño de los archivos (de lo contrario, el análisis se vuelve lento) puedes encontrar algunos buenos usos de XML (un ejemplo es para configurar su aplicación en lugar de usar archivos INI).
fuente
En mi experiencia, la mayoría de las personas se quejan de la forma en que se usa, no de la tecnología en sí.
Los bits inflados y lentos de los que la gente se queja generalmente son las bibliotecas / métodos que se utilizan para obtener información de ellos.
Lo uso para almacenar pequeñas cantidades de información estructurada que quiero almacenar en el disco (sin una base de datos o serialización binaria), o pasar a otra aplicación (que esencialmente describe SOAP también).
fuente
Es bueno porque:
Es una "interfaz" estándar que pueden comunicarse múltiples sistemas heterogéneos para comunicarse. Y es "humano" legible (más o menos, intente mirar a 5 MB XML)
Es malo porque:
Su tamaño hinchado, más grande = más ancho de banda = más $$
Hay otras razones, cada uno tiene una queja diferente ...
fuente
<advanceAcceptanceIndicator>Y</advanceAcceptanceIndicator>
La relación datos / marcado es muy baja ... Yo llamo a esto "hinchado". JSON, por ejemplo, sería sólo como medio hinchado:advanceAcceptanceIndicator: "Y"
. También existe el hecho de que el texto entre etiquetas es válido, por lo que al leer Xml, debe decidir qué hacer con este cruft\n\t\t\t
, y la solución generalmente es ignorarlo, porque para empezar nunca estuvo realmente interesado en esto.value
?) Probablemente también sea superior, porque las personas podrían verse tentadas a insertar espacios en blanco entre dos EtiquetasComo para cualquier otra tecnología: hay muchas herramientas y bibliotecas disponibles.
No me gusta el XML, especialmente porque es funky, cuando la gente dice que es legible para el ser humano, bromean, creo, o nunca han leído realmente un xml cuando uno intenta incrustar xml en un atributo ... las entidades xml lo hacen realmente ilegible. Además, es sorprendente cuánto espacio se desperdicia debido a la etiqueta final redundante y la capacidad de mezclar texto libre y datos ...
Pero:
También tiene la ventaja de la precedencia, la mayoría de las veces. Cuando ya está proporcionando servicios web en Xml, y uno solicita un nuevo servicio ... probablemente se hará en Xml porque eso es lo que sabe.
fuente
data Person = Person { surname :: String, firstName :: String, age :: Int }
si luego veo quePerson "Doe" "John" 42
también es legible y evita muchas desviaciones, sin embargo, está más cerca delimitado por comas.XML es una mala elección para archivos que deben ser mantenidos por humanos. No hay separación visual entre el marcado y el contenido, lo que dificulta la lectura. Es tedioso escribir correctamente sin un editor especial. Cualquier error en un documento XML es fatal; un documento XML no puede procesarse parcialmente. Cuando un archivo XML no es válido, el mensaje de error resultante a menudo es inútil.
Para cualquier archivo que deba ser mantenido por un humano, preferiría usar JSON, YAML o código fuente en algún lenguaje interpretado (Python, Ruby, Groovy, etc.). Hemos descubierto que una excelente manera de crear una configuración XML para el código heredado es usar Groovy MarkupBuilder. Otra buena opción es crear un lenguaje específico de dominio; Esto es bastante fácil de hacer con Ruby, Groovy y muchos otros idiomas.
fuente
El análisis es relativamente fácil y al mismo tiempo es legible para los humanos.
Y algunos analizadores agradables (por ejemplo, Xerces {c ++}) están fácilmente disponibles.
fuente