From madore@news.ens.fr
Path: eleves!not-for-mail
From: madore@news.ens.fr (GroTeXdieck)
Newsgroups: ens.forum.divers.www
Subject: Re: Des commentaires et du CSS (Was: Re: www.eleves.ens.fr:8080)
Date: 8 Sep 1999 22:04:29 GMT
Lines: 120
Sender: madore@clipper.ens.fr
Message-ID: <7r6mhd$51f$1@clipper.ens.fr>
References: <7qj8ru$d7b$3@clipper.ens.fr> <7qr8fu$ol8$1@clipper.ens.fr> <7qrqiv$7fi$2@clipper.ens.fr> <7quljh$8cm$1@clipper.ens.fr> <7qv3in$hb5$1@clipper.ens.fr> <7r6cko$nul$1@clipper.ens.fr>
NNTP-Posting-Host: clipper.ens.fr
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
X-Trace: clipper.ens.fr 936828269 5167 129.199.129.1 (8 Sep 1999 22:04:29 GMT)
X-Complaints-To: forum@clipper.ens.fr
NNTP-Posting-Date: 8 Sep 1999 22:04:29 GMT
X-Newsreader: Flrn (0.4.0 - 07/99)
X-Number-Of-The-Day: 100 
Xref: eleves ens.forum.divers.www:203

Oui, oui, je conviens que tu as raison, mais il n'empêche que je
trouve ça excessivement stupide et obscur.

Je prends un exemple :

<!DOCTYPE -- hey, what do you think? -- HTML PUBLIC
"-//W3C//DTD HTML 4.0//EN">
<title>A <!-- really -->stupid example</title>
<style type="strange"><! -- Honestly, folks,
do you >>>really<<< believe this? -- ></style><!-- 'cos I don't -->
<p>Foo!<!      -- Yo!  In a former life I was an SGML PARSER! --       >

nsgmls -c/usr/local/share/sgml/dtd/W3C/HTML4.cat test.html | grep -v '^A'

me donne

nsgmls:/usr/local/share/sgml/dtd/W3C/HTML4.decl:23:32:W: characters in the document character set with numbers exceeding 65535 not supported
(HTML
(HEAD
(TITLE
-A stupid example
)TITLE
(STYLE
-<! -- Honestly, folks,\ndo you >>>really<<< believe this? -- >
)STYLE
)HEAD
(BODY
(P
-Foo!<!      -- Yo!  In a former life I was an SGML PARSER! --       >
)P
)BODY
)HTML
C

autrement dit, il y a des endroits (STYLE, P) où les commentaires sont
ignorés et d'autres (TITLE, HEAD, ou en-dehors de tout markup) où ils
ne le sont pas.  Dans la DTD, je vois que STYLE est déclaré comme
contenant du CDATA (en fait %StyleSheet; qui est à son tour définir à
CDATA) alors que P contient %inline; qui est compliqué mais qui
contient essentiellement du PCDATA.  Quant au TITLE, il contient du
PCDATA.  Dans ces circonstances, je ne vois pas trop ce qui fait que
les commentaires sont ignorés dans TITLE mais pas dans STYLE et P.

Il y a pire : si je rajoute un SGML après le <! de la 4e ligne, soit

<!DOCTYPE -- hey, what do you think? -- HTML PUBLIC
"-//W3C//DTD HTML 4.0//EN">
<title>A <!-- really -->stupid example</title>
<style type="strange"><!SGML -- Honestly, folks,
do you >>>really<<< believe this? -- ></style><!-- 'cos I don't -->
<p>Foo!<!      -- Yo!  In a former life I was an SGML PARSER! --       >

alors il n'y a pas d'erreur : le truc n'est pas lu comme une
déclaration ni comme un commentaire mais comme des CDATA.  Alors que
c'en est une (erreur) si je le mets à la dernière ligne.  Donc, <p> et
<style> ce n'est pas du tout le même combat.

Ça doit être le CDATA.  D'ailleurs, si j'écris :

<!DOCTYPE -- hey, what do >you< think? -- HTML PUBLIC
"-//W3C//DTD HTML 4.0//EN">
<title>A <! -- really >< -->stupid example</title>
<style type="strange"></ <!SGML -- Honestly, folks,
do you >>>really<<< believe this? -- ></style><!-- 'cos I don't -->
<p>Foo!<! -- Yo!  In a >former< life I was an SGML PARSER! --       >

(j'en ai profité pour rajouter quelques commentaires pénibles dans les
commentaires pour vérifier leur caractère innoffensif ; notez bien le
</ à la 4e ligne), eh bien ce document est *toujours* du HTML valable
d'après le parseur SGML, et le </ est passé tranquillement comme
donnée caractère.  Mais si je mets </x à la place, là, pour le coup,
c'est une erreur.

Bref, on dirait bien qu'on peut mettre n'importe entre <style> et
</style>, sauf « </quelquechose », et le tout sera traité comme des
données caractères pures.  Berk, berk, berk.

Le seul cas où le comportement me paraît clair (je ne dis pas
satisfaisant, je dis clair) c'est dans une vraie section CDATA,
ouverte par <![CDATA[ et fermée par ]]> (crochet fermé, crochet fermé,
supérieur.  Par exemple, ce qui suit est du SGML parfaitement bien
formé, ainsi que du XML valide :

<!DOCTYPE david [
  <!ELEMENT david ANY>
  <!ENTITY lt "&#38;#60;">
  <!ENTITY gt "&#62;">
  <!ENTITY amp "&#38;#38;">
  <!ENTITY apos "&#39;">
  <!ENTITY quot "&#34;">
]>
<david>
<![CDATA[>>>FOOBAR<<<!!!?&;&toto!!!&j'ames<>><<<[[[]]]]]]]]FOO!"]]>
</david>

et il revient exactement au même que :

<!DOCTYPE david [
  <!ELEMENT david ANY>
  <!ENTITY lt "&#38;#60;">
  <!ENTITY gt "&#62;">
  <!ENTITY amp "&#38;#38;">
  <!ENTITY apos "&#39;">
  <!ENTITY quot "&#34;">
]>
<david>
&gt;&gt;&gt;FOOBAR&lt;&lt;&lt;!!!?&amp;;&amp;toto!!!&amp;j&apos;ames&lt;&gt;&gt;&lt;&lt;&lt;[[[]]]]]]]]FOO!&quot;
</david>

comme on le verra en lançant par exemple le programme nsgmls (sans
option) sur l'un et l'autre exemple.

Bref, les sections CDATA ont un comportement très spécial (et à mon
avis du même ordre de grandeur de grotesquitude que le \end{verbatim}
du LaTeX).  Il semble que le <style> (ou tout markup déclaré comme
ayant contenu CDATA) soit semblable.

Heureusement, CDATA a été viré du XML.  Pas les *sections* CDATA
malheureusement.  À la place, il y a PCDATA qui est quand même plus
limpide.

