<img src="computer.gif"><a href="demo.html">
Les attributs fournissent souvent des informations qui ne font pas partie des données. Dans l'exemple suivant, le type de fichier n'a rien à voir avec les données, mais est important pour le logiciel qui doit gérer cet élément :
<file type="gif">ordinateur.gif</file>
Les valeurs d'attribut doivent être entourées de guillemets, mais des guillemets simples et doubles peuvent être utilisés. Par exemple, le sexe d'une personne, l'élément personne peut s'écrire comme ceci :
<personne sexe="femelle">
Ou ça marche aussi :
<personne sexe='femelle'>
Si la valeur de l'attribut elle-même contient des guillemets doubles, vous pouvez utiliser des guillemets simples, comme dans cet exemple :
<nom du gangster='George "Shotgun" Ziegler'>
Ou vous pouvez utiliser des entités de caractères :
<person sex="female"><firstname>Anna</firstname><lastname>Smith</lastname></person>
<person><sex>femme</sex><firstname>Anna</firstname><lastname>Smith</lastname></person>
En premier lieu, le sexe est une propriété. Dans le second cas, le sexe est un élément. Les deux instances fournissent les mêmes informations.
Aucune règle ne nous indique quand utiliser les attributs et quand utiliser les éléments. Mon expérience est qu'en HTML, les attributs sont très pratiques à utiliser, mais en XML, vous devriez essayer d'éviter d'utiliser des attributs. Si les informations ressemblent beaucoup à des données, utilisez des éléments.
Les trois documents XML suivants contiennent exactement les mêmes informations :
L'attribut date est utilisé dans le premier exemple :
<note date="10/01/2008"><to>Tove</to><from>Jani</from><heading>Rappel</heading><body>Ne m'oubliez pas ce week-end !</body ></remarque>
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 l'élément de date étendue (c'est mon préféré) :
<note><date><jour>10</jour><mois>01</mois><année>2008</année></date><à>Tove</à><de>Jani</de> <heading>Rappel</heading><body>Ne m'oubliez pas ce week-end !</body></note>
Quelques problèmes causés par l'utilisation des 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 propriétés ne sont pas facilement extensibles (pour des changements futurs)
Les propriétés sont difficiles à lire et à entretenir. Veuillez essayer d'utiliser des éléments pour décrire les données. Au lieu de cela, utilisez simplement des attributs pour fournir des informations indépendantes des données.
Ne faites pas quelque chose de stupide comme ça (ce n'est pas ainsi que XML doit être utilisé) :
<note day="10"month="01" year="2008"to="Tove" from="Jani" head="Reminder"body="Ne m'oubliez pas ce week-end !"></note>
Parfois, des références d'identification sont attribuées aux éléments. Ces index ID peuvent être utilisés pour identifier des éléments XML de la même manière que l'attribut id en HTML. Cet exemple nous illustre cette situation :
<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>Je ne le ferai pas</body></ remarque></messages>
L'attribut id ci-dessus est simplement un identifiant utilisé pour identifier différentes notes. Cela ne fait pas partie des données de la note.
L'idée que nous essayons de vous transmettre ici est que les métadonnées (données sur les données) doivent être stockées sous forme d'attributs et que les données elles-mêmes doivent être stockées sous forme d'éléments.
Voici les règles que les attributs XML récapitulatifs doivent suivre :
Les noms d'attribut ne peuvent pas apparaître une seule fois dans la même balise de début ou dans la même balise d'élément vide.
Une propriété doit être déclarée à l'aide de la définition de type de document (DTD) déclarée dans la feuille de propriétés.
Les valeurs de propriété ne peuvent pas contenir de références d'entité directes ou indirectes à des entités externes
Le texte de remplacement de toute entité appelée valeur d'attribut directe ou indirecte ne peut pas contenir moins de signe