Princípios do design XML: Quando usar elementos versus atributos de Uche Ogbuji da IBM é provavelmente um dos melhores recursos sobre o assunto.
No cerne da decisão está que os atributos são coisas "feitas". Você não pode alterá-los ou modificá-los ou aninhá-los. Eles são independentes de ordem e distintos dentro do elemento (você não pode ter dois da mesma coisa).
Se alguma dessas restrições mudar, faça dos dados um nó filho do XML.
No seu exemplo, você tem uma pessoa que tem nome e idade. Eu tenho um nome, meio e sobrenome ... e um apelido. E algumas pessoas têm nomes de solteira, múltiplos nomes do meio ou honoríficos - como você colocaria John Ronald Reuel Tolkien nessa estrutura?
E assim temos alguém que tem dois nomes do meio que têm uma ordem para eles. Isso deve mostrar claramente que não, um atributo não é a melhor opção para isso.
No momento, não consigo encontrá-lo, mas no documento vinculado acima, há uma declaração de que nomes são coisas que requerem um pouco de pensamento levando a "Espero expandir o tratamento dos nomes das pessoas na marcação em um artigo futuro". Se alguém liderar, deixe um comentário ou edite-o neste local.
Por outro lado, a idade é algo que tem uma estrutura bastante fixa (eu sugiro o aniversário em vez de um número inteiro). Como tal, representar essas informações em um formato bem conhecido e compreendido faz sentido em um atributo. Uma pessoa tem um e apenas um aniversário e não há um 'pedido' que você deseja preservar.
Uche Ogbuji identifica três princípios básicos no design adequado de um formato xml. A seguir, são citações abreviadas do documento vinculado acima.
- Princípio da informação estruturada
Se a informação for expressa de forma estruturada, especialmente se a estrutura puder ser extensível, use elementos. Por outro lado: se as informações forem expressas como um token atômico, use atributos
- Princípio da legibilidade
Se as informações pretendem ser lidas e entendidas por uma pessoa, use elementos. Se a informação for mais facilmente entendida e digerida por uma máquina, use atributos.
- Princípio da ligação do elemento / atributo
Use um elemento se precisar que seu valor seja modificado por outro atributo
E assim, os nomes devem ser elementos - são dados estruturados que não são um token atômico, são mais prováveis de serem lidos por um ser humano do que por um computador e podem ser modificados por outro atributo no próprio nome.
As datas devem ser atributos - são dados que são um token atômico, são mais prováveis de serem lidos por um computador do que por um ser humano (e depois transformados no formato preferido do ser humano, se necessário ) e, por último, é improvável que sejam modificados por outros atributos neles.