Gentoo Logo

Renuncia de responsabilidad: La versión original de este artículo fue publicada por IBM developerWorks y es propiedad de Westtech Information Services. Este documento es una versión actualizada del artículo original y contiene mejoras introducidas por el Equipo de Documentación de Gentoo.
Este documento carece de soporte activo.


El rediseño de gentoo.org, Parte 4: El renacimiento de un sitio

Contenido:

1.  El toque final

Un nuevo aspecto, pero...

Al final de artículo anterior, el sitio Web Gentoo Linux tenía un nuevo aspecto completamente diferente, pero todavía hay cosas que no están completas aún. En este artículo, la última entrega de la serie, doy los toques finales al sitio, resultando un sitio basado en XML, refinado, completamente operativo y modular que está preparado para el futuro. A continuación se muestra lo que faltaba en es sitio desde el último artículo.

Finales flojos

En primer lugar, a pesar de que el sitio tenía un aspecto completamente nuevo, solo la parte de la documentación del sitio estaba basada en XML. La páginas principales de las "categorías" están aún en HTML puro y necesitan ser convertidas a una solución XML para hacer las cosas más mantenibles y expandibles.

También, mis desarrolladores han encontrado varios problemas con el HTML puro en sí mismo. El sitio tiene mal aspecto cuando se mira con Netscape 4.77 -- obviamente, esto es un problema. También, hay algunos otros pequeños problemas con la renderización, que aparecen en navegadores modernos, el más molesto de todos es el de una línea negra vertical que no se extiende completamente a lo largo de toda la página, arruinando la ilusión de que el área de contenido principal es dicha por el platillo volante. También, nuestras páginas de documentación no se adaptan al aspecto más refinado de las páginas principales de categorías -- claramente algo merece ser actualizado.

El objetivo

Este es el plan para los trabajos finales en el sitio Gentoo Linux. Primero, reharemos totalmente la página principal HTML, guardando el mismo aspecto global, pero haciendo la página más compatible con los navegadores. Al mismo tiempo, añadiremos algunos refinamientos relacionados con la presentación, sugeridos por nuestros invitados y también corregiremos problemas de compatibilidad con los navegadores en nuestro sistema actual de documentación "guía".

A continuación, moveremos completamente el sitio a XML y XSLT. Al final de este artículo, cualquier cambio en el sitio será realizado modificando XML o XSLT en lugar de editar HTML directamente, el cual será ahora generado automáticamente con la ayuda de xsltproc. Esto hará que todo el sitio sea bastante más fácil de mantener. Ya que Gentoo Linux es un proyecto desarrollado por la comunidad, esto permitirá a nuestros desarrolladores (y a mí) mantener y mejorar el sitio de la forma que sea necesaria. Estoy realmente ilusionado con todo esto, ya que nos ahorrará un montón de tiempo y asegurará que nuestros invitados sean bienvenidos con contenido actualizado.

Aspectos de compatibilidad

Aunque Netscape 4.x es todavía un navegador usado ampliamente, es difícil para mí decidir exactamente cuantos aros hay que saltar para hacer que el sitio tenga mejor aspecto cuando se mire con este navegador. ¿Debo simplemente asegurarme que el sitio es legible? (sin ningún fallo importante) o ¿Debo hacer todo lo que pueda para asegurarme de que el sitio se ve absolutamente perfecto con Netscape 4.x incluso si eso supone usar menos o ningún CSS y añadir ajustes extraños de compatibilidad al HTML existente?.

Al final decidí hacer varios cambios importantes al HTML de modo que el sitio se viera bien con Netscape 4.x sin enfocar demasiado en errores menores relacionados con es espaciado en las tablas o el renderizado de fuentes. A continuación se muestran algunos de los cambios al HTML del sitio para hacerlo del todo compatible con 4.x. (El equipo de desarrollo de Gentoo Linux ha enviado algunas de estas correcciones).

En primer lugar Netscape 4.x tiene un error que hace que los colores de fondo de los bloques de elementos CSS sean mostrados incorrectamente. Por ejemplo, aquí se muestra como una parte en particular de un documento guía debe ser renderizada:


Ilustración 1.1: Un simple documento guía en IE5

Fig. 1

Y ahora, cómo Netscape 4.x renderiza esta misma porción cuando los colores de fondo son especificados usando CSS:


Ilustración 1.2: Un simple documento guía en Netscape 4.7; se necesitan algunas correciones

Fig. 2

Esto queda feo. Para solucionarlo, los elementos de nivel de bloque como este...

Listado de Código 1.1: Párrafo ejemplo

<p class="note">Este párrafo no tiene buen aspecto en 4.x</p>

...fue reemplazado con tablas, de esta forma:

Listado de Código 1.2: Tabla ejemplo

<table width="100%" border="0" cellpadding="0" cellspacing="0">
        <tr>
                <td bgcolor="#ddffff"><p class="note">
                Esto tiene bastante mejor aspecto en 4.x</p></td>
        </tr>
</table>

Este arreglo corrige el problema del renderizado del fondo. Sin embargo, Esta "corrección" también requiere que la información de color sea incluida en el HTML, el cual, en primer lugar, mina los beneficios de usar CSS. Esta es una situación desafortunada, especialmente para los fans de CSS como yo, pero se necesita para la compatibilidad con Netscape 4.x.

Reconstruyendo el HTML

Ahora es el momento de tratar con la línea negra vertical que no siempre se extiende hasta el final de la pantalla. He sido incapaz de encontrar una solución a este problema que funcione tanto en navegadores 4.x como 5.x; cada versión 5.x ha desatado errores en Netscape 4.x, y cada versión compatible 4.x se ve horrible en un navegador 5.x. Por ello, decidí simplemente quitar la linea negra completamente; Finalmente, el sitio funciona en la mayoría de navegadores populares. A continuación crearé una sintaxis parecida a las guías para crear las páginas principales.

Acercándonos a XML

En lugar de implementar un conjunto de etiquetas completamente nuevo para la página principal, creo que sería una buena idea intentar usar la mayor cantidad posible de las etiquetas de documentación "guía" XML (mire la parte 2 de esta serie para más información del formato guía XML). Por ello jugué un poco con nuevos XSL, usando mi formato guía XSL como plantilla para mi trabajo. Después de una hora o dos, tenía un conjunto completamente funcional de transformaciones XSL para convertir una sintaxis del tipo guía en una página principal HTML. La revisión 2 de la nueva página principal tiene este aspecto:


Ilustración 1.3: La nueva revisión de la página principal

Fig. 3

Ahora que la página principal está usando un nuevo soporte XML/XSLT, dirigí mi atención a la salida HTML del sistema "guía". No solo necesité corregir un montón de errores de compatibilidad con Netscape 4.7, sino que también necesité actualizar los gráficos y el HTML generado de forma que se adapten a la nueva página principal revisada. Entonces la idea me llegó: ¿Por qué no simplemente ajusto mi nueva página principal XML/XSL un poquito de forma que pueda también generar HTML para mi documentación?. Después de todo, simplemente he añadido soporte para casi todas las etiquetas "guía" XML, para que también puedan ser usadas para el contenido de la página principal.

Esta solución llegó a ser realmente fácil de implementar. Simplemente ajusté el fichero XSLT para que quitara la "barra de enlaces" de la parte izquierda y realicé algunos otro pequeños cambios a la salida del HTML cuando se procesan las páginas de documentación. Ya que la mayor parte del XSLT sigue siendo el mismo, puedo usar un conjunto maestro único de plantillas tanto para la guía de documentación como para las páginas de categorías:


Ilustración 1.4: Cómo trabaja el nuevo XSL

Fig. 4

No solo tengo ahora un único conjunto de plantillas XSLT que mantener, sino que ahora comparten la misma hoja de estilos CSS, ya que ambas formas de salida HTML están basadas en el mismo documento maestro. Esto significa que no hay necesidad de "sincronizar el aspecto" entre dos conjuntos dispares de plantillas y salida HTML. Y, como puede ver, el nuevo HTML de la documentación tiene un ajuste perfecto para la nueva página principal:


Ilustración 1.5: Las nuevas páginas de documentación se adaptan perfectamente a la nueva página principal

Fig. 5

La implementación XML

La implementación actual es bien fácil; mi actual sintaxis de la guía XML requiere que cada documento sea parte de un único elemento maestro <guide>. Para añadir soporte a las páginas principales de categorías, creé un nuevo elemento maestro: <mainpage>. Para crear una página principal de categoría, coloqué todo dentro de un elemento <mainpage> en lugar de en un elemento <guide>, y el XSLT hace los cambios apropiados a la salida. Aparte de esto, el único cambio importante requerido es añadir un elemento opcional <sidebar> que es usado para especificar los contenidos de la tabla flotante en una página principal de categoría. La plantilla <guide> XSLT existente tiene este aspecto:

Listado de Código 1.3: XSLT template

<xsl:template match="/guide">
        <html>
        <head>
                Aquí va el encabezamiento de la guía
        </head>
        <body>
                La parte superior del contenido del cuerpo HTML de la guía va aquí
<!--ahora, insertamos nuestro contenido-->
                <xsl:apply-templates select="chapter" />
                La parte inferior del contenido del cuerpo HTML de la guía va aquí
        </body>
        </html>
</xsl:template>

Si no está muy familiarizado con XSLT, esta plantilla le dice a un procesador XSLT que reemplace las etiquetas <guide> </guide> con el armazón de un documento HTML, así como que aplique recursivamente las plantillas a cualquier elemento <chapter> (abriendo/cerrando pares de etiquetas) dentro del elemento <guide> e insertando la salida resultante en medio del armazón HTML.

Por ello, para añadir soporte a las páginas principales de categorías, necesito especificar que un armazón HTML diferente debería ser usado si todo está encerrado en un único elemento <mainpage>. Para hacer esto, añado una nueva plantilla como sigue:

Listado de Código 1.4: La nueva plantilla

<xsl:template match="/mainpage">
        <html>
        <head>
                El encabezamiento de mainpage va aquí
        </head>
        <body>
                La parte superior del contenido del cuerpo HTML de la guía va aquí
<!--ahora, insertamos nuestro contenido-->
                <xsl:apply-templates select="chapter" />
                La parte inferior del contenido del cuerpo HTML de la guía va aquí
        </body>
        </html>
</xsl:template>

Ya que casi cada uno de los otros elementos XML (desde <chapter> en adelante) produce salida HTML idéntica tanto para la guía como para las páginas de categorías, casi cada una de las plantillas XSLT puede ser compartida por ambos tipos de páginas. Así, podemos continuar de forma correcta con un único fichero que especifique los dos "armazones HTML" y un conjunto común de plantillas XSLT de XML a HTML. Como siempre la reutilización de código es definitivamente algo bueno.

La página Changelog

Recordará de la parte 2 de esta seria que mencioné que el guión de generación CVS Changelog cvs2cl.pl produce salida XML y que quería usar eventualmente esta característica como base para una página CVS Changelog diaria que aparecería en el nuevo sito Web. Ahora, con este nuevo soporte XML en su lugar, añadiendo la nueva página Changelog era muy fácil. Aquí se muestra una versión mejorada de el guión cvslog.sh que también tiene en cuenta el manejo de la conversión XML-a-HTML:

Listado de Código 1.5: Versión mejorada del scrtip cvslog.sh

#!/bin/bash
#various paths
HOMEDIR=/home/drobbins
CVSDIR=${HOMEDIR}/gentoo/gentoo-x86
OUTLOG=${HOMEDIR}/gentoo/xmlcvslog.txt
OUTMAIL=${HOMEDIR}/gentoo/cvslog.txt
WEBDIR=/usr/local/httpd/htdocs
XSLTP=/opt/gnome/bin/xsltproc
TMPFILE=${HOMEDIR}/gentoo/xmlcvslog.tmp
USER=drobbins
#if $CVSMAIL is undefined, set it to "yes"
if [ -z "$CVSMAIL" ]
then
        export CVSMAIL="yes"
fi
#the main script
cd $CVSDIR
cvs -q update -dP
yesterday=`date -d "1 day ago 00:00" -R`
today=`date -d "00:00" -R`
cvsdate=-d\'${yesterday}\<${today}\'
nicedate=`date -d yesterday +"%d %b %Y %Z (%z)"`
#generate cvs2cl.pl XML output
/usr/bin/cvs2cl.pl --xml -f $OUTLOG -l "${cvsdate}"
#use sed to remove "xmlns=" from cvs2cl.pl output
/usr/bin/sed -e 's/xmlns=".*"//' $OUTLOG > ${OUTLOG}.2
#convert cvs2cl.pl XML output to guide format using $XLSTP
$XSLTP ${WEBDIR}/xsl/cvs.xsl ${OUTLOG}.2 > $TMPFILE
#convert guide XML output to HTML format using $XLSTP
$XSLTP ${WEBDIR}/xsl/guide-main.xsl
$TMPFILE > ${WEBDIR}/index-changelog.html
#fix perms
chmod 0644 ${WEBDIR}/index-changelog.html
#automatically send cvs mail if $CVSMAIL is set to "yes"
if [ "$CVSMAIL" = "yes" ]
then
        /usr/bin/cvs2cl.pl -f ${OUTMAIL} -l "${cvsdate}"
        mutt -x gentoo-cvs -s "cvs log for $nicedate" > ${OUTMAIL}
fi

Aunque este guión pueda parecer significativamente más complicado que la versión anterior, realmente solo contiene cuatro o cinco lineas clave adicionales; el resto de las adiciones son bien comentarios, bien definiciones de variables de entorno.

Ahora explicaré cómo las nuevas partes relacionadas con XML del guión cvslog.sh funcionan. Primero, llamamos a cvs2cl.pl y le indicamos que genere un Changelog basado en XML conteniendo todos los ficheros que fueron modificados ayer. Entonces, esta salida XML es ejecutada a través de sed para eliminar cualquier atributo xmlns= innecesario del XML. A continuación, le entregamos este XML ligeramente tocado a xsltproc y le decimos que aplique el procesamiento que se encuentra en cvs.xsl; estas instrucciones transforman la salida XML de cvs2cl.pl en un documento guía XML apropiado. Finalmente, usamos de nuevo xsltproc para convertir este documento guía XML en un HTML preparado para la Web, el cual es inyectado en el directorio htdocs de nuestro servidor Web. La página HTML Changelog generada está completa y este es el resultado:


Ilustración 1.6: La página Changelog automáticamente generada

Fig. 6

Se sorprendería de la simplicidad del XSLT contenido en cvs.xsl. En él, especificamos tres plantillas para <changelog>, <entry>, y <file>. También hacemos referencia a unas pocas etiquetas en el fuente XML, incluyendo <date>, <author> y <msg> (los cuales usa cvs2cl.pl para especificar los comentarios del autor del commit en CVS). cvs.xsl hace bastante, considerando que tiene alrededor de 35 líneas de código:

Listado de Código 1.6: El cvs.xsl

<?xml version='1.0' encoding="iso-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output encoding="iso-8859-1" method="xml" indent="yes"/>
<xsl:template match="/changelog">
        <mainpage id="changelog">
        <title>Gentoo Linux Development Changelog for <xsl:value-of select="entry/date"/></title>
        <author title="script">cvs-xml.xsl</author>
        <standout>
                <title>About the Development Changelog</title>
                <body>
                        This page contains a daily Changelog, listing all modifications made to our
                        CVS tree on <xsl:value-of select="entry/date"/> (yesterday).
                </body>
        </standout>
        <version>1.0.0</version>
        <date><xsl:value-of select="entry/date"/></date>
        <chapter>
                <xsl:apply-templates select="entry"/>
        </chapter>
        </mainpage>
</xsl:template>
<xsl:template match="entry">
        <section>
                <title>Files modified by <xsl:value-of select="author"/> at
                                        <xsl:value-of select="time"/>
                </title>
                <body>
                        <note><xsl:value-of select="msg"/></note>
                        <ul>
                                <xsl:apply-templates select="file"/>
                        </ul>
                </body>
        </section>
</xsl:template>
<xsl:template match="file">
        <li><path><xsl:value-of select="name"/></path>, <xsl:value-of select="revision"/></li>
</xsl:template>
</xsl:stylesheet>

¡Proyecto completo!

Desde los comienzos del rediseño del sitio Web Gentoo Linux, hemos creado un plan centrado en el usuario, diseñado un nuevo sistema de documentación basado en XML, un nuevo logo, un nuevo aspecto para el sitio, convertido las partes restantes a XML y añadido una nueva página Changelog basada en XML ¡Uau! Espero que haya disfrutado siguiendo mi progreso y que haya encontrado un abanico de ideas e inspiración a lo largo del camino. He recibido algunas peticiones de más información y código relacionado con el rediseño, por lo que he preparado una página especial Proyectos XML de Gentoo Linux que contiene el más reciente XML, XSLT, guiones y documentación usada para www.gentoo.org. Además de visitar la página de Proyectos, asegúrese de echar un vistazo a los valiosos recursos listados abajo.

2.  Recursos

  • Compruebe la página de proyectos XML de Gentoo Linux si está interesado en usar el sistema guide XML de Gentoo Linux como base para sus propios proyectos. Ahí se puede encontrar lo último en materia XML/XSLT.
  • Lea los otros artículos de esta serie de developerWorks sobre el rediseño del sitio Web www.gentoo.org usando tecnologías como XML, XSLT, y Python:
    • En la Parte 1, el autor crea un plan centrado en el usuario y presenta pytext, un intérprete incrustado de Python (Marzo 2001).
    • En la Parte 2, Daniel nos muestra el nuevo sistema de documentación y pone en marcha una lista de correo diaria CVS-log (Mayo 2001).
    • En la Parte 3, crea un nuevo aspecto para el sitio (Julio 2001).
  • Aprenda más acerca de las hojas de estilo en cascada (CSS) visitando la página CSS en el Consorcio de la World Wide Web o W3C. Puede encontrar más sobre XML, XSLT y muchas más tecnologías igualmente.
  • Eche un vistazo a Xara.com, el lugar de Xara X -- un excelente paquete de dibujo vectorial para Windows. Sin apenas grandes pretensiones y una velocidad impresionante, obtiene mi recomendación personal.
  • Aprenda incluso más sober XSLT en http://www.xslt.com
  • Cuando despierte, pruebe Sablotron, un procesador XSLT bueno y rápido disponible en http://www.gingerall.com


Imprimir

Página actualizada 10 de octubre, 2005

Sumario: ¿Se ha levantado alguna vez por la mañana y de repente se ha dado cuenta de que su pequeño y cuco sitio Web personal de desarrollo no es realmente tan bueno?. En este caso, está en buena compañía. En esta serie, Daniel Robbins comparte sus experiencias surgidas mientras rediseñaba el sitio www.gentoo.org usando tecnologías como XML, XSLT y Python. En este artículo: Daniel completa la conversión a XML/XSLT, corrige un montón de errores en la compatibilidad del navegador Netscape 4.x y añade un registro de cambios (Changelog) al sitio.

Daniel Robbins
Autor

José María Alonso
Traductor

Donate to support our development efforts.

Copyright 2001-2014 Gentoo Foundation, Inc. Questions, Comments? Contact us.