XSL para mi RSS
Siguiendo una idea de Mark Pilgrim, he añadido una hoja de estilo XSL al feed RSS del sitio. Si siguen el vínculo al final del menú que dice ‘rss 2.0’ verán una página más o menos decente, en vez del montón de XML que salía antes. El resto de este artículo explica los detalles técnicos.
Antes de explicar la implementación, explico el por que de la idea. Básicamente, se trata de usabilidad. Se supone que RSS debe facilitar a todo el mundo suscribirse a las actualizaciones de un sitio. Pero, ¿Qué pasa cuando un usuario no técnico sigue el vínculo? En su pantalla le sale un montón de XML, lleno de etiquetas raras. ¿Cómo se supone que va a saber que si le da ese vínculo a un lector de RSS se va a suscribir al sitio?
La solución propuesta es esta: Añadimos una hoja de estilo al RSS. Los lectores normales de RSS la ignoran, puesto que la hoja se añade por medio de una “instrucción de procesamiento” XML y las especificaciones de XML dicen que un procesador debe ignorar aquellas instrucciones que no conozca. Así, el uso normal del RSS no se ve afectado de ningún modo.
¿Y cuando ven el RSS en un navegador? La instrucción de procesamiento que usamos indica al navegador que descargue una hoja de estilo y la aplique al documento XML. Usando esa hoja de estilo transformamos el RSS en (X)HTML, que el navegador muestra como de costumbre. El HTML generado permite mostrar un aspecto más amigable al usuario, así como añadir algunas explicaciones respecto al uso del vínculo.
Pongamonos técnicos. El primer paso es añadir en el RSS la instrucción para que el navegador busque la hoja de estilo. Para eso debemos añadir, justo despues de la declaración XML, la siguiente línea:
< ?xml-stylesheet href="xsl.php" type="text/xsl"?>
dónde href debe ser la URL (relativa, si quieren) de la hoja de estilo. Eso es todo lo que hay que hacer en el RSS.
El siguiente paso es hacer la hoja de estilo en sí. Para esta implementación, lo que escribí es un script PHP que genera la hoja de estilo. Eso lo hice para poder incluir en el HTML generado contenido dinámico de WordPress. Por ejemplo la URL de la hoja CSS que se va a aplicar al HTML, así como la barra lateral con los menús. Un pequeño detalle es que el contenido de los resúmenes en el RSS viene códificado como entidades XML. Para resolver esto escribí un poco de JavaScript que corre una vez que se genera el HTML y decodifica las entidades.
¿Que dónde lo ven funcionando? Visiten el vínculo para el RSS de esta página.
Luego usen la función de ver el código fuente de su navegador. La versión actual funciona por lo menos en Mozilla y en Internet Explorer pero no en Opera. El javascript para decodificar entidades no funciona en IE, si alguien sabe como arreglarlo le agradeceré su ayuda.
La hoja de estilo y el javascript están disponibles bajo la GPL.