Principios del diseño XML: cuándo usar elementos versus atributos por Uche Ogbuji de IBM es probablemente uno de los mejores recursos en la materia.
La esencia de la decisión es que los atributos son cosas "hechas". No puede cambiarlos, modificarlos o anidarlos. Son independientes del orden y distintos dentro del elemento (no puede tener dos de la misma cosa).
Si alguna de estas restricciones es algo que puede cambiar, convierta los datos en un nodo secundario del XML.
En su ejemplo, tiene una persona que tiene un nombre y una edad. Tengo nombre, segundo nombre y apellido ... y un apodo. Y algunas personas tienen apellidos de soltera, múltiples segundos nombres u honoríficos: ¿cómo pondrían a John Ronald Reuel Tolkien en una estructura así?
Y entonces tenemos a alguien que tiene dos segundos nombres que tienen un orden para ellos. Esto debería mostrar claramente que no, un atributo no es la mejor opción para esto.
No puedo encontrarlo actualmente, pero en el documento vinculado anterior hay una declaración de que los nombres son cosas que requieren un poco de reflexión que conducen a "Espero ampliar el tratamiento de los nombres de las personas en el marcado en un artículo futuro". Si alguien tiene una pista sobre esto, deje un comentario o edítelo en este lugar.
Por otro lado, la edad es algo que tiene una estructura bastante fija (sugeriría el cumpleaños en lugar de un número entero). Como tal, representar esta información en un formato bien conocido y comprendido tiene sentido en un atributo. Una persona tiene uno y solo un cumpleaños y no hay "pedidos" que desee conservar.
Uche Ogbuji identifica tres principios básicos en el diseño adecuado de un formato xml. Las siguientes son citas abreviadas del documento vinculado anterior.
- Principio de información estructurada
Si la información se expresa de forma estructurada, especialmente si la estructura puede ser extensible, use elementos. Por otro lado: si la información se expresa como un token atómico, use atributos
- Principio de legibilidad
Si la información está destinada a ser leída y entendida por una persona, utilice elementos. Si la información es más fácil de entender y digerir por una máquina, use atributos.
- Principio de enlace elemento / atributo
Use un elemento si necesita que su valor sea modificado por otro atributo
Por lo tanto, los nombres deben ser elementos: son datos estructurados que no son un token atómico, es más probable que sean leídos por un humano que una computadora y pueden ser modificados por otro atributo en el nombre mismo.
Las fechas deben ser atributos: son datos que son un token atómico, es más probable que sean leídos por una computadora que un ser humano (y luego transformados al formato preferido del ser humano si es necesario ), y por último, es poco probable que sean modificados por otro atributos en ellos.