Principi di progettazione XML: quando utilizzare gli elementi rispetto agli attributi di Uche Ogbuji di IBM è probabilmente una delle migliori risorse in materia.
Al centro della decisione è che gli attributi sono cose "fatte". Non puoi cambiarli o modificarli o nidificarli. Sono indipendenti dall'ordine e distinti all'interno dell'elemento (non puoi avere due della stessa cosa).
Se uno di questi vincoli è qualcosa che può cambiare, rendere i dati un nodo figlio dell'XML.
Nel tuo esempio, hai una persona che ha un nome e un'età. Ho un nome, un secondo e un cognome ... e un soprannome. E alcune persone hanno nomi da nubile, più nomi secondari o onorificenze: come inseriresti John Ronald Reuel Tolkien in una struttura del genere?
E così abbiamo qualcuno che ha due secondi nomi che hanno un ordine per loro. Ciò dovrebbe mostrare chiaramente che no, un attributo non è la scelta migliore per questo.
Non riesco a trovarlo attualmente, ma nel documento collegato sopra c'è un'affermazione che i nomi sono cose che richiedono un po 'di pensiero che porta a "Spero di espandere il trattamento dei nomi delle persone in markup in un prossimo articolo". Se qualcuno ha un vantaggio su questo, si prega di lasciare un commento o modificarlo in questo punto.
D'altra parte, l'età è qualcosa che ha una struttura piuttosto fissa (suggerirei il compleanno piuttosto che un numero intero). Come tale, rappresentare queste informazioni in un formato ben noto e compreso ha senso in un attributo. Una persona ha uno, e solo un compleanno e non c'è nessun "ordine" che vuoi preservare.
Uche Ogbuji identifica tre principi fondamentali nella progettazione corretta di un formato XML. Di seguito sono citazioni abbreviate dal documento collegato sopra.
- Principio delle informazioni strutturate
Se le informazioni sono espresse in una forma strutturata, specialmente se la struttura può essere estensibile, utilizzare gli elementi. D'altra parte: se le informazioni sono espresse come token atomico, utilizzare gli attributi
- Principio di leggibilità
Se le informazioni devono essere lette e comprese da una persona, utilizzare gli elementi. Se le informazioni sono più facilmente comprese e digerite da una macchina, utilizzare gli attributi.
- Principio dell'associazione elemento / attributo
Utilizzare un elemento se è necessario che il suo valore sia modificato da un altro attributo
E quindi, i nomi dovrebbero essere elementi: sono dati strutturati che non sono un token atomico, hanno maggiori probabilità di essere letti da un essere umano che da un computer e possono essere modificati da un altro attributo sul nome stesso.
Le date dovrebbero essere attributi: sono dati che sono un token atomico, sono più probabili la lettura da un computer rispetto a un essere umano (e quindi trasformati nel formato preferito dell'essere umano se necessario ), e infine è improbabile che vengano modificati da altri attributi su di loro.