2008-10-28 22 views

Respuesta

69

Existen elementos centrados en atributos y XML centrados en atributos, en su ejemplo, el primer elemento está centrado en el elemento, el segundo es centrado en atributos.

La mayoría de las veces, estos dos patrones son equivalentes, sin embargo, hay algunas excepciones.

atributo centrada

  • tamaño más pequeño de elemento céntrica.
  • No es muy interoperable, ya que la mayoría de los analizadores XML pensarán que los datos del usuario son presentados por el elemento, los atributos se usan para describir el elemento.
  • No hay forma de presentar el valor que admite valores NULL para algunos tipos de datos. p.ej. nullable int
  • No se puede expresar el tipo complejo.

Elemento centrada

  • tipo complejo puede ser solamente presenta como un nodo de elemento.
  • Muy interoperable
  • Tamaño más grande que el atributo centrado. (la compresión se puede utilizar para eliminar el tamaño significativamente)
  • Los datos anulables se pueden expresar con el atributo xsi: nil = "true"
  • Más rápido de analizar porque el analizador solo busca elementos para los datos del usuario.

práctica

Si realmente se preocupan por el tamaño de XML, el uso del atributo cada vez que pueda, si es apropiado, Deja la anulable, el tipo de complejo y nodo que va a llevar a cabo valor de texto grande como elementos, Si no le importa el tamaño de XML o tiene permiso de compresión durante la transferencia, quédese con los elementos. Es más extensible.

Antecedentes

En DOT NET, XmlSerializer puede serializar propiedades de los objetos en cualquiera de los atributos o elementos. En el framework WCF reciente, el serializador DataContract solo puede serializar propiedades en elementos y es más rápido que XmlSerializer, la razón es obvia, solo necesita buscar datos de usuario de los elementos mientras se deserializa.

Aquí un artículo lo explica así Element vs attribute

+1

XML centrado en atributos tiene una gran ventaja de interoperabilidad con JSON. Todo lo que necesita es algunos consejos sobre qué poner en una matriz y qué tratar como un número o booleano, y puede hacer conversiones automáticas perfectas. – PstScrpt

4

En mi empresa, que haría favorecer el segundo enfoque.

La manera en que pensamos al respecto es que "nombre" y "apellido" son atributos del nodo "persona", en lugar de subcampos del nodo "persona". Es una diferencia sutil.

En mi opinión, el segundo enfoque es más conciso, y la legibilidad/mantenibilidad se mejora significativamente, lo cual es muy importante.

Por supuesto, dependerá de su aplicación. No creo que haya una regla general que cubra todos los escenarios.

+1

El segundo enfoque es más legible para un humano, pero el primero es el enfoque más legible por la mayoría de los analizadores. El primer enfoque es también más extensible. Debe leer el artículo al que hace referencia ** ** codemeit ** (http://www.ibm.com/developerworks/xml/library/x-eleatt.html). – awe

2

Los atributos no son sensibles a los pedidos. Esto puede ser una ventaja o una desventaja dependiendo de su situación.

Los atributos no se pueden duplicar. Si "Joe" tiene dos nombres, entonces los nodos son el único camino a seguir.

5

En el futuro, cuando agregue una propiedad <address>, no querrá convertirla en un atributo XML. Esto se debe a que <address> podría ser un elemento más complejo formado por dirección, ciudad, país, etc.

Por esta razón, es posible que desee elegir el primer formulario de subelementos a menos que esté realmente seguro de que el atributo ganó No necesitas ir mucho más profundo. La primera forma permite una mayor extensibilidad en el futuro.

Si le preocupa el espacio, comprima su XML.

+0

Simplemente curioso, pero no podrías tener una combinación de ambos. Di nombre y apellido como atributos y luego dirección como un nodo. Lo que trato de decir es que no tienes que elegir solo uno. ¿Correcto? –

+2

Tiene razón, pero para consistencia al representar propiedades de una sola entidad ("persona" en el ejemplo original), probablemente desee elegir una u otra. De esta forma, no tendrá que recordar cuál está almacenado de qué manera. –

+0

' ' que pueda No descubra cómo hacerlo para formatear correctamente, pero el punto es que no está cortando la extensibilidad.No se trata de elementos secundarios que está evitando con XML centrado en atributos, sino con nodos de texto. – PstScrpt

3

También puede ver las respuestas a this pregunta que hice hace un tiempo. Encontré las respuestas útiles.

1

encontré información siguiente muy útil para explicar la elección de los atributos vs elementos en una corta de la manera

Algunos de los problemas con el uso de atributos son:

atributos no pueden contener varios valores (elementos pueden)
Los atributos no pueden contener estructuras de árbol (elementos pueden)
atributos no son fácilmente ampliable (para cambios futuros)

Los atributos son difíciles de leer una d mantener. Usa elementos para datos. Use atributos para información que no es relevante para los datos.

fuente: http://www.w3schools.com/xml/xml_attributes.asp