18
Ago

Usando ‘ ’ en XHTML

XHTML, ese lenguaje

Todos los que hemos trabajado con páginas y aplicaciones web conocemos la entidad   o, al menos, creemos conocerla… Pero, sorprendentemente, la mayoría de nosotros no sabemos qué es exactamente y eso hace que aparezcan problemas en la transición desde HTML hacia XTHML.

¿Queréis enteraros de qué es eso de   en apenas cinco minutos, mientras leéis una apasionante historia de intriga y misterio? Entonces, no lo dudéis y seguid leyendo…

EL MISTERIO DE LA JSPX DESESTRUCTURADA

Hace poco que empecé a sacar algo de tiempo libre para aportar al desarrollo  puro y duro de STORETTO. Al instalar el entorno de trabajo en Eclipse,  casi me caigo de la silla golpeado por un error rojo y horrible que señalaba a una JSPX traidora y maligna donde, según el IDE, había errores en la estructura del XML, la etiqueta de cerrado ‘</h:form>‘ no se correspondía con ninguna etiqueta de apertura.

Cuando les pregunté a los desarrolladores por qué daba el error, me dijeron que era un error de Eclipse porque la estructura XML de la página estaba bien, funcionaba y la famosa etiqueta ‘ </h:form>‘ tenía su correspondiente etiqueta de apertura.

¡Tenían razón! Entonces… ¿Qué estaba ocurriendo? ¿Qué era lo que estaba rompiendo el Chi del Eclipse? Era un claro caso para Bonilla Holmes…

LO MALO DE UN ECLIPSE, ES QUE NO TE DEJA VER

Cuando oficialmente eres Jefe de Equipo, Project Manager o Code Leader, te puedes permitir ciertas licencias, como pararte a ver porqué algo falla aunque el error no sea crítico, que casi compensa el horrible título con el que definen tu puesto.

Así que me enfrenté al error con valentía y decisión. Era evidente que el el Eclipse fallaba a la hora de analizar la estructura de la página, la pregunta era: ¿Por qué?.

Al principio pensé que era por un código comentado que incluía la etiqueta en cuestión, pero lo borré y el error seguía. La cosa se ponía difícil, pero, entonces, observé un montón de errorcillos (perdonad por mi léxico, no soy un experto en Eclipse, yo soy más de IDEA) provocados por el uso de la extraña combinación de caracteres ‘&amp;amp;nbsp;‘.

¿Para qué diantres estábamos escapando el carácter & para, a su vez, escapar el carácter espacio? No tenía sentido. Cuando lo cambié a &amp;nbsp; sin más, el error de estructura en Eclipse dejó de aparecer, pero la página daba un error al cargarse. No un error de maquetación, sino en la compilación en servidor.

Raro, raro, raro…

Cuando volví a preguntar a los desarrolladores si tenían idea alguna de por qué podía fallar la carga de la página web, me dijeron que no tenían ni idea pero que, por algún motivo, JSF -el framework que utilizamos- no se comía directamente el &amp;nbsp; y, por eso, teníamos que escapar el carácter & utilizando &amp;amp;.

HTML en estado puroELEMENTAL, QUERIDO WATSON

No tenía sentido. Una cosa es que al tocar la página web descoyuntara la maquetación y otra cosa es que  rompiera el código del servidor. No comprendía muy bien qué tenía que ver JSF con los caracteres de escape del código HTML, así que le pedí al tío que más sabe de JSF a este lado del Pecos, César Vivero, que mirara conmigo las trazas de servidor.

No nos hizo falta más de 10 segundos para localizar el error -”The entity “nbsp” was referenced, but not declared.“- e, inmediatamente, mi mente de viejo rockero sufrió un espectacular flashback peliculero cuando recordé que había tenido el mismo problema al trabajar con hojas de estilo XSLT que producían HTML.

Miré a mi compañero y le dije “Lo tenemos César. Ya sé quién mató a Laura Palmer“.

EL HTML NO ES XML, Y XHTML TAMPOCO

El error en servidor no lo daba el uso de JSF en sí, sino el validador del XML de la página web. Sí, amigos, porque nuestras páginas son JSPX, lo cual quiere decir que utilizan XML y XHTML como lenguaje de marcas, no HTML… y ahí estaba el problema.

&amp;nbsp; es una entidad usada para representar el carácter espacio en HTML, pero no en XML. Aunque a veces se nos olvide y haya cierta confusión al respecto porque algunas de las entidades, como la utilizada para representar el carácter ‘&‘ -&amp;amp;- sean idénticas, las entidades de caracteres en XML y HTML no son iguales.

Así, lo que está cantando el validador de XML es, traducido al cristiano, “no sé qué me estás contando, brother“. Y eso es así porque &amp;nbsp; para XML no es absolutamente NADA. El carácter espacio en XML es &amp;nbsp; o, lo que es lo mismo, el carácter 160 de UNICODE.

Este error trivial es relativamente normal ya que, muchas veces, los desarrolladores trabajan directamente con una maqueta en HTML proporcionada directamente por un diseñador y la adaptan al lenguaje de plantillas correspondiente para que en java acabe siendo una JSP -con HTML incrustado- o una JSPX con XHTML.

UNA SOLUCIÓN QUIERO…

Para poder solucionar este problema tenemos dos posibilidades:

1. Utilizar el DOCTYPE al comienzo de nuestra página XHTML para que identifique la entidad &amp;nbsp; tal y como se especifica en este enlace:

Por ejemplo, para una página XHTML cuyo nodo raíz es jsp:root, escribiríamos:

<!DOCTYPE jsp:root [
<!ENTITY nbsp "&amp;nbsp;">
]>

2. Haciendo una sustitución masiva de la entidad &amp;nbsp; por la entidad &amp;#160 que sí es una entidad reconocida en XML.

Lo que nunca descubrimos fue por qué Eclipse se volvía loco, pero el chi de los programadores ahora descansa tranquilo porque la pestaña de avisos y errores ya no muestra ninguna inquietante aspa roja. El misterio de la JSPX desestructurada había sido resuelto.



free blog themes
free blog themes