Page 1 sur 1

DOM et validation DTD

Posté : 16 août 2005, 22:45
par jalol
Salut à tous !

Voilà, je suis en train d'écrire une classe permettant de se servir de XML comme d'une base de données SQL. Je cherche un moyen pour définir la structure des tables et je me suis dit qu'une DTD pouvait être la solution, mais j'ai encore un peu de mal à comprendre le fonctionnement des DTD avec PHP DOM...
J'ai vu qu'il était possible d'attacher une feuille DTD externe grâce à DOMImplementation->createDocumentType()

Mais je ne vois pas de fonction permettant de gérer le contenu de la DTD... :?
Quelqu'un aurait une idée?

Posté : 16 août 2005, 23:10
par Cyrano
On ne gère pas vraiment le contenu d'une DTD : on établit une DTD à la base et ensuite on gère le contenu du fichier XML en fonction de cette DTD. Le plus souvent on crée la DTD manuellement et ensuite on ne s'en occupe plus si ce n'est pour l'ajouter dans le DOCTYPE de ton fichier XML.

Posté : 16 août 2005, 23:16
par jalol
OK, donc il faudrait gérer dynamiquement la DTD avec des fonctions de fichier. Le problème, c'est que je suis un (beaucoup) nul avec ces fonctions :oops: ... Tu as une idée sur comment je pourrais gérer ça?

En gros, il faudrait que lorsque j'appelle une méthode de ma classe xmsql pour créer une "table", cela agisse sur la DTD. Elle est créée si elle n'existe pas ou éventuellement modifiée si on demande la modification de la structure.

Merci d'avance :)

Posté : 16 août 2005, 23:20
par Cyrano
Non, et je crois que tu n'as pas saisi ce qu'est vraiment une DTD :-k Avant que je me lance dans des explication, dis-moi donc ton interprétation de ce que c'est.

Posté : 16 août 2005, 23:27
par jalol
Ben en fait, j'ai une idée assez floue de ce que c'est réellement. A vrai dire, j'ai commencé à découvrir de ce que c'était ce matin :lol: . D'après ce que j'ai pu comprendre, c'est la définition de type du fichier XML qui l'associe, la définition de la structure (enfin je crois).
En voyant ça, je me suis dit que cela pouvait m'aider dans le développement de ma classe, car pour le moment je n'ai aucun moyen de contrôler la structure de mes "tables", comme pour une table SQL, et notamment en ce qui concerne le nombre de champs et leurs appellations.

Posté : 16 août 2005, 23:40
par Cyrano
Ok, alors d'abord, dis-toi que pour un stockage en fichier XML, tu n'as pas obligatoirement besoin d'une DTD.

En revanche, une DTD apporte une cohérence dans la structure de ton fichier XML. La DTD, ou Document Type Definition est en quelque sorte la grammaire du fichier XML qui s'y raccorde: ça indique quel type d'éléments contient ton fichier, quels éléments sont obligatoires ou facultatifs, le type de contenu, les attributs éventuels et leurs valeurs/type de valeurs etc... C'est pour ça qu'on ne s'amuse pas à tripatouiller dedans en permanence. On fixe la DTD à la base et on y touche plus. mais concevoir une DTD exige une analyse poussée.

Pour voir de quoi peut avoir l'air une base de données au format XML que tu créerais toi-même, va sur www.fabforce.net et télécharges DBDesigner. C'est un outil de modélisation pour MySQL qui crée un Modèle Physique de Données . Ce Modèle est ensuite enregistré au format XML. Crée une petite modélisation basique et enregistre ça, puis ouvre le fichier XML. À partir de là, tu pourrais envisager de construire une DTD en t'inspirant du modèle. Pour ma part, c'est ce que je ferais: une maquette debase avec toutes les sortes d'éléments que je veux pouvoir trouver et ensuite je fais la DTD. Quand ça c'est fait, je crées ensuite mes fichiers XML normaux sur la base de cette DTD.

Posté : 16 août 2005, 23:56
par jalol
Oki, merci je vais me pencher là-dessus :)