Pregunta

Lectura Stackoverflow y escuchar los podcasts por Joel Spolsky y Jeff Atwood, comienzo a creer que muchos desarrolladores odio usando XML o al menos tratar de evitar el uso de XML tanto como sea posible para el almacenamiento o el intercambio de datos .

Por otro lado, me gusta el uso de XML mucho por varias razones:

  • serialización XML se implementa en la mayoría de las lenguas modernas y es extremadamente fácil de usar ,
  • Al ser más lenta que la serialización binaria, la serialización XML es muy útil cuando se trata de utilizando los mismos datos de varios lenguajes de programación o en el que se pretende que sea leído y entendido, incluso para la depuración, por una humana (JSON, por ejemplo, es más difícil de entender),
  • soportes XML Unicode , y cuando se utiliza correctamente, no hay problemas con diferente codificación, personajes, etc.
  • Hay un montón de herramientas que facilita el trabajo con datos XML. XSLT es un ejemplo, lo que facilita la presente y para transformar los datos. XPath es otro, lo que facilita la búsqueda de datos,
  • XML se puede almacenar en algunos servidores SQL, que permite a los escenarios cuando los datos que es demasiado complicado para ser fácilmente almacenado en tablas SQL debe ser salvado y manipulado; JSON o binarios de datos, por ejemplo, no pueden ser manipulados a través de SQL directamente (excepto por las cadenas de manipulación, que es loco en la mayoría de las situaciones),
  • XML no requiere ninguna aplicación a instalar. Si quiero que mi aplicación utilice una base de datos, hay que instalar un servidor de base de datos en primer lugar. Si quiero que mi aplicación para el uso de XML, No tengo que instalar nada ,
  • XML es mucho más explícita y extensible que, por ejemplo, los archivos de registro de Windows o INI,
  • En la mayoría de los casos, hay no hay problemas CR-LF , gracias al nivel de abstracción proporcionada por XML.

Por lo tanto, teniendo en cuenta todos los beneficios del uso de XML, por la que muchos desarrolladores odio a usarlo? En mi humilde opinión, el único problema con esto es que:

  • XML es demasiado prolijo y requiere mucho más lugar que la mayoría de otras formas de datos, especialmente cuando se trata de la codificación Base64.

Por supuesto, hay muchos escenarios donde XML no encaja en absoluto. El almacenamiento de preguntas y respuestas de SO en un archivo XML en el servidor habrá absolutamente equivocado. O, al almacenar un vídeo AVI o un montón de imágenes JPG, XML es el peor que se puede usar.

Pero qué pasa con otros escenarios? ¿Cuáles son las debilidades de XML?


Para las personas que consideraron que esta cuestión no es una cuestión real:

Contrariamente a preguntas como importantes nuevas invenciones un en el cómputo desde 1980 , mi pregunta es una pregunta muy clara y claramente invita a explicar lo que las debilidades de la experiencia de otras personas cuando se utiliza XML y por qué no les guste. No invita a discutir, por ejemplo, Si XML es bueno o malo . Tampoco se requiere largas discusiones; por lo tanto, las respuestas recibidas hasta el momento actual son cortos y precisos y proporciona suficiente información que quería.

y es un wiki, ya que no puede ser un único buena respuesta a esta pregunta.

De acuerdo con SO, "no es una cuestión real" es una pregunta que "Es difícil decir lo que se pide aquí. Esta pregunta es ambigua, imprecisa, incompleta o retórica y no se puede responder razonablemente a su actual formar ".

  • Lo que se pide aquí : Creo que la pregunta en sí es muy claro, y varios párrafos de texto anterior hace que sea aún más clara,
  • Esta pregunta es ambigua, imprecisa, incompleta : una vez más, no hay nada ambigua, ni vaga ni incompleta,
  • o retórico : it no es: la respuesta a mi pregunta no es algo obvio,
  • y no puede ser respondida razonablemente . Varias personas ya se dieron unas respuestas a la pregunta, lo que demuestra que la pregunta se puede responder razonablemente

También parece bastante obvio cómo valorar las respuestas y determinar la respuesta aceptada. Si la respuesta da buenas razones de lo que está mal con XML, hay posibilidades de que esta respuesta será sometida a votación, entonces aceptado.

¿Fue útil?

Solución

Algunos puntos débiles:

  • Es algo difícil de archivos XML asociados y recursos externos, por lo que los nuevos formatos de documentos Office utilizan un sobre postal que incluye un esqueleto archivos archivo XML y recursos agrupados. La otra opción de utilizar la codificación base64 es muy prolijo y no permite un buen acceso aleatorio, que lo lleva a uno al siguiente punto:
  • Acceso
  • Al azar es difícil. Ninguno de los dos modos tradicionales de leer un archivo XML -. Construyen un DOM o sólo avance lectura SAX estilo permiten un acceso realmente al azar
  • acceso de escritura simultánea a diferentes partes del fichero es difícil, por lo que su uso en los manifiestos de ejecutables de Windows es propenso a errores.
  • ¿Qué hace un uso de codificación de archivos XML? Estrictamente hablando adivinar la codificación en primer lugar, a continuación, leer el archivo y verifique la codificación era correcta.
  • Es difícil porciones de versión de un archivo. Por lo tanto, si desea proporcionar versiones granular, es necesario dividir los datos. Esto no es sólo un problema de formato de archivo, sino también debido al hecho de que las herramientas generalmente proporcionan la semántica para cada fichero. - herramientas de control de versiones, herramientas de sincronización como Dropbox, etc.

Otros consejos

<xml>
    <noise>
        The
    </noise>
    <adjective>
        main
    </adjective>
    <noun>
        weakness
    </noun>
    <noise>
        of
    </noise>
    <subject>
        XML
    </subject>
    <noise>
        ,
    </noise>
    <whocares>
        in my opinion
    </whocares>
    <noise>
        ,
    </noise>
    <wildgeneralisation>
        is its verbosity
    </wildgeneralisation>
    <noise>
        .
    </noise>
</xml>

No soy la persona adecuada para preguntar, ya que soy un gran fan de XML a mí mismo. Sin embargo, puedo decir que una de las principales quejas que he escuchado:

Es duro para trabajar con ellos. En este caso, los medios de disco duro que se necesita saber una API y que tendrá que escribir relativamente mucho código para analizar el código XML. Aunque yo no diría que es realmente tan difícil, sólo puedo estar de acuerdo que una lengua que se hace para describir objetos, se puede acceder más fácilmente cuando se utiliza un lenguaje que soporte crean dinámicamente objetos.

Creo que en general la reacción es simplemente porque XML es usado en exceso.

Sin embargo, si hay una palabra que odio de XML, con una pasión, es espacios de nombres. La pérdida de productividad en torno a los problemas de espacio de nombres es horrible.

XML desciende de SGML, el bisabuelo de los lenguajes de marcado. El propósito de SGML y por extensión XML es texto anotar . XML hace esto bien y tiene una amplia gama de herramientas que aumentan su facilidad para una variedad de aplicaciones.

El problema, como yo lo veo, es que XML se utiliza con frecuencia, no al texto anotar, pero para representar los datos estructurados , que es una diferencia sutil pero importante. En términos prácticos, los datos estructurados debe ser concisa para una variedad de razones. El rendimiento es obvia, especialmente cuando el ancho de banda es limitado. Esta es probablemente una de las razones principales por las JSON es tan popular para aplicaciones web. representación estructura de datos concisa sobre los medios de alambre mejor escalabilidad.

Por desgracia, JSON no es muy legible sin relleno blanco extra, que casi siempre se omite. Por otro lado, si alguna vez ha intentado editar un archivo XML de gran tamaño utilizando un editor de línea de comandos, que puede ser muy incómodo también.

En lo personal, me parece que YAML establece un equilibrio agradable entre los dos extremos. Compare los siguientes (copiado de yaml.org con cambios menores).

YAML:

invoice: 34843
  date: 2001-01-23
  billto: &id001
    given: Chris
    family: Dumars
    address:
      lines: |
        458 Walkman Dr.
        Suite #292
      city: Royal Oak
      state: MI
      postal: 48046
  shipto: *id001
  product:
  - sku: BL394D
    quantity: 4
    description: Basketball
    price: 450.00
  - sku: BL4438H
    quantity: 1
    description: Super Hoop
    price: 2392.00
  tax : 251.42
  total: 4443.52
  comments: >
    Late afternoon is best.
    Backup contact is Nancy
    Billsmer @ 338-4338.

XML:

<invoice>
   <number>34843</number>
   <date>2001-01-03</date>
   <billto id="id001">
      <given>Chris</given>
      <family>Dumars</family>
      <address>
        <lines>
          458 Walkman Dr.
          Suite #292
        </lines>
        <city>Royal Oak</city>
        <state>MI</state>
        <postal>48046</postal>
      </address>
   </billto>
   <shipto xref="id001" />
   <products>
      <product>
        <sku>BL394D</sku>
        <quantity>4</quantity>
        <description>Basketball</description>
        <price>450.00</price>
      </product>
      <product>
        <sku>BL4438</sku>
        <quantity>1</quantity>
        <description>Super Hoop</description>
        <price>2392.00</price>
      </product>
   </products>
   <tax>251.42</tax>
   <total>4443.52</total>
   <comments>
    Late afternoon is best. Backup contact is Nancy Billsmer @ 338-4338
   </comments>
</invoice>

Ambos representan los mismos datos, pero el YAML es más de un 30% más pequeño y podría decirse que sea más legible. ¿Qué prefiere tener que modificar con un editor de texto? Hay muchas librerías disponibles para analizar y emitir YAML (es decir snakeyaml para desarrolladores de Java).

Como con todo, la herramienta adecuada para el trabajo adecuado es la mejor regla a seguir.

Mi problema desagradable favorito es con formatos de serialización XML que atribuye uso - como XAML.

Estos trabajos:

<ListBox ItemsSource="{Binding Items}" SelectedItem="{Binding CurrentSelection}"/>

Esto no:

<ListBox SelectedItem="{Binding CurrentSelection}" ItemsSource="{Binding Items}"/>

XAML cesionarios deserialización valores de la propiedad, ya que son de lectura de la secuencia XML. Así, en el segundo ejemplo, cuando se asigna la propiedad SelectedItem, ItemsSource del control no se ha establecido todavía, y la propiedad SelectedItem está siendo asignado a un elemento que sin embargo sabe que existe.

Si está utilizando Visual Studio para crear sus archivos XAML, todo va a estar bien, porque Visual Studio mantiene el orden de los atributos. Pero modificar XAML de alguna herramienta XML que cree que la recomendación XML cuando se dice que el orden de los atributos no es significativo, y el niño que está en un mundo de dolor.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top