Gli ultimi tutorial di sviluppo web
 

XML Elementi vs. Attributi


In XML, non ci sono regole su quando utilizzare gli attributi, e quando utilizzare elementi figlio.


Uso di elementi contro attributi

I dati possono essere memorizzati in elementi figli o negli attributi.

Date un'occhiata a questi esempi:

<person sex="female">
  <firstname>Anna</firstname>
  <lastname>Smith</lastname>
</person>

<person>
  <sex>female</sex>
  <firstname>Anna</firstname>
  <lastname>Smith</lastname>
</person>

Nel primo esempio il sesso è un attributo. Nell'ultimo, il sesso è un elemento figlio. Entrambi gli esempi forniscono le stesse informazioni.

Non ci sono regole su quando utilizzare gli attributi, e quando utilizzare elementi figlio. La mia esperienza è che gli attributi sono a portata di mano in HTML, ma in XML si dovrebbe cercare di evitarli. Utilizzare elementi figlio se le informazioni si sente come i dati.


Il mio modo preferito

I like to store data in child elements.

I seguenti tre documenti XML contengono esattamente le stesse informazioni:

Un attributo data viene usato nel primo esempio:

<note date="12/11/2002">
  <to>Tove</to>
  <from>Jani</from>
  <heading>Reminder</heading>
  <body>Don't forget me this weekend!</body>
</note>

Un elemento data viene utilizzato nel secondo esempio:

<note>
  <date>12/11/2002</date>
  <to>Tove</to>
  <from>Jani</from>
  <heading>Reminder</heading>
  <body>Don't forget me this weekend!</body>
</note>

Un elemento Data espansa è utilizzata nel terzo: (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>

Evitare l'uso di attributi?

In caso di evitare l'uso di attributi?

Alcuni dei problemi con attributi sono:

  • attributi non possono contenere valori multipli (child elements can)
  • attributi non sono facilmente espandibili (for future changes)
  • attributi non possono descrivere le strutture (child elements can)
  • attributi sono più difficili da manipolare da codice di programma
  • valori degli attributi non sono facili da testare contro un DTD

Se si utilizzano gli attributi come contenitori per i dati, si finisce con documenti che sono difficili da leggere e mantenere. Prova ad utilizzare elements per descrivere i dati. Utilizzare gli attributi solo per fornire informazioni che non è rilevante per i dati.

Non finire come questo (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>

Una eccezione alla mia regola di attributo

Regole sono sempre delle eccezioni.

La mia regola sugli attributi ha una sola eccezione:

A volte assegno riferimenti ID a elementi. Questi riferimenti ID può essere utilizzato per accedere agli elementi XML più o meno allo stesso modo in cui il nome o l'ID attributi in HTML. Questo esempio dimostra in questo modo:

<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>

L'ID in questi esempi è solo un contatore o un identificatore univoco, per identificare le diverse note nel file XML, e non una parte dei dati di nota.

Quello che sto cercando di dire è che i metadati (data about data) devono essere conservati come attributi, e che dati stessi devono essere conservati come elementi.