tutoriais mais recente desenvolvimento web
 

XML Elementos vs. Atributos


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.