En XML, no hay reglas acerca de cuándo utilizar atributos, y cuándo utilizar elementos secundarios.
El uso de elementos vs Atributos
Los datos pueden ser almacenados en los elementos secundarios o en atributos.
Echar un vistazo a estos ejemplos:
<person sex="female">
<firstname>Anna</firstname>
<lastname>Smith</lastname>
</person>
<person>
<sex>female</sex>
<firstname>Anna</firstname>
<lastname>Smith</lastname>
</person>
En el primer ejemplo el sexo es un atributo. En el pasado, el sexo es un elemento secundario. Ambos ejemplos proporcionan la misma información.
No hay reglas acerca de cuándo utilizar atributos, y cuándo utilizar elementos secundarios. Mi experiencia es que los atributos son útiles en HTML, pero en XML que debe tratar de evitarlos. Utilizar elementos secundarios si la información se siente como de datos.
Mi forma favorita
I like to store data in child elements.
Los siguientes tres documentos XML contienen exactamente la misma información:
Un atributo de fecha se utiliza en el primer ejemplo:
<note date="12/11/2002">
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>
Un elemento de fecha se utiliza en el segundo ejemplo:
<note>
<date>12/11/2002</date>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>
Un elemento fecha ampliada se utiliza en la tercera: (THIS IS MY FAVORITE) :
<note>
<date>
<day>12</day>
<month>11</month>
<year>2002</year>
</date>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>
Evitar el uso de atributos?
En caso de que evitar el uso de atributos?
Algunos de los problemas con atributos son:
- atributos no pueden contener varios valores (child elements can)
- atributos no son fácilmente ampliable (for future changes)
- atributos no pueden describir las estructuras (child elements can)
- atributos son más difíciles de manipular por el código del programa
- valores de los atributos no son fáciles de probar con una DTD
Si utiliza atributos como contenedores de datos, se termina con documentos que son difíciles de leer y mantener. Trate de usar elements para describir los datos. Uso atribuye sólo a proporcionar información que no es relevante para los datos.
No terminar como este (this is not how XML should be used) :
<note day="12" month="11" year="2002"
to="Tove" from="Jani" heading="Reminder"
body="Don't forget me this weekend!">
</note>
Una excepción a mi regla Atributo
Reglas siempre tienen excepciones.
Mi regla acerca de los atributos tiene una excepción:
A veces le asigno referencias de identificación a los elementos. Estas referencias de identificación se pueden usar para acceder a elementos de XML de la misma manera como el nombre o atributos ID en HTML. Este ejemplo muestra lo siguiente:
<messages>
<note id="p501">
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>
<note id="p502">
<to>Jani</to>
<from>Tove</from>
<heading>Re: Reminder</heading>
<body>I will not!</body>
</note>
</messages>
El ID en estos ejemplos es simplemente un contador, o un identificador único, para identificar las diferentes notas en el archivo XML, y no una parte de los datos de notas.
Lo que estoy tratando de decir aquí es que los metadatos (data about data) deben ser almacenados como atributos, y que los datos en sí se debe almacenar como elementos.