271 votes

Élément XML XML attribut vs

Au travail, on nous demande de créer des fichiers XML pour transmettre des données à un autre en mode hors connexion de l'application qui va ensuite créer un deuxième fichier XML à transmettre dans le but de mettre à jour certaines de nos données. Au cours de ce processus, nous avons discuté avec l'équipe de l'application sur la structure du fichier XML.

L'exemple de je suis venu avec est essentiellement quelque chose comme:

<INVENTORY>
   <ITEM serialNumber="something" location="something" barcode="something">
      <TYPE modelNumber="something" vendor="something"/> 
   </ITEM>
</INVENTORY>

L'autre équipe a dit que ce n'était pas la norme de l'industrie et des attributs doit être utilisé uniquement pour les méta-données. Ils ont proposé:

<INVENTORY>
   <ITEM>
      <SERIALNUMBER>something</SERIALNUMBER>
      <LOCATION>something</LOCATION>
      <BARCODE>something</BARCODE>
      <TYPE>
         <MODELNUMBER>something</MODELNUMBER>
         <VENDOR>something</VENDOR>
      </TYPE>
   </ITEM>
</INVENTORY>

La raison je suggère le premier est que la taille du fichier créé est beaucoup plus petite. Il y aura environ 80000 éléments qui seront dans le fichier en cours de transfert. Il y a une suggestion dans la réalité s'avère trois fois plus grand que celui que j'ai proposé. J'ai cherché le mystérieux "Standard de l'Industrie" qui a été mentionné, mais la plus proche que j'ai pu trouver était les attributs XML doit être utilisé uniquement pour les méta-données, mais a déclaré que le débat sur ce qui a été meta-données.

Après de longue haleine explications (désolé) comment voulez-vous déterminer ce qui est méta-données, et lors de la conception de la structure d'un document XML, comment devriez-vous décider quand utiliser un attribut ou un élément?

153voto

Chuck Points 8847

J’ai utiliser cette règle d’or :

  1. Un attribut est quelque chose qui est autonome, c'est-à-dire, une couleur, un ID, un nom.
  2. Un élément est quelque chose qui ou pourrait avoir des attributs propres ou contenir d’autres éléments.

Si le vôtre est étroite. J’aurais fait quelque chose comme :

EDIT: mise à jour de l’exemple original basé sur les commentaires ci-dessous.

50voto

user44350 Points 281

Certains des problèmes avec les attributs sont:

  • les attributs ne peuvent pas contenir plusieurs valeurs de l'enfant (éléments)
  • les attributs ne sont pas facilement extensible (pour de futures modifications)
  • les attributs ne peuvent pas décrire les structures de l'enfant (éléments)
  • les attributs sont plus difficiles à manipuler par le code de programme
  • les valeurs d'attribut ne sont pas faciles à tester par rapport à une DTD

Si vous utilisez les attributs comme des conteneurs de données, vous vous retrouvez avec des documents qui sont difficiles à lire et à maintenir. Essayez d'utiliser ces éléments pour décrire les données. Utiliser des attributs uniquement à fournir des renseignements qui ne sont pas pertinents pour les données.

Ne pas finir comme ceci (ce n'est pas comment XML devrait être utilisé):

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

Source: http://www.w3schools.com/DTD/dtd_el_vs_attr.asp

41voto

dan04 Points 33306

"XML" est synonyme de "eXtensible Markup Language". Un langage de balisage implique que les données de texte, marqué avec des métadonnées sur la structure ou la mise en forme.

Le XHTML est un exemple de XML utilisées de la façon dont il a été conçu:

<p><span lang="es">El Jefe</span> insists that you
    <em class="urgent">MUST</em> complete your project by Friday.</p>

Ici, la distinction entre les éléments et attributs est clair. Les éléments de texte sont affichés dans le navigateur, et les attributs sont des instructions sur la façon de les afficher (bien qu'il existe quelques balises qui ne fonctionnent pas de cette façon).

La Confusion se pose lorsque le XML est utilisé non pas comme un langage de balisage, mais comme une sérialisation des données de la langue, de la distinction entre les "données" et les "métadonnées" est plus vague. Donc, le choix entre les éléments et attributs est plus ou moins arbitraire, sauf pour les choses qui ne peuvent pas être représenté avec les attributs (voir feenster de réponse).

35voto

kjhughes Points 5581
<h2>Élément XML vs attribut XML<p>XML est tout accord. <strong> <em>Tout d’abord reporter aux schémas XML existants ou des conventions établies au sein de votre communauté ou votre industrie.</em></strong></p><p>Si vous êtes vraiment dans une situation de définir votre schéma du sol vers le haut, voici quelques considérations générales qui doivent informer l' <strong>élément vs attribuent la décision</strong>:</p><pre><code></code></pre></h2>

23voto

AnthonyWJones Points 122520

Cela peut dépendre de votre utilisation. XML qui est utilisé pour représenter stuctured de données générées à partir d'une base de données peut bien travailler avec, finalement, les valeurs de champ d'être placé en tant qu'attributs.

Cependant XML utilisé comme transport de message serait souvent mieux à l'aide de plusieurs éléments.

Par exemple, disons que nous avons eu ce XML tel que proposé dans la réponse:-

<INVENTORY>
   <ITEM serialNumber="something" barcode="something">
      <Location>XYX</LOCATION>
      <TYPE modelNumber="something">
         <VENDOR>YYZ</VENDOR>
      </TYPE>
    </ITEM>
</INVENTORY>

Maintenant, nous voulons envoyer l'ÉLÉMENT de l'élément à un appareil pour imprimer il de codes à barres cependant, il ya un choix de types de codage. Comment pouvons-nous représenter le type de codage requis? Soudain, nous nous rendons compte, un peu tardivement, que le code-barres n'était pas un seul automic valeur, mais plutôt qu'il peut être qualifié avec le codage requis lors de l'impression.

   <ITEM serialNumber="something">
      <barcode encoding="Code39">something</barcode>
      <Location>XYX</LOCATION>
      <TYPE modelNumber="something">
         <VENDOR>YYZ</VENDOR>
      </TYPE>
   </ITEM>

Le point est, à moins que vous construisez une sorte de XSD ou DTD avec un espace de noms pour fixer la structure en pierre, vous pourriez être mieux servis laisser vos options ouvertes.

OMI XML est à son niveau le plus utile lorsqu'il peut être plié sans casser le code existant de l'utiliser.

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