Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
866 connectés 

  FORUM HardWare.fr
  Programmation
  XML/XSL

  Création d'une DTD

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Création d'une DTD

n°1634739
franceso
Posté le 31-10-2007 à 15:34:09  profilanswer
 

[:zytra] 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
mood
Publicité
Posté le 31-10-2007 à 15:34:09  profilanswer
 

n°1634791
bapho13
Usager usant
Posté le 31-10-2007 à 16:07:15  profilanswer
 


<!ELEMENT papa ((fiston1, fiston2)|(fiston2, fiston1))>


 
Pas d'autre choix (cf XML in a nutshell)

Message cité 1 fois
Message édité par bapho13 le 31-10-2007 à 16:08:52
n°1634795
MagicBuzz
Posté le 31-10-2007 à 16:09:32  profilanswer
 

y'a pas à tortiller, xsd powa :D

n°1634801
bapho13
Usager usant
Posté le 31-10-2007 à 16:12:57  profilanswer
 

MagicBuzz a écrit :

y'a pas à tortiller, xsd powa :D


 
Dit pas de mal des DTD !
 
:kaola:

n°1634804
franceso
Posté le 31-10-2007 à 16:15:23  profilanswer
 

bapho13 a écrit :


<!ELEMENT papa ((fiston1, fiston2)|(fiston2, fiston1))>

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 :D


Je vais jeter un coup d'oeil à ça.
 
Merci à tous les deux :jap:


---------------
TriScale innov
n°1634814
bapho13
Usager usant
Posté le 31-10-2007 à 16:21:44  profilanswer
 

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 :p

Message cité 2 fois
Message édité par bapho13 le 31-10-2007 à 16:24:25
n°1634830
franceso
Posté le 31-10-2007 à 16:36:17  profilanswer
 

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>
  <nom>Martin</nom>
  <prenom>Jean</prenom>
  <age>18</age>
</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.  


---------------
TriScale innov
n°1634858
MagicBuzz
Posté le 31-10-2007 à 17:14:03  profilanswer
 

bapho13 a écrit :

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 :p


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)

n°1634891
Jeddo
A nice place to live
Posté le 31-10-2007 à 18:20:20  profilanswer
 

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 :
 
je prends un exemple à la con pour simplifier, mais en gros c'est ça que je veux :

<employe>
  <nom>Martin</nom>
  <prenom>Jean</prenom>
  <age>18</age>
</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.  


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 :


<!ELEMENT employe EMPTY>
<!ATTLIST  employe nom CDATA>
<!ATTLIST  employe prenom CDATA>
<!ATTLIST  employe age CDATA>


(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.
 
 :hello:


---------------
FREE DATOUNE
n°1634920
MagicBuzz
Posté le 31-10-2007 à 19:50:11  profilanswer
 

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.

Message cité 3 fois
Message édité par MagicBuzz le 31-10-2007 à 19:51:14
mood
Publicité
Posté le 31-10-2007 à 19:50:11  profilanswer
 

n°1634965
Jeddo
A nice place to live
Posté le 31-10-2007 à 22:41:55  profilanswer
 

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ù :
- 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.


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+

Message cité 1 fois
Message édité par Jeddo le 31-10-2007 à 22:42:23

---------------
FREE DATOUNE
n°1636659
franceso
Posté le 05-11-2007 à 09:44:48  profilanswer
 

Jeddo a écrit :


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 :


<!ELEMENT employe EMPTY>
<!ATTLIST  employe nom CDATA>
<!ATTLIST  employe prenom CDATA>
<!ATTLIST  employe age CDATA>


(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.
 
 :hello:

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
 
[...]
 
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.

Oui, j'ai vu qu'on pouvait faire tout ça en xsd. Je vais essayer de jouer un peu avec...
 

Jeddo a écrit :


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+

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é...


---------------
TriScale innov
n°1636670
masklinn
í dag viðrar vel til loftárása
Posté le 05-11-2007 à 10:16:38  profilanswer
 

MagicBuzz a écrit :

y'a pas à tortiller, xsd powa :D


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' [:pingouino]

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 [:itm]

MagicBuzz a écrit :

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 !


Ptin [:kiki]

 

Vive le spécialiste des XSD [:kiki]

MagicBuzz a écrit :

Bref, non seulement je trouve la syntaxe infiniment plus lisible que la DTD


[:rofl] [:rofl] [:rofl] [:rofl]

 

La blague du jour [:bien]


Message édité par masklinn le 05-11-2007 à 10:17:12

---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
n°1636719
MagicBuzz
Posté le 05-11-2007 à 11:19:10  profilanswer
 

C'est pas parceque tu sais pas lire du XSD qu'il faut prendre ce ton condescendant. :spamafote:
 
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.

n°1636733
masklinn
í dag viðrar vel til loftárása
Posté le 05-11-2007 à 11:34:11  profilanswer
 

MagicBuzz a écrit :

C'est pas parceque tu sais pas lire du XSD qu'il faut prendre ce ton condescendant. :spamafote:


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 [:dawa]

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 [:dawa]


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
n°1636748
MagicBuzz
Posté le 05-11-2007 à 11:52:56  profilanswer
 

mouais, tu t'en sors bien pour cette fois :o
 
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)

Message cité 1 fois
Message édité par MagicBuzz le 05-11-2007 à 11:55:18
n°1636767
masklinn
í dag viðrar vel til loftárása
Posté le 05-11-2007 à 12:14:29  profilanswer
 

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.


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
n°1640698
bapho13
Usager usant
Posté le 10-11-2007 à 16:02:11  profilanswer
 

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...)
 
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...
 


 

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:

  • est atomique (je ne trouve pas d'autre terme, mais dans ton cas il s'agit d'un identité: un nom, un prénom, rien de plus ni de moins)
  • est traité par machine (information ordonnée  =beaucoup plus facile à traiter)
  • est rarement modifié (pour des questions de performance: les algorithmes de tri étant très couteux)
  • est souvent lu (tout le temps dans le cas de ton document)

n°1641370
franceso
Posté le 12-11-2007 à 10:15:45  profilanswer
 

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.
 


---------------
TriScale innov
n°1641385
masklinn
í dag viðrar vel til loftárása
Posté le 12-11-2007 à 10:52:08  profilanswer
 

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...


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
n°1641708
Jeddo
A nice place to live
Posté le 12-11-2007 à 16:17:22  profilanswer
 

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) :spamafote:


---------------
FREE DATOUNE
n°1641719
franceso
Posté le 12-11-2007 à 16:33:43  profilanswer
 

Jeddo a écrit :

 

Dans ce cas-là, conceptuellement, il s'agit d'attributs obligatoires (et non d'éléments) :spamafote:

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>
  <nom>Martin</nom>
  <prenom>Jean</prenom>
  <competences>
    <competence>Programmation en C++</competence>
    <competence>Anglais courant</competence>
  </competences>
</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.


Message édité par franceso le 12-11-2007 à 16:34:11

---------------
TriScale innov
n°1641728
Jeddo
A nice place to live
Posté le 12-11-2007 à 16:47:39  profilanswer
 

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.


---------------
FREE DATOUNE
n°1641780
bapho13
Usager usant
Posté le 12-11-2007 à 18:50:38  profilanswer
 

franceso a écrit :


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.


 
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 :


Il est parfaitement possible d'imposer l'ordre des éléments dans une XSD...


 
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).


Message édité par bapho13 le 12-11-2007 à 18:51:18
mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  XML/XSL

  Création d'une DTD

 

Sujets relatifs
Problème pour générer la DTD de fichiers XML[bash]creation d'un premier script
Création Site Internet!création de checkbox
[Visual C++] Creation et importation d'une library statique (.lib)tableur XML ? A partir d'une DTD ? Ca existe ?
Création d'un bitmap de grande taille[RESOLU]creation fichier txt
création sitespécifier une DTD lors de la création avec xml.dom.minidom.Document
Plus de sujets relatifs à : Création d'une DTD


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR