veamoslo de otra forma, a ver si te ayuda a entender mejor. un browser (navegador) tiene varias mini aplicaciones, como prácticamente cualquier otro programa. entre las aplicaciones que tiene, están: el parser html, parser xhtml, intérprete javascript, parser css. cuando el navegador carga el documento, dependiendo de su tipo, se activa uno u otro parser. entonces, partiendo del código anterior...
¿qué sucede cuando el documento es
html? recordando que en html no existe CDATA Section.
- primero el parser html analiza el código html.
- segundo, cuando llega a SCRIPT, el parser html considera como contenido literal lo que hay dentro de SCRIPT. es decir, lo trata tal cual lo lee, sin ningún significado especial. he aquí por qué:
Código:
<!-- DTD HTML 4.01 Strict -->
<!ELEMENT SCRIPT - - %Script; -- script statements -->
<!ENTITY % Script "CDATA" -- script expression -->
el HTML DTD dice que el contenido de SCRIPT es un CDATA. no confundir con CDATA Section (1). - el parser pasa el control al intérprete javascript. javascript lo que ve es esto:
Código:
//<![CDATA[
document.write("<");
//]]>
si no tuviera los comentarios //, entonces javascript entendería que <![CDATA y ]]> son código javascript el cual debe interpretar. - resumiendo, en este caso el utilizar los símbolos especiales de html (<, >, &) no supone un problema porque el contenido de SCRIPT esta definido como CDATA en el DTD. además, html no interpreta CDATA Section. por lo que carece de sentido incluirlo si vas a servir el documento como HTML.
¿qué sucede cuando el documento es
xhtml?
sucede básicamente lo mismo que en html. la diferencia es (además de ser el parser xhtm) cuando el parser xhtml lee el contenido de SCRIPT, toma en consideración aquellos caracteres que son especiales para el parser. o sea, donde quiera que encuentre los caracteres <, >, & lo intentará analizar como si fuera código xhtml porque el tipo de contenido definido en el DTD es PCDATA.
Código:
<!--- DTD XHTML 1.0 Strict -->
<!ELEMENT script (#PCDATA)>
en este caso, CDATA Section hay que utilizarlo si quieres validar correctamente el documento. también habría que incluir los comentarios ( // ) antes de
<![CDATA[ y
]]> porque sino sucedería lo mismo que en html; el intérprete javascript leería dichas líneas como código javascript.
(1) CDATA y CDATA Section hacen la misma función. la diferencia es que con CDATA Section tu declaras un área como CDATA en el documento. CDATA es un nombre genérico que se utiliza mayormente en al descripción o definición de algo. por ejemplo, en un DTD.