Atributos XML
Elementos XML podem ter atributos, assim como HTML.
Os atributos são projetados para conter dados relacionados a um elemento específico.
Atributos XML devem ser citados
Os valores dos atributos devem sempre ser citados. Podem ser usadas aspas simples ou duplas.
Para o gênero de uma pessoa, o elemento <person> pode ser escrito assim:
<person gender="female">
ou assim:
<person gender='female'>
Se o próprio valor do atributo contiver aspas duplas, você poderá usar aspas simples, como neste exemplo:
<gangster name='George "Shotgun" Ziegler'>
ou você pode usar entidades de caracteres:
<gangster name="George "Shotgun" Ziegler">
Elementos XML vs. Atributos
Dê uma olhada nesses dois exemplos:
<person gender="female">
<firstname>Anna</firstname>
<lastname>Smith</lastname>
</person>
<person>
<gender>female</gender>
<firstname>Anna</firstname>
<lastname>Smith</lastname>
</person>
No primeiro exemplo, o gênero é um atributo. No último exemplo, o gênero é um elemento. Ambos os exemplos fornecem as mesmas informações.
Não há regras sobre quando usar atributos ou quando usar elementos em XML.
Meu jeito favorito
Os três documentos XML a seguir contêm exatamente as mesmas informações:
Um atributo de data é usado no primeiro exemplo:
<note date="2008-01-10">
<to>Tove</to>
<from>Jani</from>
</note>
Um elemento <date> é usado no segundo exemplo:
<note>
<date>2008-01-10</date>
<to>Tove</to>
<from>Jani</from>
</note>
Um elemento <date> expandido é usado no terceiro exemplo: (THIS IS MY FAVORITE):
<note>
<date>
<year>2008</year>
<month>01</month>
<day>10</day>
</date>
<to>Tove</to>
<from>Jani</from>
</note>
Evitar atributos XML?
Algumas coisas a serem consideradas ao usar atributos são:
- os atributos não podem conter vários valores (os elementos podem)
- atributos não podem conter estruturas de árvore (elementos podem)
- atributos não são facilmente expansíveis (para alterações futuras)
Não termine assim:
<note day="10" month="01" year="2008"
to="Tove" from="Jani" heading="Reminder"
body="Don't forget me this weekend!">
</note>
Atributos XML para Metadados
Às vezes, as referências de ID são atribuídas a elementos. Esses IDs podem ser usados para identificar elementos XML da mesma forma que o atributo id em HTML. Este exemplo demonstra isso:
<messages>
<note id="501">
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>
<note id="502">
<to>Jani</to>
<from>Tove</from>
<heading>Re: Reminder</heading>
<body>I will not</body>
</note>
</messages>
Os atributos id acima são para identificar as diferentes notas. Não faz parte da nota em si.
O que estou tentando dizer aqui é que metadados (dados sobre dados) devem ser armazenados como atributos, e os próprios dados devem ser armazenados como elementos.