Em XML, não há regras sobre quando usar os atributos, e quando usar elementos filho.
Uso de elementos contra Atributos
Os dados podem ser armazenados em elementos de criança ou em atributos.
Dê uma olhada nestes exemplos:
<person sex="female">
<firstname>Anna</firstname>
<lastname>Smith</lastname>
</person>
<person>
<sex>female</sex>
<firstname>Anna</firstname>
<lastname>Smith</lastname>
</person>
No primeiro exemplo, o sexo é um atributo. Na última, o sexo é um elemento filho. Ambos os exemplos fornecem a mesma informação.
Não há regras sobre quando usar atributos, e quando usar elementos filho. Minha experiência é que os atributos são úteis em HTML, mas em XML você deve tentar evitá-los. Use elementos filho, se a informação se sente como dados.
My Favorite Way
I like to store data in child elements.
Os seguintes três documentos XML contêm exatamente a mesma informação:
Um atributo de data é utilizado no primeiro exemplo:
<note date="12/11/2002">
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>
Um elemento data é utilizada no segundo exemplo:
<note>
<date>12/11/2002</date>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>
Um elemento data ampliada é usado no terceiro: (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 o uso de atributos?
Deve-se evitar o uso de atributos?
Alguns dos problemas com atributos são:
- atributos não podem conter vários valores (child elements can)
- atributos não são facilmente expansível (for future changes)
- atributos não podem descrever estruturas (child elements can)
- atributos são mais difíceis de manipular por código de programa
- valores de atributos não são fáceis de testar contra um DTD
Se você usar atributos como recipientes para dados, você acaba com documentos que são difíceis de ler e manter. Tente usar elements para descrever dados. Use atributos apenas para fornecer informação que não é relevante para os dados.
Não acabar assim (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>
Uma exceção à minha regra de Atributo
As regras têm sempre exceções.
Minha regra sobre os atributos tem uma exceção:
Às vezes eu atribuir referências de identificação para elementos. Estas referências ID pode ser usado para acessar elementos XML da mesma maneira como o nome ou atributos ID em HTML. Este exemplo demonstra o seguinte:
<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>
O ID nestes exemplos é apenas um contador, ou um identificador único, para identificar as diferentes notas no arquivo XML, e não uma parte dos dados da nota.
O que estou tentando dizer aqui é que os metadados (data about data) devem ser armazenados como atributos, e que se os dados devem ser armazenados como elementos.