XML Attributs


Les éléments XML ont des attributs, comme en HTML.

Les attributs fournissent des informations supplémentaires sur les éléments.


Attributs XML

En HTML, les attributs fournissent des informations supplémentaires sur les éléments :

<img src="computer.gif.html">
<a href="demo.html">

Les attributs fournissent généralement des informations qui ne font pas partie des données. Dans l'exemple ci-dessous, le type de fichier n'est pas lié aux données, mais il est très important pour le logiciel qui doit traiter cet élément :

computer.gif


Les attributs XML doivent être entre guillemets

Les valeurs d'attribut doivent être entourées de guillemets, bien que les guillemets simples et doubles puissent être utilisés. Par exemple, pour le sexe d'une personne, l'élément person peut être écrit comme ceci :

<person sex="female">

Ou comme ceci :

<person sex='female'>

Si la valeur de l'attribut elle-même contient des guillemets doubles, vous pouvez utiliser des guillemets simples, comme dans cet exemple :

<gangster name='George "Shotgun" Ziegler'>

Ou vous pouvez utiliser des entités de caractères :

<gangster name="George &quot;Shotgun&quot; Ziegler">


Éléments XML vs. Attributs

Regardez ces exemples :

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

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

Dans le premier exemple, sex est un attribut. Dans le deuxième exemple, sex est un élément. Les deux exemples fournissent la même information.

Il n'y a pas de règles nous indiquant quand utiliser des attributs et quand utiliser des éléments. D'après mon expérience, les attributs sont pratiques en HTML, mais en XML, vous devriez essayer d'éviter d'utiliser des attributs. Si une information ressemble à des données, utilisez des éléments.


Ma façon préférée

Les trois documents XML suivants contiennent exactement les mêmes informations :

Le premier exemple utilise l'attribut date :

<note date="10/01/2008">
<to>Tove</to>
<from>Jani</from>
<heading>Rappel</heading>
<body>Ne m'oubliez pas ce week-end !</body>
</note>

Le deuxième exemple utilise l'élément date :

<note>
<date>10/01/2008</date>
<to>Tove</to>
<from>Jani</from>
<heading>Rappel</heading>
<body>Ne m'oubliez pas ce week-end !</body>
</note>

Le troisième exemple utilise un élément date étendu (c'est mon préféré) :

<note>
<date>
<day>10</day>
<month>01</month>
<year>2008</year>
</date>
<to>Tove</to>
<from>Jani</from>
<heading>Rappel</heading>
<body>Ne m'oubliez pas ce week-end !</body>
</note>


Éviter les attributs XML ?

Quelques problèmes causés par l'utilisation d'attributs :

  • Les attributs ne peuvent pas contenir plusieurs valeurs (les éléments le peuvent)
  • Les attributs ne peuvent pas contenir de structures arborescentes (les éléments le peuvent)
  • Les attributs ne sont pas faciles à étendre (pour de futurs changements)

Les attributs sont difficiles à lire et à maintenir. Veuillez essayer d'utiliser des éléments pour décrire les données. N'utilisez les attributs que pour fournir des informations qui ne sont pas liées aux données.

Ne faites pas une chose aussi stupide (ce n'est pas ainsi que XML doit être utilisé) :

<note day="10" month="01" year="2008"
to="Tove" from="Jani" heading="Rappel"
body="Ne m'oublie pas ce week-end !">
</note>


Attributs XML pour les métadonnées

Parfois, des références ID sont attribuées à des éléments. Ces index ID peuvent être utilisés pour identifier des éléments XML, et ils fonctionnent de la même manière que l'attribut id en HTML. Cet exemple le démontre :

<messages>
<note id="501">
<to>Tove</to>
<from>Jani</from>
<heading>Rappel</heading>
<body>Ne m'oubliez pas ce week-end !</body>
</note>
<note id="502">
<to>Jani</to>
<from>Tove</from>
<heading>Re: Rappel</heading>
<body>I will not</body>
</note>
</messages>

L'attribut id ci-dessus n'est qu'un identifiant utilisé pour identifier différentes notes. Il ne fait pas partie des données de la note.

L'idée que nous transmettons fermement ici est : les métadonnées (des données sur les données) doivent être stockées sous forme d'attributs, et les données elles-mêmes doivent être stockées sous forme d'éléments.


Autres extensions