2009-08-20 14 views
5

Duplicar posible:
Should I use Elements or Attributes in XML?XML correcto formateo

Estoy escribiendo un archivo de configuración en XML y yo soy bastante nuevo en toda la locura de XML.

Tengo curiosidad por saber qué piensa la comunidad SO sobre cómo se deben representar varios valores en XML, ya que puedo ver un par de maneras de hacerlo.

Por ejemplo, ¿cuándo debe un valor ser un atributo y cuándo se debe anidar dentro de las etiquetas?

<node1 message="Hello world" id="1" /> 

Versus

<node1> 
    <message>Hello world</message> 
    <id>1</id> 
</node1> 

Obviamente este es un ejemplo muy simple ... pero hay pros y los contras de hacer ciertos tipos como un atributo frente nodos secundarios? ¿O ambos o ninguno?

+1

Hay muchos, muchos duplicados exactos de esta pregunta, por ejemplo: http://stackoverflow.com/questions/1096797, http://stackoverflow.com/questions/33746, http://stackoverflow.com/questions/ 241819 y http://stackoverflow.com/questions/152313. –

Respuesta

14

Normalmente trato los atributos como metadatos, o datos sobre, o calificación, los datos dentro de los nodos.

p. Ej. en el ejemplo anterior, tal vez coloque el mensaje como un nodo de texto y tenga una identificación de atributo relacionada.

No es correcto o incorrecto aquí, pero creo que la heurística anterior es útil. Un escenario donde es posible que desee almacenar tanto como sea posible en los atributos es para el análisis SAX, en el cual la devolución de llamada de los elementos tiene un parámetro de todos los atributos. es decir, se obtiene una devolución de llamada para todos los atributos, en lugar de 'n' devoluciones de llamada, uno para cada dato. Sin embargo, esa es una razón bastante especializada para construir su documento de esa manera, y lo pensaría cuidadosamente antes de hacerlo.

+1

esa es una buena manera de pensarlo. – nickf

+0

Sí, este es un enfoque común. Ver p. http://www.ibm.com/developerworks/xml/library/x-eleatt.html –

+0

gracias! definitivamente una buena manera de considerarlo cuando diseñe mi configuración – espais

1

Me gustaría poner la identificación (y las referencias, nombres cortos, etc.) como un atributo. El resto depende de ti. He visto muchos esquemas de "solo atributos", y no es tan malo para ciertos tipos de datos (cadenas cortas, fechas, etc.) y hace que escribir SAXParsers sea más fácil, pero no me parece "correcto".

Algunas personas admiten ambos, es decir, los datos como atributos o campos, por lo que el usuario puede decidir.

Personalmente, creo que los atributos como metadatos como se describió anteriormente son la forma correcta de hacer las cosas.

1

La mejor práctica es favorecer los elementos sobre los atributos. Los elementos son más fáciles de acceder desde el árbol DOM y proporcionan datos de estructura sobre los datos que describe. Según los datos de estructura, quiero decir que puede determinar quiénes son los padres e hijos del elemento frente a lo que deberían o pueden ser. Esto es muy importante desde la perspectiva del esquema en el que el XML definido por el esquema es estructuralmente autoconsciente. El único beneficio de los atributos es la brevedad, que también puede ser importante. Si puede hacer con un solo atributo lo que de otra manera requeriría tres o cuatro etiquetas anidadas, entonces probablemente debería usar un atributo.

2

Especificar con elementos es ciertamente más detallado y fastidioso, por otro lado no es posible validarlo completamente con atributos.

Si tiene dos propiedades, una de las cuales debe especificarse, puede validar esto si son elementos secundarios dentro del esquema, con atributos que solo puede indicar si el atributo es obligatorio o no.

Desde la página W3Schools Attributes:

Algunos de los problemas con el uso de atributos son:

  • atributos no pueden contener múltiples valores (elementos pueden)
  • atributos no pueden contener estructuras de árbol (elementos pueden)
  • atributos no son fácilmente ampliables (para cambios futuros)

En este ejemplo (ligeramente inventado), el vehículo puede tener alas y ruedas o alguna combinación, con atributos que no podemos asegurar que al menos uno está definido, mientras que con elementos podríamos usar un elemento de elección con minOcurre para asegurar que al menos uno de los elementos esté definido.

El atributo de nombre siempre es necesario, por lo que puede ser un atributo o elemento sin problemas de validación.

<vehicle name="plane" wheels="3" wings="2"/> 
<vehicle name="sled" runners="2"/> 
<vehicle name="robin reliant" wheels="3"/> 

<vehicle name="plane"> 
    <wheels>3</wheels> 
    <wings>2</wings> 
</vehicle> 
<vehicle name="sled"> 
    <runners>2</runners> 
</vehicle> 
<vehicle name="robin reliant"> 
    <wheels>3</wheels> 
</vehicle> 
+0

+1 para los comentarios re. valores múltiples/estructuras de árbol, etc., pero no entiendo "Usar atributos para información que no es relevante para los datos". Eso no parece del todo bien! –

+0

Es un fraseo un poco extraño, lo leería como atributos de uso para los metadatos, aunque no estoy seguro de que eso sea lo que se quería decir –

+0

Lo he pensado un poco más y todavía no estoy seguro de lo que significa, lo eliminaré –

1

Otro punto a considerar: los atributos no pueden tener espacios en blanco significativos en ellos.