Création d'une DTD - XML/XSL - Programmation
Marsh Posté le 31-10-2007 à 16:07:15
|
Pas d'autre choix (cf XML in a nutshell)
Marsh Posté le 31-10-2007 à 16:12:57
ReplyMarsh Posté le 31-10-2007 à 16:15:23
bapho13 a écrit :
Pas d'autre choix (cf XML in a nutshell) |
Donc si j'ai X fils possibles, je dois me taper toutes les combinaisons à la main
MagicBuzz a écrit : y'a pas à tortiller, xsd powa |
Je vais jeter un coup d'oeil à ça.
Merci à tous les deux
Marsh Posté le 31-10-2007 à 16:21:44
De rien, et oui si tu en a X tu dois te les taper à la main
Mais si c'est le cas le problème est peut être plus basique: mauvais sous ensemble, mauvaise définition des attributs ...
Edit: Ou tout simplement tu veux préter à XML plus de souplesse qu'il en a
Marsh Posté le 31-10-2007 à 16:36:17
bapho13 a écrit : Mais si c'est le cas le problème est peut être plus basique: mauvais sous ensemble, mauvaise définition des attributs ... |
Ben effectivement le problème vient peut-être de ça, parce que ce que je veux faire me paraît quand même très simple :
je prends un exemple à la con pour simplifier, mais en gros c'est ça que je veux :
<employe> |
Chaque employé doit avoir exactement un nom, un prénom et un age, mais on n'est pas obligé de les mettre dans le bon ordre.
Marsh Posté le 31-10-2007 à 17:14:03
bapho13 a écrit : De rien, et oui si tu en a X tu dois te les taper à la main |
Je pense surtout que DTD a une sévère lacune...
Je ne comprend pas comment il est possible de vouloir forcer l'ordre des éléments, puisque par définition, des éléments dans une même node ne sont pas ordonnés...
Suffit de regarder XSL par exemple pour voir qu'il n'est à aucun moment question d'ordre des éléments.
Je trouve ça étrange.
D'ailleurs, en XSD, je ne suis même pas sûr qu'on puisse forcer l'ordre !
(par contre répondre à la question de francesco, ça oui, sans aucun problème)
Marsh Posté le 31-10-2007 à 18:20:20
franceso a écrit : Ben effectivement le problème vient peut-être de ça, parce que ce que je veux faire me paraît quand même très simple :
|
C'est pas possible avec une DTD de façon générique. Les éléments XML sont ordonnés, par contre les attributs ne le sont pas. Donc tu peux faire <employe prenom="jean" nom="martin" age="18"/> avec une DTD du genre :
|
(Je garantis pas la syntaxe.)
Après je vois pas ce qui te dérange d'imposer un ordre. Il faut bien réfléchir à la sémantique de ce que tu fais.
Marsh Posté le 31-10-2007 à 19:50:11
http://www.w3schools.com/schema/sc [...] cators.asp
En XSD, donc, comme je disais, on peut créer des types complexes où :
- L'ordre n'est pas fixe : xs:all
- L'ordre est fixe : xs:sequence
- Exclusifs : xs:choice
Et chacun de ces éléments :
- Peut être présent jusqu'à X fois : maxOccurs
- Au moins X fois : minOccurs
Etc. Etc.
Bref, non seulement je trouve la syntaxe infiniment plus lisible que la DTD, mais visiblement ça permet un largement meilleur contrôle sur la structure du document.
Marsh Posté le 31-10-2007 à 22:41:55
MagicBuzz a écrit : http://www.w3schools.com/schema/sc [...] cators.asp En XSD, donc, comme je disais, on peut créer des types complexes où : Et chacun de ces éléments : Etc. Etc. Bref, non seulement je trouve la syntaxe infiniment plus lisible que la DTD, mais visiblement ça permet un largement meilleur contrôle sur la structure du document. |
Moi pas !
Bon, un peu de culture et un papier de référence : http://web.cs.wpi.edu/~mmani/toit/ [...] xonomy.pdf
Les DTDs sont moins expressives (càd plus limitées) que les XML Schemas, eux-mêmes moins expressifs que les schémas Relax NG, qui capture la classe des langages réguliers d'arbres. Il y a des choses qu'on ne peut pas exprimés avec les DTDs, on ne peut pas compter par exemple, alors que XML Schema permet de définir des occurrences d'éléments. La contrepartie, c'est que la validation d'un document est moins "complexe" (dans le sens temps de calcul) avec une DTD qu'avec un XML Schema.
Le choix du schéma dépend beaucoup de l'application visée.
A+
Marsh Posté le 05-11-2007 à 09:44:48
Jeddo a écrit :
|
A priori ça me dérange pas plus que ça d'imposer un ordre. C'est juste que ça me semble être une contrainte inutile vu les données que je veux stocker (mon xml est destiné à être traité par du xsl qui se charge de présenter les données dans l'ordre qui m'intéresse...)
Par contre, je ne veux pas changer mes éléments fils en attributs : je considère mes éléments fils comme des données et non des méta-données et ça me paraît beaucoup plus logique de faire comme ça...
MagicBuzz a écrit : En XSD, donc, comme je disais, on peut créer des types complexes |
Oui, j'ai vu qu'on pouvait faire tout ça en xsd. Je vais essayer de jouer un peu avec...
Jeddo a écrit : |
Merci pour les détails. En l'occurrence, je n'ai pas strictement besoin d'un schéma de validation de mon XML. C'est juste pour essayer un peu de voir ce qu'on peut faire. De toutes façons, tous mes XML seront générés à partir d'un même squelette, donc je n'ai pas besoin de faire de validation très poussée. C'est juste que je suis tombé sur cette limitation de DTD et ça m'a intrigué...
Marsh Posté le 05-11-2007 à 10:16:38
MagicBuzz a écrit : y'a pas à tortiller, xsd powa |
Les XSD c'est encore plus merdique que les DTD, c'est à peu près aussi compréhensible et pratique que l'encyclopedia universalis en ouzbèque traduit par un aborigène australien complètement défoncé à la coke et au Jack'
MagicBuzz a écrit : Je ne comprend pas comment il est possible de vouloir forcer l'ordre des éléments, puisque par définition, des éléments dans une même node ne sont pas ordonnés... |
C'est exactement l'inverse, le XML est par défaut ordonné, la question est ensuite de savoir si tu veux tenir compte de l'ordre ou pas
MagicBuzz a écrit : Suffit de regarder XSL par exemple pour voir qu'il n'est à aucun moment question d'ordre des éléments. D'ailleurs, en XSD, je ne suis même pas sûr qu'on puisse forcer l'ordre ! |
Ptin
Vive le spécialiste des XSD
MagicBuzz a écrit : Bref, non seulement je trouve la syntaxe infiniment plus lisible que la DTD |
La blague du jour
Marsh Posté le 05-11-2007 à 11:19:10
C'est pas parceque tu sais pas lire du XSD qu'il faut prendre ce ton condescendant.
Si ça te fait bander le DTD, joue avec, ce sera sans moi.
Franchement y'a pas à tortiller, plus je lis tes posts, plus je me dis qu'il manque cruellement à ce forum une fonction "ignore list".
La moindre de tes interventions est un ramassi haineux d'avanies.
Franchement, va jouer dans blabla@prog et vient pas faire chier les autres. Si t'es si aigri, change de boulot, va élever des chèvres, mais t'en prend pas aux autres.
Cite-moi un seul post dans ces 48 dernières heures où tu donnes un coup de main à quelqu'un s'il te plaît avant de répondre.
Marsh Posté le 05-11-2007 à 11:34:11
MagicBuzz a écrit : C'est pas parceque tu sais pas lire du XSD qu'il faut prendre ce ton condescendant. |
Des XSD, j'en ai fait pendant plus de 6 mois couplés avec des XSL, j'ai du me faire >2kloc de l'un et >6kloc de l'autre, alors t'es bien gentil mais ta remarque lol
MagicBuzz a écrit : Si ça te fait bander le DTD, joue avec, ce sera sans moi. |
J'ai dit ça? Non, j'ai dit que les XSD étaient complètement illisibles, imbitables, et globalement moisies. Ce qui est une remarque pûrement objective. Si tu veux savoir ce que je conseille, c'est RelaxNG, tout spécialement RelaxNG Compact. Et Schematron pour ajouter des assertions trop complexes pour RNG
MagicBuzz a écrit : La moindre de tes interventions est un ramassi haineux d'avanies. |
Mais non, mais non, c'est juste que le moindre de tes posts est un ramassi de conneries à plus savoir qu'en faire.
MagicBuzz a écrit : Cite-moi un seul post dans ces 48 dernières heures où tu donnes un coup de main à quelqu'un s'il te plaît avant de répondre. |
http://forum.hardware.fr/forum2.ph [...] w=0&nojs=0
Marsh Posté le 05-11-2007 à 11:52:56
mouais, tu t'en sors bien pour cette fois
m'enfin voilà quoi, m'énerve d'arriver la matin et m'en prendre plein la gueule alors je j'essaie simplement d'apporter une solution.
ps : pour le coup de l'xml ordonné, chuis pas trop d'accord. certainement un problème de sémantique, donc on va pas polémiquer. en tout cas c'est normal qu'on puisse ne pas imposer l'ordre des éléments (après par contre, une fois qu'ils sont mis dans un certain ordre dans le fichier, je suis d'accord qu'il ne fais pas y toucher). pour moi le XML c'est juste la sérialisation d'un flux : autant le flux peut arriver dans n'importe quel ordre, c'est au dev de décider de la structure, autant la sérialisation doit permettre de récupérer les informations dans l'ordre original du flux, au cas où cet ordre doit important pour le contenu.
à partir de là, préconiser XSD en place de DTD, c'est toujours mieux que rien. après si y'a mieux, tant mieux, mais y'aura pas pire que DTD, ne serait-ce que parcequ'il est bien trop limité (et perso je le trouve bien plus imbittable que XSD mais bon après c'est une histoire de goûts et d'habitudes)
Marsh Posté le 05-11-2007 à 12:14:29
MagicBuzz a écrit : ps : pour le coup de l'xml ordonné, chuis pas trop d'accord. |
Ben chuis désolé de te dire que tu as tord, en XML par définition les éléments sont ordonnés et les attributs ne le sont pas, d'où des notions de next-siblings, previous-siblings, etc...
Après, comme mentionné, on peut en tenir compte (donc utiliser une <sequence/> dans sa spec) ou pas (donc utiliser un <any/> )
MagicBuzz a écrit : en tout cas c'est normal qu'on puisse ne pas imposer l'ordre des éléments |
Ah mais je dis pas le contraire, je dis juste que par définition en XML l'ordre existe. Après, dans un dialecte précis il peut ne pas importer.
MagicBuzz a écrit : pour moi le XML c'est juste la sérialisation d'un flux |
Heuu non le XML a été créé pour spécifier des documents, à la base.
Et de toute façon, même dans un flux l'ordre peut parfaitement être important.
Marsh Posté le 10-11-2007 à 16:02:11
franceso a écrit : A priori ça me dérange pas plus que ça d'imposer un ordre. C'est juste que ça me semble être une contrainte inutile vu les données que je veux stocker (mon xml est destiné à être traité par du xsl qui se charge de présenter les données dans l'ordre qui m'intéresse...) |
franceso a écrit : Merci pour les détails. En l'occurrence, je n'ai pas strictement besoin d'un schéma de validation de mon XML. C'est juste pour essayer un peu de voir ce qu'on peut faire. De toutes façons, tous mes XML seront générés à partir d'un même squelette, donc je n'ai pas besoin de faire de validation très poussée. C'est juste que je suis tombé sur cette limitation de DTD et ça m'a intrigué... |
2-0 pour les DTD dans ce cas là: dans ton cas, l'ordre devient primordial, puisqu'avec XSL l'ordre par défaut de tes éléments dépendra de leur ordre dans le fichier XML. De plus, la génération de tes données étant automatiquement réalisée par un logiciel (que je suppose unique), il se moque bien de la souplesse que tu peux lui donner: il générera toujours tes éléments dans le même ordre (sauf cas de mauvaise programmation, bien sur) !
De manière générale, je pense qu'il faut rendre très rigide tout élément qui:
Marsh Posté le 12-11-2007 à 10:15:45
bapho13 a écrit : 2-0 pour les DTD dans ce cas là: dans ton cas, l'ordre devient primordial, puisqu'avec XSL l'ordre par défaut de tes éléments dépendra de leur ordre dans le fichier XML. |
Oui, mais mon XSL remet tout dans l'ordre en appelant les templates des fils dans un ordre particulier. Donc l'ordre par défaut n'a aucune importance pour moi : tout ce qui compte est que les fils soient tous présents en un unique exemplaire.
bapho13 a écrit : De plus, la génération de tes données étant automatiquement réalisée par un logiciel (que je suppose unique), il se moque bien de la souplesse que tu peux lui donner: il générera toujours tes éléments dans le même ordre (sauf cas de mauvaise programmation, bien sur) ! |
Oui, c'est vrai. C'est pour ça que je n'ai pas strictement besoin d'exprimer de souplesse dans ma méthode de validation. C'est juste que je trouve dommage d'imposer quelque chose qui n'est pas strictement nécessaire.
Marsh Posté le 12-11-2007 à 10:52:08
bapho13 a écrit : 2-0 pour les DTD dans ce cas là: dans ton cas, l'ordre devient primordial, puisqu'avec XSL l'ordre par défaut de tes éléments dépendra de leur ordre dans le fichier XML. |
Il est parfaitement possible d'imposer l'ordre des éléments dans une XSD...
Marsh Posté le 12-11-2007 à 16:17:22
franceso a écrit : Oui, mais mon XSL remet tout dans l'ordre en appelant les templates des fils dans un ordre particulier. Donc l'ordre par défaut n'a aucune importance pour moi : tout ce qui compte est que les fils soient tous présents en un unique exemplaire. |
Dans ce cas-là, conceptuellement, il s'agit d'attributs obligatoires (et non d'éléments)
Marsh Posté le 12-11-2007 à 16:33:43
Jeddo a écrit : Dans ce cas-là, conceptuellement, il s'agit d'attributs obligatoires (et non d'éléments) |
Sauf que tu ne peux pas mettre de trucs compliqués dans un attribut.
Dans mon exemple précédent, imagine que j'aie un truc comme ça :
<employe> |
Je veux que chaque employé ait un et un seul élément compétences, mais j'ai quand même envie de parser le contenu de ce bloc.
Marsh Posté le 12-11-2007 à 16:47:39
Ah OK. Mais dans ce cas, je reviens à la charge sur l'ordre des éléments. Ça semble logique que chaque "employé" ait la même structure sous-jacente, et donc le même ordre dans les sous-éléments de l'arbre XML.
Marsh Posté le 12-11-2007 à 18:50:38
franceso a écrit : |
C'est lorsque tu auras un bug et que tu ne parviendras pas à en deviner immédiatement la cause que tu béniras ta DTD et sa rigidité !
En fait, je dirais que les ordinateurs n'aiment généralement pas la liberté: un bon programme est un programme qui tient ton PC en laisse.
masklinn a écrit : |
Bah oui, mais tu conviendra que la syntaxe d'une DTD est largement suffisante pour traiter ce cas. C'est pour ca que je la conseille (et puis le fait que XSD, que je connais mal, me semble être un peu usine à gaz).
Marsh Posté le 31-10-2007 à 15:34:09
Salut !
Y'a des experts en DTD dans le coin ?
Vous savez comment faire pour exiger qu'un élément possède une unique occurrence de plusieurs fils, mais sans imposer l'ordre ?
Genre si je fais
<!ELEMENT papa (fiston1, fiston2)>
j'exige bien que chacun des deux fils soit présent une et une seule fois mais j'impose l'ordre des fils, alors que si je fais
<!ELEMENT papa (fiston1 | fiston2)*>
je n'impose plus l'ordre mais par contre je perd la contrainte sur l'existence et l'unicité de chacun des fils.
Il y a pas un moyen d'avoir les deux en même temps ?
---------------
TriScale innov