Atributos XML

Elementos XML podem conter atributos no rótulo de início, semelhante ao HTML.

Atributo (Attribute) fornece informações adicionais (extra) sobre o elemento.

Atributos XML devem conter aspas

Os valores dos atributos devem ser envolvidos por aspas, mas podem usar aspas simples ou duplas.

Por exemplo, para a gender de uma pessoa, o tag <person> pode ser escrita assim:

<person gender="female">

Ou assim também pode ser:

<person gender='female'>

Se o valor do atributo já contiver aspas duplas, você pode usar aspas simples, conforme o exemplo a seguir:

<gangster name='George "Shotgun" Ziegler'>

Ou você pode usar caracteres de entidade:

<gangster name="George "Shotgun" Ziegler">

Elementos XML e Atributos

Veja esses 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, sex é um atributo. No segundo exemplo, sex é um elemento filho. Ambos os exemplos podem fornecer a mesma informação.

Não há regras no XML que nos digam quando usar atributos e quando usar elementos filhos. Minha experiência é que, no HTML, os atributos são convenientes, mas no XML, você deve evitar usá-los o máximo possível. Se a informação parece como dados, use elementos filhos.

A minha maneira favorita

Os três documentos XML abaixo contêm informações completamente idênticas:

No primeiro exemplo, foi usado o atributo date:

<note date="2008-01-10">
  <to>George</to>
  <from>John</from>
</note>

No segundo exemplo, foi usado o elemento <date>:

<note>
  <date>2008-01-10</date>
  <to>George</to>
  <from>John</from>
</note>

No terceiro exemplo, foi usado o elemento date expandido (é o meu favorito):

<note>
  <date>
    <year>2008</year>
    <month>01</month>
    <day>10</day>
  </date>
  <to>George</to>
  <from>John</from>
</note>

Evitar o uso de atributos XML?

Alguns pontos a considerar ao usar atributos são:

  • Os atributos não podem conter múltiplos valores (os elementos podem)
  • Os atributos não podem descrever estruturas de árvore (os elementos podem)
  • Os atributos não são fáceis de estender (para mudanças futuras)

Tente usar elementos para descrever dados. E use apenas atributos para fornecer informações não relacionadas aos dados.

Não faça essas coisas estúpidas (não é o modo correto de se usar XML):

<note day="10" month="01" year="2008"
to="George" from="John" heading="Reminder"
body="Don't forget the meeting!"
</note>

Atributos XML para metadados

Às vezes, IDs são atribuídos aos elementos para referência. Esses IDs podem ser usados para identificar elementos XML, funcionando de maneira semelhante ao atributo ID em HTML. Este exemplo nos demonstra essa situação:

<messages>
  <note id="501">
    <to>George</to>
    <from>John</from>
    <heading>Reminder</heading>
    <body>Don't forget the meeting!</body>
  </note>
  <note id="502">
    <to>John</to>
    <from>George</from>
    <heading>Re: Lembrete</heading>
    <body>Não vou</body>
  </note> 
</messages>

O ID acima é apenas um identificador, usado para identificar diferentes anotações. Ele não faz parte dos dados da anotação.

A ideia que nos esforçamos para transmitir é que os metadados (dados sobre dados) devem ser armazenados como atributos, enquanto os dados em si devem ser armazenados como elementos.