Duplicaté possible: strong>
Dois-je utiliser des éléments ou des attributs dans XML? P >Je n'ai jamais été capable de comprendre quand utiliser des attributs XML. Je
toujours strong> Éléments d'utilisation. Je viens de lire Cet article W3schools . L'article indique qu'il est mauvais pratique d'utiliser des attributs car: p>
- Les attributs ne peuvent pas contenir plusieurs valeurs (les éléments enfants peuvent) li>
- Les attributs ne sont pas facilement extensibles (pour les changements futurs) LI>
- Les attributs ne peuvent pas décrire les structures (les éléments enfants peuvent) li>
- Les attributs sont plus difficiles à manipuler par code de programme li>
- Les valeurs d'attribut ne sont pas faciles à tester contre un DTD LI> ul>
La seule exception indique que cela indique que vous attribuez un ID à une étiquette. P>
est-ce correct? Pourquoi les attributs existent-ils même? Était-ce une erreur de conception avec XML? Y a-t-il quelque chose qui me manque ici? P>
La seule raison pour laquelle je pourrais penser pour utiliser des attributs serait pour une relation à une seule relation. IE: Nom. Mais il faudrait être une relation une à une personne à quelque chose qui est une primitive (ou une chaîne). Parce qu'il serait important que, à l'avenir, vous ne voudrez pas la rompre dans plusieurs sections différentes. Ie: p>
xxx pré> à: p>
xxx pré> car cela ne serait pas possible avec un attribut. P>
Question de bonus forte>: Au cours de l'exemple de la date serait possible de faire quelque chose comme ceci: p>
xxx pré> pour donner des applications futures Plus (ou différentes) informations tout en offrant des applications existantes le même format? Ou devriez-vous faire cela: p>
xxx pré> blockQuote>
9 Réponses :
Tous ces points de l'article de l'école W3schools sont absolument valides et corrects. Je suis d'accord - je n'utilise presque jamais des attributs dans mes documents XML.
La seule fois que je les utiliserais pourrait être quand j'ai besoin d'identifier une entité, par exemple. P>
<Customer Id="123123"> .... </Customer>
Les attributs sont bons lorsque vous souhaitez joindre des informations à d'autres informations, peut-être décrire comment les informations doivent être interprétées. Par exemple:
C'est intéressant mais pourquoi ne pas en faire un élément distinct?
Vous pouvez le faire avec des éléments - la machine s'en fiche. Ceci est une question stylistique, au profit des humains.
@sixtyfootersdude: Ensuite, vous devrez nier un niveau plus profond en ajoutant des éléments de l'unité et de la valeur dans l'élément de vitesse. Alternativement l'ajoutez au même niveau avec un nom comme SpeedUnit, mais il n'est toujours pas aussi clairement attaché à l'élément de vitesse.
Pourquoi diviser les informations de la manière dont il devrait être interprété?
À l'autre que 65 mph, l'unité de mesure de la mesure dans la valeur et rend les 65 inutiles (sans analyse) comme un nombre. Si vous mettez une unité en un élément ou un attribut, vous pouvez gérer de manière proprement la connexion KPH, MPH, FT / S sans avoir à avoir un analyseur étrange pour poster le chargement des données.
@ Drew: La machine pourrait s'en soucier s'il y a des millions d'enregistrements sur une connexion lente. Tout le monde n'a pas d'Internet GBP à leur domicile, certains endroits doivent encore faire face à la numérotation.
@Dourhaghearch: La plus grande différence est que votre exemple rend très difficile de transformer avec XSLT ou une requête avec XPath. Envisagez d'essayer de construire une expression XPath qui recherche des vitesses supérieures à 65 mph ou une transformation qui convertit de MPH en kPH.
Les points que vous listez sur les éléments sont corrects et j'ajouterais ce qui suit:
mais parfois en utilisant un élément pour modéliser un point de données est surchargé - en particulier lorsque vous avez beaucoup de petits points de données hétérogènes dans un seul élément parent. L'utilisation d'attributs pour des choses simples peut améliorer la lisibilité. Certains diront probablement que XML n'est pas lisible ou censé être lu / édité par des humains ... mais je le fais tout le temps. P>
considère cet exemple (lien hypertexte de base): p> XXX PRE>
Voulez-vous aimer si vous deviez écrire ou le lire de cette façon? P>
<a>
<href>http://www.htmlhelp.com/</href>
<title>Help Information</title>
<target>_top</target>
<text>Web Design Group</text>
</a>
Sauf lorsque les attributs provoquent la ligne de sortir de la fenêtre comme ci-dessus :)
"Pourquoi les attributs existent-ils même?" P>
Pour permettre un code XML plus concis, juste pour enregistrer votre dactylographie. Et, bien sûr, tout fichier XML contenant des attributs p>
xxx pré> peut être facilement converti en un "attribut" un: p>
xxx pré> BlockQuote>
"Thshesseness en XML Markup est d'une importance minimale." - Langue de balisage extensible (XML) 1.0 (cinquième édition)
+ 1 ... @pete: C'est l'opinion et non (même si c'est dans le livre blanc). Il y a beaucoup de raisons que l'espace reste un problème. Appareils mobiles, matériel intégré, liens de données lentes. Essayez de faire face à une connexion XML gonflée sur une seule connexion série de fil entre une interface Ethernet et une puce de mémoire flash à l'aide d'un processeur de 100 MHz et de 4 Mo de RAM.
C'est l'option des personnes qui ont conçu XML, qui sont faisant autorité dans la conception de XML. Les attributs de XML n'existent pas pour fournir une représentation de erser, que cela puisse également être utilisé à cet effet. Pour dire pourquoi les sont en XML, vous devez regarder SGML et penser à appliquer le balisage au texte plutôt que de représenter une structure de données.
Cette question m'a déjà fait gratter ma tête aussi. Pour moi, c'est une question de sémantique. Il semble plus naturel que je fasse que p>
Les attributs ne sont que des attributs de l'élément. Si vous devez nier plusieurs éléments, vous utilisez des éléments. Dans votre exemple de date, j'utilise généralement simplement des attributs, car il est plus petit.
<date month="12" day="31" year="2009"/>
C'est un bon point. Les attributs doivent être une relation une à une seule.
Pensez à un bloc d'informations de contact ...
<!-- attribute version -->
<person name="Matt" age="27">
<phone type="mobile" value="1234567890" />
<phone type="work" value="1234560987" />
<address type="home"
city="NoWhere"
state="OH"
street="123 Lost Ave."
zipcode="12345" />
</person>
<!-- element version -->
<person>
<name>Matt</name>
<age>27</age>
<phone>
<type>mobile</type>
<value>1234567890</value>
</phone>
<phone>
<type>work</type>
<value>1234560987</value>
</phone>
<address>
<type>home</type>
<city>NoWhere</city>
<state>OH</state>
<street>123 Lost Ave.</street>
<zipcode>12345</zipcode>
</address>
</person>
Once Vous commencez à jouer au niveau de l'abstraction entre les formats de données de différence sur différentes applications et versions, il est assez difficile de tendre les données de manière «standard». Mais c'est pourquoi nous avons XSLT.
J'utilise généralement des attributs pour l'ensemble minimal de champs qui font un nœud unique. En d'autres termes, ils représentent la clé primaire. Cela facilite certaines choses si vous avez besoin de corréler XML avec une base de données relationnelle. P>
N'oubliez pas que les attributs sont analysés dans le cadre de la balise de démarrage. Cela signifie que lorsque vous analysez, vous obtenez ces valeurs tout de suite, vous n'avez pas à attendre la clôture. De plus, vous n'invoyez pas tous les événements d'analyse (si vous faites un analyse de courant) pour tous les étiquettes d'élément. P>
Je préfère utiliser des attributs pour des métadonnées sur l'élément comté. Par exemple, j'aime exprimer des dates comme
mois, d, yr sont des conventions de nommage terribles ou de leur absence
@skaffman: Je pense que ce n'est pas une duplication exacte. Bien que l'exemple soit similaire, la question est légèrement différente. J'ai trouvé les réponses à la question seulement quelque peu utile pendant que j'ai trouvé @ Guffa's Réponse (et d'autres personnes) à cette question pour être très utile.