Atributos XML
Os elementos XML podem ter atributos na tag de abertura, assim como na HTML.
Os atributos são usados para prover informação adicional sobre os elementos.
Atributos XML
Os elementos XML podem ter atributos.
Da HTML vocÊ lembrará disto: <IMG SRC="computer.gif">. O atributo SRC prove informação adicional sobre o elemento IMG.
Na HTML (e na XML) os atributos provêem informação adicional sobre os elementos:
<img src="computer.gif">
<a href="demo.asp">
|
Os atributos geralmente provêem informação que não é parte dos dados. No exemplo abaixo, o tipo de arquivo é irrelevante ao dado, mas importante para o software que quer manipular o elemento:
<arquivo tipo="gif">computer.gif</arquivo>
|
Estilos de Aspas, "feminino" ou 'feminino'?
Os valores de atributo devem sempre ser colocados entre aspas, mas tanto aspas simples quanto duplas podem ser usadas. Para o sexo de uma pessoa, a tag pessoa pode ser escrita assim:
ou assim:
Observação: Se o valor do atributo já contém aspas duplas é necessário usar aspas simples, como neste exemplo:
<bandido nome='George "Espingarda" Ziegler'>
|
Observação: Se o valor do atributo já contém aspas simples é necessário usar aspas duplas, como neste exemplo:
<bandido nome="George 'Espingarda' Ziegler">
|
Uso de Elementos vs. Atributos
Dados podem ser armazenados em elementos filhos ou em atributos.
Dê uma olhada nestes exemplos:
<pessoa sexo="feminino">
<primeironome>Anna</primeironome>
<últimonome>Smith</últimonome>
</pessoa>
|
<pessoa>
<sexo>feminino</sexo>
<primeironome>Anna</primeironome>
<últimonome>Smith</últimonome>
</pessoa>
|
No primeiro exemplo sexo é um atributo. No último, sexo é um elemento filho. Ambos os exemplos provêem a mesma informação.
Não há regras sobre quando usar atributos e quando usar elementos filhos. Minha experiência é que os atributos são convenientes na HTML, mas na XML você deve tentar evita-los. Use elementos filhos se a informação parecer-se com dados.
Meu Jeito Favorito
Eu gosto de armazenar dados em elementos filhos.
Os três documentos seguintes contém exatamente as mesmas informações:
Um atributo data é usado no primeiro exemplo:
<bilhete data="12/11/2002">
<para>José</para>
<de>Maria</de>
<título>Lembrete</título>
<corpo>Não me esqueça neste fim-de-semana!</corpo>
</bilhete>
|
Um elemento data é usado no segundo exemplo:
<bilhete>
<data>12/11/2002</data>
<para>José</para>
<de>Maria</de>
<título>Lembrete</título>
<corpo>Não me esqueça neste fim-de-semana!</corpo>
</bilhete>
|
Um elemento data expandido é usado no terceiro: (ESTE É O MEU FAVORITO):
<bilhetee>
<data>
<dia>12</dia>
<mês>11</mês>
<ano>2002</ano>
</data>
<para>José</para>
<de>Maria</de>
<título>Lembrete</título>
<corpo>Não me esqueça neste fim-de-semana!</corpo>
</bilhete>
|
Evitar o uso de atributos?
Você deve evitar o uso de atributos?
Aqui estão alguns dos problemas no uso de atributos:
- atributos não podem conter múltiplos valores (elementos filhos podem)
- atributos não são tão facilmente expandíveis (para futuras mudanças)
- atributos não podem descrever estruturas (elementos filhos podem)
- atributos são mais difíceis de manipular por código de programa
- valores de atributos values não são tão fáceis de testar em compáração com uma Document Type Definition (DTD) - a qual é usada para definir os elementos legais de um documento XML
Se você usa atributos como compartimentos pata dados, você acaba com documentos que são difícieis de ler e manter. Tente usar elementos para descrever dados. Use atributos somente para prover informação que não seja relevante para os dados.
Não acabe assim (se você pensa que isto se parece com XML, você não entendeu o ponto):
<bilhete dia="12" mês="11" ano="2002"
para="José" de="Maria" título="Lembrete"
corpo="Não me esqueça neste fim-de-semana!">
</bilhete>
|
Uma Exceção para a minha Regra do Atributo
Regras sempre têm exceções.
A minha regra sobre os atributos tem uma exceção:
Às vezes eu destino referências de ID aos elementos. Estas referências de ID podem ser usadas para acessar elementos XML de maneira muito semelhante aos atributos NAME ou ID na HTML. Este exemplo demonstra isso:
<mensagens>
<bilhete id="p501">
<para>José</para>
<de>Maria</de>
<título>Lembrete</título>
<corpo>Não me esqueça neste fim-de-semana!</corpo>
</bilhete>
<bilhete id="p502">
<para>Maria</para>
<de>José</de>
<título>Re: Lembrete</título>
<corpo>Não esquecerei!</corpo>
</bilhete>
</mensagens>
|
O ID nestes exemplos é apenas um contador, ou um identificador único, para identificar os diferentes bilhetes no arquivo XML, e não são parte dos dados dos bilhetes.
O que eu estou tentando dizer aqui é que metadados (dados sobre dados) devem ser armazenados como atributos, e que os dados propriamente ditos devem ser armazenados como elementos.
|