Quelle est la différence entre les deux et quand dois-je les utiliser ?
<person>
<firstname>Joe</firstname>
<lastname>Plumber</lastname>
</person>
contre
<person firstname="Joe" lastname="Plumber" />
Remerciements
Quelle est la différence entre les deux et quand dois-je les utiliser ?
<person>
<firstname>Joe</firstname>
<lastname>Plumber</lastname>
</person>
contre
<person firstname="Joe" lastname="Plumber" />
Remerciements
Il existe des XML centrés sur les éléments et des XML centrés sur les attributs. Dans votre exemple, le premier est centré sur les éléments, le second sur les attributs. centré sur l'attribut.
La plupart du temps, ces deux modèles sont équivalents, mais il y a quelques exceptions.
Centré sur les attributs
Centré sur l'élément
Pratique
Si vous vous souciez vraiment de la taille de votre XML, utilisez un attribut chaque fois que vous le pouvez, s'il est approprié. Utilisez des éléments lorsque vous avez besoin de quelque chose de nullable, d'un type complexe ou pour contenir une grande valeur textuelle. Si vous ne vous souciez pas de la taille du XML ou si la compression est activée pendant le transport, utilisez des éléments car ils sont plus extensibles.
Contexte
Dans DOT NET, XmlSerializer peut sérialiser les propriétés des objets en attributs ou en éléments. Dans le récent cadre WCF, le sérialiseur DataContract ne peut sérialiser que les propriétés dans des éléments et il est plus rapide que XmlSerializer ; la raison en est évidente, il lui suffit de rechercher les données utilisateur dans les éléments lors de la désérialisation.
Voici un article qui l'explique également Élément ou attribut
Le XML centré sur les attributs présente un énorme avantage en termes d'interopérabilité avec JSON. Il suffit de quelques indications sur ce qu'il faut mettre dans un tableau et sur ce qu'il faut traiter comme un nombre ou un booléen, et vous pouvez effectuer des conversions automatiques parfaites.
À l'avenir, lorsque vous ajouterez un <address>
vous ne voudrez pas en faire un attribut XML. En effet, un attribut <address>
peut être un élément plus complexe composé de l'adresse, de la ville, du pays, etc.
C'est pourquoi vous pouvez choisir la première forme de sous-élément, sauf si vous êtes certain que l'attribut n'aura pas besoin d'aller beaucoup plus loin. La première forme permet une plus grande extensibilité à l'avenir.
Si vous êtes un tant soit peu soucieux de l'espace, comprimez votre XML.
C'est juste une question de curiosité, mais ne pourrait-on pas avoir un mélange des deux ? Par exemple, le prénom et le nom de famille en tant qu'attributs et l'adresse en tant que nœud. Ce que j'essaie de dire, c'est qu'il n'est pas nécessaire d'en choisir un seul. C'est exact ?
Vous avez raison, mais pour des raisons de cohérence lorsque vous représentez les propriétés d'une seule entité ("personne" dans l'exemple original), vous voudrez probablement choisir l'une ou l'autre. De cette façon, vous n'aurez pas à vous rappeler lequel est stocké de quelle façon.
<person firstname="Joe" lastname="Plumber"> <address street1="1234 Any Street" postalCode="12345" State="CA" City="Example" /> </person>
Je n'arrive pas à trouver le bon format, mais le fait est que vous ne supprimez pas l'extensibilité. Ce ne sont pas les éléments enfants que vous évitez avec le XML centré sur les attributs, mais les nœuds de texte.
Dans mon entreprise, nous privilégions la deuxième approche.
Nous pensons que "firstname" et "lastname" sont des noms de famille. attributs du nœud "personne", plutôt que sous-domaines du nœud "personne". Il s'agit d'une différence subtile.
À mon avis, la deuxième approche est plus concise et la lisibilité/maintenabilité est nettement améliorée, ce qui est très important.
Bien entendu, cela dépend de votre demande. Je ne pense pas qu'il existe une règle générale qui couvre tous les scénarios.
La deuxième approche est plus lisible pour un humain, mais la première approche est plus lisible pour la plupart des analyseurs syntaxiques. La première approche est également plus extensible. Vous devriez lire l'article référencé par @codemeit ( ibm.com/developerworks/xml/library/x-eleatt.html ).
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.