1

Je voulais savoir s'il y avait des règles générales en XML pour décider si une donnée doit apparaitre en tant qu'element ou attribut.

Exemple d'un exo de ma copine: décrire une bouteille de flotte avec des ions, et on donne des infos sur ces ions
on peut légitiment faire différentes versions:
<bouteille>
  <contenu>
    <ion type="positif">
      <nom>calcium</nom>
      <qte>1mg/l</qte>
    </ion>
    <ion type="negatif">
      <nom>blabla</nom>
      ...
    </ion>
  </contenu>
  <marque>cristalline</marque>
</bouteille>


mais je peux aussi changer pour mettre
<bouteille marque="cristalline">...
<ion><type>positif</type>...</ion>
<qte unite="mg/l">3</qte>
<ion nom="truc" qte="3 mg/l" type="positif" />
...

y'a des règles pour choisir, ou c'est au petit bonheur? je sais pas trop comment lui expliquer.

2

Bonne question, je me la suis déjà posée et je n'ai jamais eu de réponse "officielle". Du coup, j'ai tendance à considérer que :

- Si un objet est complexe (si il a des attributs), il deviendra forcément un élément, puisqu'il sera impossible de représenter ses attributs si il en est lui-même un
- Sinon, quand un objet ne peut apparaitre exactement qu'une et une seule fois ("nom" par exemple), ça ne ferait que complexifier le fichier d'en faire un élément, donc il vaut mieux le mettre en attribut
- Sinon, ça devient un élément

Ça me semble assez basique comme distinction, peut-être qu'il y a des critères plus fins pour décider.
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

3

De manière générale tu peux tout mettre en nœuds XML (=> hiérarchie), mais tu ne pourra jamais tout mettre en attributs ( => texte ), donc le jeu est de trouver le juste milieu.
Et pour ça je ne pense pas qu'il y ait de règle officielle puisque le XML en lui même représente juste un arbre.
C'est à toi de choisir la représentation de tes données en fonction de tes besoins, et à la limite tant qu'elle a du sens (qu'elle est logique et consistante avec elle-même, de préférence...) ça a peu d'importance de savoir quels choix tu as fait.
Tu peux choisir d'appliquer une règle comme celle de Zephyr, tu peux choisir d'en appliquer une autre, ce qui compte c'est que tu ne te perde pas dans tes données ^^
avatar
Le scénario de notre univers a été rédigée par un bataillon de singes savants. Tout s'explique enfin.
T'as un problème ? Tu veux un bonbon ?
[CrystalMPQ] C# MPQ Library/Tools - [CrystalBoy] C# GB Emulator - [Monoxide] C# OSX library - M68k Opcodes

4

justement, de telles règles, en existe-t-il de "classiques" ? Celle de Zephyr me plait, mais j'aimerais bien creuser la question.

5

Tu peux décrire les différentes valeurs des attributs (pour ceux qui n'ont qu'un nombre limité de choix, genre "positif" ou "négatif") dans la DTD, non ? Si c'est bien le cas, ça permet de vérifier leur validité en même temps que tu vérifies le XML, c'est plutôt pas mal happy
avatar
<<< Kernel Extremis©®™ >>> et Inventeur de la différence administratif/judiciaire ! (©Yoshi Noir)

<Vertyos> un poil plus mais elle suce bien quand même la mienne ^^
<Sabrina`> tinkiete flan c juste qu'ils sont jaloux que je te trouve aussi appétissant

6

ah oui cheeky
nb limité de choix (enum) ou bien usage unique -> attribut
besoin de réutilisation ou bien Tout ce qui est "fortement" variable-> élément.

ça me parait bien.

7

Ben un attribut pour moi ça qualifie un élément (genre couleur, nom, etc)
Les éléments sont ce qui définissent l'élément (=ce qu'il contient, en gros).

Genre :
<gateau gout=chocolat nbParts=16>
 <ingredients>
  <ingrédient nom=farine/>
  <ingrédient nom=chocolat/>
 </ingrédients>
</gateau>


Typiquement, on peut ne pas s'intéresser au détail de l'élément gateau, et du coup c'est plus facile à parser, puisqu'on sait qu'il suffit de regarder dans les attributs.
Enfin c'est comme ça que je vois le problème.

8

ouais mais t'es d'accord qu'on peut être tordu et faire
<gateau gout="choco">
<nbparts>16</nbparts>
...
</gateau>

tongue

mais bon, selon la loi Zephyr-Flanker (tripo), c'est pas utile, parce que nbparts apparait une fois smile
brayf, ouais, on s'y retrouve grin

9

pour ton exemple, je trouve que
<bouteille marque="cristalline">  
  <contenu> 
    <ion nom="calcium">
      <type>positif</type>
      <qte>1mg/l</qte> 
    </ion>
    <ion nom="blabla"> 
      <type>negatif</type>
      <nom>blabla</nom> 
      ... 
    </ion> 
  </contenu> 
</bouteille>

est beaucoup plus logique

edit : cross

10

squalyl (./8) :
ouais mais t'es d'accord qu'on peut être tordu et faire
<gateau gout="choco">
<nbparts>16</nbparts>
...
</gateau>

tongue

mais bon, selon la loi Zephyr-Flanker (tripo), c'est pas utile, parce que nbparts apparait une fois smile
brayf, ouais, on s'y retrouve grin

ouais, je suis d'accord, mais le but c'est de hierarchiser les éléments pour que ce soit facile à lire et à parser non ?

11

squalyl (./8) :
<gateau gout="choco">
<nbparts>16</nbparts>
...</gateau>

On peut aussi faire:
<gateau gout="choco">
<part/>
<part/>
<part/>
<part/>
<part/>
<part/>
<part/>
<part/>
<part/>
<part/>
<part/>
<part/>
<part/>
<part/>
<part/>
<part/>
<ingrédient nom=farine/> 
<ingrédient nom=chocolat/> 
</gateau>

gni

Ou même pire:
<gateau gout="choco">
<part1/>
<part2/>
<part3/>
<part4/>
<part5/>
<part6/>
<part7/>
<part8/>
<part9/>
<part10/>
<part11/>
<part12/>
<part13/>
<part14/>
<part15/>
<part16/>
<ingrédient nom=farine/> 
<ingrédient nom=chocolat/> 
</gateau>

Bonne chance pour faire une DTD qui matche ça. gni
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

12