93 votes

Devrais-je utiliser des éléments ou des attributs en XML?

Je suis en train d'apprendre XML à partir de W3schools.

Ici: http://www.w3schools.com/xml/xml_attributes.asp

L'auteur mentionne les éléments suivants:
Les Éléments XML vs Attributs

<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, le sexe est un attribut. Dans la dernière, le sexe est un élément. Les deux exemples de fournir les mêmes informations.

Il n'y a pas de règles sur l'utilisation des attributs et lors de l'utilisation d'éléments. Les attributs sont à portée de main en HTML. En XML, mon conseil est de les éviter. Utiliser des éléments à la place.

Éviter les Attributs XML?

Certains des problèmes avec l'aide d'attributs sont:

* attributes cannot contain multiple values (elements can)
* attributes cannot contain tree structures (elements can)
* attributes are not easily expandable (for future changes)

Les attributs sont difficiles à lire et à maintenir. Utiliser des éléments de données. Utiliser des attributs pour les informations qui ne sont pas pertinents pour les données.

Donc, est le point de vue de l'auteur d'un célèbre, ou est-ce la meilleure pratique en XML ?

Devrait Attributs en XML-elle être évitée ?

Mise à jour: W3Schools également mentionné les éléments suivants:
Attributs XML pour les Métadonnées

Parfois, ID références sont attribuées à des éléments. Ces Identifiants peuvent être utilisés pour identifier les éléments XML de la même façon que l'attribut ID dans le HTML. Cet exemple illustre cela:

<messages>
  <note id="501">
    <to>Tove</to>
    <from>Jani</from>
    <heading>Reminder</heading>
    <body>Don't forget me this weekend!</body>
  </note>
  <note id="502">
    <to>Jani</to>
    <from>Tove</from>
    <heading>Re: Reminder</heading>
    <body>I will not</body>
  </note>
</messages>

L'ID ci-dessus n'est qu'un identifiant, d'identifier les différentes notes. Ce n'est pas une partie de la note en elle-même.

Ce que j'essaie de dire, c'est que les métadonnées (données sur les données) doivent être stockés en tant qu'attributs, et que les données doivent être stockées comme des éléments.

74voto

Prashanth Points 1541

L'utilisation d'attributs ou d'éléments est généralement choisi par les données que vous tentez de modèle.

Par exemple, si une entité est une PARTIE des données, il est conseillé d'en faire un élément. Par exemple, le nom de l'employé-e est une partie essentielle de l'employé de données.

Maintenant, si vous voulez transmettre des MÉTADONNÉES sur les données (quelque chose qui fournit des informations supplémentaires sur les données), mais ne fait pas vraiment partie des données, il est préférable d'en faire un attribut. Par exemple, disons que chaque employé a un GUID nécessaire pour le retour à la fin du traitement, puis en faire un attribut, c'est mieux.(GUID n'est pas quelque chose qui transmet des informations vraiment utiles pour quelqu'un qui cherche à le xml, mais peut être nécessaire pour d'autres fins)

Il n'y a pas de règle qui dit que quelque chose doit être un attribut ou un élément.

Il n'est pas nécessaire pour ÉVITER les attributs à tout prix..Parfois ils sont plus faciles à modéliser, que les éléments. Cela dépend vraiment sur les données que vous essayez de représenter.

31voto

flybywire Points 36050

Le moins important est que le fait de placer des éléments dans des attributs permet d’obtenir un XML moins détaillé.

Comparer

 <person name="John" age="23" sex="m"/>
 

Contre

 <person>
    <name>
        John
    </name>
    <age>
        <years>
            23
        </years>
    </age>
    <sex>
        m
    </sex>
</person>
 

Oui, c'était un peu partial et exagéré, mais vous comprenez le point

20voto

Gajus Kuizinas Points 4713

J'ai utilisé Google pour la recherche de la question exacte. J'ai d'abord atterri sur cet article, http://www.ibm.com/developerworks/library/x-eleatt/index.html. Cependant, il se sentait trop long pour une simple question en tant que telle. De toute façon, j'ai lu toutes les réponses sur ce sujet et n'ai pas trouvé de satisfaisant résumé. En tant que tel, je me suis remis à ce dernier article. En voici un résumé:

Quand dois-je utiliser des éléments et quand dois-je utiliser des attributs pour la présentation de bits d'information?

  • Si l'information en question peut être elle-même marquée avec les éléments, le mettre dans un élément.
  • Si l'information est utile pour l'attribut forme, mais pourrait finir comme plusieurs attributs de même nom sur le même élément, utilisez les éléments enfants à la place.
  • Si l'information est nécessaire pour être dans une norme DTD-comme attribut de type ID, IDREF, ou de l'ENTITÉ, l'utilisation d'un attribut.
  • Si l'information ne doit pas être normalisé pour le blanc de l'espace, de l'utilisation des éléments. (Les processeurs XML normaliser les attributs d'une manière qui peut changer le texte brut de la valeur de l'attribut.)

Principe de base du contenu

Si vous considérez que les informations en question à faire partie de la matériau de base qui est exprimé ou communiquées dans le XML, mettre dans un élément. Si vous considérez les informations périphériques ou accessoire pour le principal moyen de communication, ou purement destiné à aider les processus de demande le principal de communication, l'utilisation des attributs.

Principe de l'information structurée

Si l'information est exprimée sous une forme structurée, surtout si la structure peut être extensible, utiliser des éléments. Si l'information est exprimé atomique jeton, utiliser des attributs.

Principe de lisibilité

Si l'information est destiné à être lu et compris par une personne, utiliser des éléments. Si l'information est plus facilement comprise et digéré par une machine, utiliser des attributs.

Principe de l'élément ou de l'attribut de liaison

Utiliser un élément si vous avez besoin de sa valeur d'être modifié par un autre attribut. [..] c'est presque toujours une mauvaise idée d'avoir un attribut de modifier un autre.

C'est un court résumé des choses importantes à partir de l'article. Si vous souhaitez voir des exemples et une description complète de tous les cas, se référer à l'article original.

7voto

Robert Rossney Points 43767

Les attributs du modèle de cartographie. Un ensemble d'attributs sur un élément isomorphizes directement sur un nom/valeur de la carte dans laquelle les valeurs sont de type texte ou tout serializable type de valeur. En C#, par exemple, Dictionary<string, string> objet peut être représenté comme un attribut XML de la liste, et vice versa.

Ce n'est absolument pas le cas avec les éléments. Alors que vous pouvez toujours transformer un nom/valeur de la carte en un ensemble d'éléments, l'inverse n'est pas le cas, par exemple:

<map>
   <key1>value</key1>
   <key1>another value</key1>
   <key2>a third value</key2>
</map>

Si vous le transformer en une carte, vous perdrez deux choses: les multiples valeurs associées à l' key1, et le fait qu' key1 s'affiche avant d' key2.

La signification de cela devient beaucoup plus clair si vous regardez DOM code qui est utilisé pour mettre à jour les informations dans un format comme ça. Par exemple, il est trivial pour écrire ceci:

foreach (string key in map.Keys)
{
   mapElement.SetAttribute(key, map[key]);
}

Ce code est concis et sans ambiguïté. Par contraste avec, par exemple:

foreach (string key in map.Keys)
{
   keyElement = mapElement.SelectSingleNode(key);
   if (keyElement == null)
   {
      keyElement = mapElement.OwnerDocument.CreateElement(key);
      mapElement.AppendChild(keyElement);
   }
   keyElement.InnerText = value;
}

4voto

Coxy Points 5256

Vous ne pouvez pas mettre un CDATA dans un attribut. Dans mon expérience, tôt ou tard, vous allez vouloir mettre des apostrophes, guillemets et/ou d'un ensemble de documents XML en un "membre", et si c'est un attribut que vous allez être à la malédiction, à la personne qui a utilisé les attributs au lieu d'éléments.

Note: mon expérience avec XML principalement le nettoyage des autres peuples. Ces gens semblaient suivre le vieil adage "le XML, c'est comme de la violence. Si elle n'a pas résolu votre problème, alors vous n'avez pas assez utilisés."

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X