Envoyé par
win_ubuntu
en fait, j'aimerai confirmer la chose suivante:
tout texte accepté par le type CDATA (attribut) est accepté aussi par le type #PCDATA (élément), et vice versa.
Oui.
En DTD, le contenu texte d'un élément est noté #PCDATA et est entièrement libre.
Les attributs, eux, peuvent être restreints à différents types, mais le type CDATA veut dire "pas de restriction."
Donc, l'un comme l'autre peuvent contenir n'importe quoi*, et ce qui est accepté par l'un, l'est par l'autre.
- pour quoi vous avez dit:
CDATA, le type "n'importe quoi"?
Pas de restriction, donc tout est accepté, c'est à dire, n'importe quoi qu'on mette dedans, c'est accepté.
et les caractères: &,< appartiennent à "n'importe quoi" ou pas!
Oui, mais ces caractères-là doivent être échappés, car ils servent au balisage.
Pas seulement dans les attributs : comme contenu d'élément aussi. Toujours. C'est normal, ils servent au balisage. Ne pas les échapper, c'est être mal formé, ce n'est pas une question de validation. La validation ne peut rien faire contre ça.
& est échappé en & et < est échappé en <
Dans le contenu des éléments, on peut les échapper avec une balise <![CDATA[ ]]>, c'est vrai. Il existe donc deux façons de les échapper. Voilà tout.
<condition test="a & b < c" />
est parfaitement accepté en mettant CDATA comme type de l'attribut test. (Mais il n'y a vraiment que CDATA qui l'accepte.)
Envoyé par
win_ubuntu
sur le Net j'ai trouvé:
Parsed Character Data (PCDATA) is a term used about text data that will be parsed by the XML parser.
-The term CDATA is used about text data that should not be parsed by the XML parser.
moi je ne suis pas d'accord. si on prend l'exempel précédent:
<!ATTLIST livre titre CDATA #REQUIRED>
instance:
<livre titre= "xml & java"> text </livre>
ce fragement contient une érreur. cette érreur doit étre detectée par le parseur(validant ou non validant) n'est ce pas? donc le texte insére pour un attribut de type CDATA est analysé (parsé) par le parseur
Ouais, c'est un choix historique malheureux qui se répercute sur XML.
Le contenu des attributs est parsé lui aussi, pour deux raisons :
- les références d'entité genre < (et donc l'interdiction du & non échappé)
- interdire le < non échappé pour éviter les erreurs avec les outils historiques.
Donc puisque le texte des éléments s'appelle PCDATA, le texte des attributs devrait aussi s'appeler PCDATA, c'est logique.
La différence à la rigueur, c'est que du texte d'éléments peut être mixé avec des éléments enfants, ce qui n'est pas le cas du texte d'attributs.
Mais ils s'appellent pas pareil. C'est comme ça. Faisons avec.
De toute façon les DTDs, c'est pas brillant, pour plein de raisons.
* Note : j'ai dit que le contenu texte est entièrement libre et que les attributs CDATA aussi. Ce n'est pas tout-à-fait vrai.
Certains caractères "de contrôle" comme ceux de 0x0 à 0x8 et de 0xe à 0x1f, sont interdits de séjour en XML. Ils ne sont pas autorisés dans le fichier. Cela rendrait le fichier mal formé. Ni échappés, ni "nature," rien. Ni entre les éléments, ni dans les attributs, ni dans les commentaires, nulle part, ils doivent pas être trouvés dans le fichier. Ils rendent le fichier mal formé, ce n'est pas une question de validation, donc quand on dit "tout est accepté," on passe pas son temps à préciser "sauf ce qui rendrait le document mal formé."
Partager