Bonjour,
Tout d'abord je tenais à te remercier pour ta réponse, tu as été le seul courageux à répondre à mon post .
Je vais te fournir plus de détails que je n'avais pas mis dans le premier post de peur de faire fuir tous le monde.
Partons sur le plus simple. Comme je le disais, les fichiers XML sont récupérés d'un jeu vidéo. Dans ce jeu, nous avons un personnage qui peut porter de l'équipement. Cet équipement est une armure composé de plusieurs pièces. Une pièce pour le torse, une pièce pour les jambes, une pièce pour les épaules, une pour les mains et une pour les bottes. Toute les données concernant tous les items étant des pièces d'armures sont contenus dans le fichiers item_armor.xml (qui fait 175Mo.
Mon objectif, dans l'idéal, c'est de prendre ce fichier XML, et de l'uploader dans une Database (MySQL) pour l'exploiter sous 2 formes: un site qui permet de visionner, pour un item précis, la liste de ses caractéristique. Et dans un deuxième temps, un site permettant également de calculer les caractéristiques d'un joueur en fonctions de l'équipement choisit (donc la somme, pour chaque statistique, de l'ensemble des items "torse", "jambe", etc. choisi).
Pour ce faire, j'ai selon moi, 2 choix:
- Uploader le fichier XML directement dans la Base de données avec une méthode qui va me créer automatiquement les tables, les PK, les FK et me remplir la database avec une occurence par ID item (qui un numéro unique par objet)
- Comment uploader directement un .XML dans ma BD MySQL ? J'ai essayé, et après traitement, l'opération a été un succès, mais 0 requêtes effectués...
OU
- créer un schéma de donnée (MCD) puis le MPD associé qui va me créer ma structure de la base de données. A partir de la transformer mon fichier XML et l'uploader dans la base (comment, je n'en ai aucune idée pour le moment).
- Etudier chaque élément du fichier item_armor.xml
- Comprendre la signification, déterminer son type (int, boolean,..)
- créer des entités (modèle entité/association) regroupant des <élément> (de mon xml)
- créer les associations
- Transformer mon fichier item_armor.xml (comment ?)
-uploader mon nouveau fichier créé (comment ?)
Quelle solution choisir ? Dans tous les cas, il est nécessaire de comprendre le fichier item_armor.xml (et par la suite les autres fichiers items_***.xml).
Voici donc un extrait du code XML (cet extrait présente 2 item, un avec le numéro identifiant 110101292 et l'autre portant l'identifiant 110101293):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204
| <client_item>
<id>110101292</id>
<name>rb_torso_d_n_e1_55d</name>
<desc>STR_RB_TORSO_D_N_E1_55D</desc>
<armor_type>robe</armor_type>
<item_type>normal</item_type>
<material>mat_flesh</material>
<icon_name>Icon_Item_RB_Torso_E01</icon_name>
<price>1727135</price>
<extra_currency_item>coin_arena_01</extra_currency_item>
<extra_currency_item_count>93480</extra_currency_item_count>
<trade_in_item_list>
<data>
<trade_in_item>rb_torso_d_n_e1_55b</trade_in_item>
<trade_in_item_count>1</trade_in_item_count>
</data>
<data>
<trade_in_item>coin_arena_01</trade_in_item>
<trade_in_item_count>37392</trade_in_item_count>
</data>
</trade_in_item_list>
<max_stack_count>1</max_stack_count>
<equipment_slots>torso</equipment_slots>
<dodge>244</dodge>
<quality>epic</quality>
<level>55</level>
<magical_resist>152</magical_resist>
<physical_defend>209</physical_defend>
<lore>FALSE</lore>
<can_exchange>FALSE</can_exchange>
<can_sell_to_npc>FALSE</can_sell_to_npc>
<can_deposit_to_character_warehouse>TRUE</can_deposit_to_character_warehouse>
<can_deposit_to_account_warehouse>TRUE</can_deposit_to_account_warehouse>
<can_deposit_to_guild_warehouse>FALSE</can_deposit_to_guild_warehouse>
<breakable>TRUE</breakable>
<soul_bind>FALSE</soul_bind>
<remove_when_logout>FALSE</remove_when_logout>
<gender_permitted>all</gender_permitted>
<warrior>55</warrior>
<scout>55</scout>
<mage>55</mage>
<cleric>55</cleric>
<engineer>55</engineer>
<artist>55</artist>
<fighter>55</fighter>
<knight>55</knight>
<assassin>55</assassin>
<ranger>55</ranger>
<wizard>55</wizard>
<elementalist>55</elementalist>
<chanter>55</chanter>
<priest>55</priest>
<gunner>55</gunner>
<bard>55</bard>
<rider>55</rider>
<option_slot_value>5</option_slot_value>
<special_slot_value>0</special_slot_value>
<option_slot_bonus>0</option_slot_bonus>
<bonus_attr1>maxhp 277</bonus_attr1>
<bonus_attr2>maxmp 1214</bonus_attr2>
<bonus_attr3>concentration 18</bonus_attr3>
<bonus_attr4>physicaldefend 89</bonus_attr4>
<bonus_attr5>MagicalResist 47</bonus_attr5>
<bonus_attr6>magicalskillboost 68</bonus_attr6>
<bonus_attr7>Boosthate -33%</bonus_attr7>
<bonus_attr8>flyspeed 10%</bonus_attr8>
<bonus_apply>equip</bonus_apply>
<no_enchant>FALSE</no_enchant>
<max_enchant_value>15</max_enchant_value>
<cannot_extraction>TRUE</cannot_extraction>
<cannot_changeskin>0</cannot_changeskin>
<ui_sound_type>Sounds/item/item_def_robe</ui_sound_type>
<cash_item>0</cash_item>
<can_split>FALSE</can_split>
<item_drop_permitted>FALSE</item_drop_permitted>
<tag>Ver2.7</tag>
<charge_way>1</charge_way>
<charge_level>2</charge_level>
<charge_price1>0.274286</charge_price1>
<charge_price2>0.548571</charge_price2>
<bonus_attr_a1>PhysicalCriticalReduceRate 15</bonus_attr_a1>
<bonus_attr_a2>magicalCritical 5</bonus_attr_a2>
<bonus_attr_a3>magicalCriticalReducerate 7</bonus_attr_a3>
<bonus_attr_a4>magicalhitAccuracy 10</bonus_attr_a4>
<bonus_attr_b1>magicalCriticalReducerate 5</bonus_attr_b1>
<bonus_attr_b2>MagicalResist 5</bonus_attr_b2>
<bonus_attr_b3>magicalskillboost 7</bonus_attr_b3>
<burn_on_attack>1</burn_on_attack>
<burn_on_defend>35</burn_on_defend>
<bm_restrict_category>3</bm_restrict_category>
<disposable_trade_item>World_cash_coin_post_E_55</disposable_trade_item>
<disposable_trade_item_count>4</disposable_trade_item_count>
<can_ap_extraction>FALSE</can_ap_extraction>
<can_pack_count>3</can_pack_count>
<mesh>RB_IDarena03_Body</mesh>
<visual_slot>torso leg</visual_slot>
<mesh_change>0</mesh_change>
<default_color_m>255,255,255</default_color_m>
<default_color_f>255,255,255</default_color_f>
<can_dye>1</can_dye>
<race_permitted>pc_light pc_dark</race_permitted>
</client_item>
<client_item>
<id>110101293</id>
<name>rb_torso_n_e1_55d</name>
<desc>STR_RB_TORSO_N_E1_55D</desc>
<armor_type>robe</armor_type>
<item_type>normal</item_type>
<material>mat_flesh</material>
<icon_name>Icon_Item_RB_Torso_E01</icon_name>
<price>1727135</price>
<extra_currency_item>coin_arena_01</extra_currency_item>
<extra_currency_item_count>93480</extra_currency_item_count>
<trade_in_item_list>
<data>
<trade_in_item>rb_torso_n_e1_55b</trade_in_item>
<trade_in_item_count>1</trade_in_item_count>
</data>
<data>
<trade_in_item>coin_arena_01</trade_in_item>
<trade_in_item_count>37392</trade_in_item_count>
</data>
</trade_in_item_list>
<max_stack_count>1</max_stack_count>
<equipment_slots>torso</equipment_slots>
<dodge>244</dodge>
<quality>epic</quality>
<level>55</level>
<magical_resist>152</magical_resist>
<physical_defend>209</physical_defend>
<lore>FALSE</lore>
<can_exchange>FALSE</can_exchange>
<can_sell_to_npc>FALSE</can_sell_to_npc>
<can_deposit_to_character_warehouse>TRUE</can_deposit_to_character_warehouse>
<can_deposit_to_account_warehouse>TRUE</can_deposit_to_account_warehouse>
<can_deposit_to_guild_warehouse>FALSE</can_deposit_to_guild_warehouse>
<breakable>TRUE</breakable>
<soul_bind>FALSE</soul_bind>
<remove_when_logout>FALSE</remove_when_logout>
<gender_permitted>all</gender_permitted>
<warrior>55</warrior>
<scout>55</scout>
<mage>55</mage>
<cleric>55</cleric>
<engineer>55</engineer>
<artist>55</artist>
<fighter>55</fighter>
<knight>55</knight>
<assassin>55</assassin>
<ranger>55</ranger>
<wizard>55</wizard>
<elementalist>55</elementalist>
<chanter>55</chanter>
<priest>55</priest>
<gunner>55</gunner>
<bard>55</bard>
<rider>55</rider>
<option_slot_value>5</option_slot_value>
<special_slot_value>0</special_slot_value>
<option_slot_bonus>0</option_slot_bonus>
<bonus_attr1>maxhp 277</bonus_attr1>
<bonus_attr2>maxmp 1214</bonus_attr2>
<bonus_attr3>concentration 18</bonus_attr3>
<bonus_attr4>physicaldefend 89</bonus_attr4>
<bonus_attr5>MagicalResist 47</bonus_attr5>
<bonus_attr6>magicalskillboost 68</bonus_attr6>
<bonus_attr7>Boosthate -33%</bonus_attr7>
<bonus_attr8>flyspeed 10%</bonus_attr8>
<bonus_apply>equip</bonus_apply>
<no_enchant>FALSE</no_enchant>
<max_enchant_value>15</max_enchant_value>
<cannot_extraction>TRUE</cannot_extraction>
<cannot_changeskin>0</cannot_changeskin>
<ui_sound_type>Sounds/item/item_def_robe</ui_sound_type>
<cash_item>0</cash_item>
<can_split>FALSE</can_split>
<item_drop_permitted>FALSE</item_drop_permitted>
<tag>Ver2.7</tag>
<charge_way>1</charge_way>
<charge_level>2</charge_level>
<charge_price1>0.274286</charge_price1>
<charge_price2>0.548571</charge_price2>
<bonus_attr_a1>PhysicalCriticalReduceRate 15</bonus_attr_a1>
<bonus_attr_a2>magicalCritical 5</bonus_attr_a2>
<bonus_attr_a3>magicalCriticalReducerate 7</bonus_attr_a3>
<bonus_attr_a4>magicalhitAccuracy 10</bonus_attr_a4>
<bonus_attr_b1>magicalCriticalReducerate 5</bonus_attr_b1>
<bonus_attr_b2>MagicalResist 5</bonus_attr_b2>
<bonus_attr_b3>magicalskillboost 7</bonus_attr_b3>
<burn_on_attack>1</burn_on_attack>
<burn_on_defend>35</burn_on_defend>
<bm_restrict_category>3</bm_restrict_category>
<disposable_trade_item>World_cash_coin_post_E_55</disposable_trade_item>
<disposable_trade_item_count>4</disposable_trade_item_count>
<can_ap_extraction>FALSE</can_ap_extraction>
<can_pack_count>3</can_pack_count>
<mesh>RB_IDarena03_Body</mesh>
<visual_slot>torso leg</visual_slot>
<mesh_change>0</mesh_change>
<default_color_m>255,255,255</default_color_m>
<default_color_f>255,255,255</default_color_f>
<can_dye>1</can_dye>
<race_permitted>pc_light pc_dark</race_permitted>
</client_item> |
En voyant cette portion XML, j'en déduis que le code suit un schéma (que je n'ai pas et qu'il m'est impossible de récupérer). Certaines balises peuvent ne pas être présente d'un item à l'autre.
Pour répondre à tes questions:
- Oui quand je parle d'attributs, je parle des différentes balise présente dans l'élément <client_item>
- Ensuite je parlais de 300 éléments (donc balises) dans le fichier XML. Ce n'est pas exactement ca. Il y a 3 fichiers "items" différents. Chaque fichiers regroupe des "items" différents. ET, dans chaque fichier, il peut également y avoir plusieurs sortent d'items(un fichier pour les armures, un fichier pour les armes et accessoires, un fichier pour les consommables et les livres de compétence).
Donc, ce que j'ai fait, c'est que j'ai regroupé l'ensemble des éléments apparaissant dans les 3 fichiers et qui sont des sous éléments de <client_item>. Apres suppression des doublons je me retrouve avec 300 éléments. J'ai essayé de déterminé, pour chaque élément, à quoi il correspond ainsi que son type.
Donc quand tu dis:
Je n'ai pas très bien compris si les 300 attributs venaient du fait que les objets du jeu sont tellement variés qu'ils peuvent avoir 300 caractéristiques différentes (ce qui est très facile à faire avec XML), ou du fait qu'il y a 300 objets ?
C'est exactement ca ! J'ai des fichiers qui me représente un objet "Item". Sauf que cet item, selon sa catégorie (arme, armure, accessoire, consommable...), va avoir des caractéristiques différentes (et une caractéristique correspond à un <élément> imbriqué dans <client_item>.
Par rapport à tes remarques:
Pour les éléments qui se retrouvent dans plusieurs fichiers, ils peuvent très bien être sémantiquement différents. Du coup, il parait sage de faire plusieurs modèles de données, du moins jusqu'à ce que tout soit éclairci et qu'on puisse les rassembler en un seul (ou modéliser les relations entre ces modèles).
Noté ! d'ailleurs la réponse que tu es en train de lire par là-dessus, je n'étudie plus que, pour le moment, un seul fichier.
Quand tu parles de rattacher un attribut (donc un élément) à une entité, j'imagine qu'il s'agit d'un sous-élément qui est imbriqué dans d'autres éléments XML ? Une seule entité contenant tout les éléments qui ne font pas encore sens me parait effectivement absurde. Je ferais plutôt autant d'entités que d'éléments non compris.
Ok, exemple:
1 2 3
| cash_available_minute
blade_fx
item_fx |
Ces 3 éléments je ne les comprends pas. De ce fait, je voulais les regrouper dans mon MCD dans une entité "entite_element_inconnu". Mais je dois plutôt faire 3 entité séparés. Noté !
Donc je prends note des remarques, j'espère que les informations supplémentaires fournis pourront vous aider à m'éclairer dans la démarche que je dois suivre.
Merci par avance et bonne soirée
Partager