Tip – Trick – XSLT -XPATH – Replace String

Diciembre 5, 2009

Si queremos reemplazar el carácter de salto de linea por un tag html “BR” de un texto podemos emplear el siguiente template, el parser xsl reconocerá el salto de linea como ‘
’

    <xsl:template name="break">
        <xsl:param name="text"/>
        <xsl:choose>
            <xsl:when test="contains($text, '&#xA;')">
                <xsl:value-of select="substring-before($text, '&#xA;')"/>
                <br/>
                <xsl:call-template name="break">
                    <xsl:with-param name="text" select="substring-after($text, '&#xA;')"/>
                </xsl:call-template>
            </xsl:when>
            <xsl:otherwise>
                <xsl:value-of select="$text"/>
            </xsl:otherwise>
        </xsl:choose>
    </xsl:template>

Nota:

    '&#xA;'   nueva linea
    '&#x9;'   TAB
    '&#xD;'   retorno de carro

Si lo que necesitamos es un template buscar y reemplazar una cadena de texto por otra cadena de texto, podemos utilizar el siguiente:

    <xsl:template name="string-replace-all">
        <xsl:param name="text"/>
        <xsl:param name="replace"/>
        <xsl:param name="by"/>
        <xsl:choose>
            <xsl:when test="contains($text, $replace)">
                <xsl:value-of select="substring-before($text,$replace)"/>
                <xsl:value-of select="$by"/>
                <xsl:call-template name="string-replace-all">
                    <xsl:with-param name="text" select="substring-after($text,$replace)"/>
                    <xsl:with-param name="replace" select="$replace"/>
                    <xsl:with-param name="by" select="$by"/>
                </xsl:call-template>
            </xsl:when>
            <xsl:otherwise>
                <xsl:value-of select="$text"/>
            </xsl:otherwise>
        </xsl:choose>
    </xsl:template>

Por ejemplo, sea nuestro xml:

<?xml version="1.0"?>
<pagina>
    <texto>El primer parrafo.El segundo parrafo.El tercer parrafo.</texto>
</pagina>

Y para invocar el template podriamos citar el siguiente ejemplo para reemplazar la palabra “parrafo” por “guion”:

<xsl:call-template name="string-replace-all">
    <xsl:with-param name="text" select="pagina/texto"/>
    <xsl:with-param name="replace" select="'parrafo'"/>
    <xsl:with-param name="by" select="'guion'"/>
</xsl:call-template>

Si lo que necesitamos es un template buscar y reemplazar una cadena de texto por un elemento html (por ejemplo: BR, SPAN, etc.), podemos utilizar el siguiente:

    <xsl:template name="string-replace-all-by-element">
        <xsl:param name="text"/>
        <xsl:param name="replace"/>
        <xsl:param name="by"/>
        <xsl:choose>
            <xsl:when test="contains($text, $replace)">
                <xsl:value-of select="substring-before($text,$replace)"/>
                <xsl:copy-of select="$by"/>
                <xsl:call-template name="string-replace-all">
                    <xsl:with-param name="text" select="substring-after($text,$replace)"/>
                    <xsl:with-param name="replace" select="$replace"/>
                    <xsl:with-param name="by">
                        <xsl:copy-of select="$by"/>
                    </xsl:with-param>
                </xsl:call-template>
            </xsl:when>
            <xsl:otherwise>
                <xsl:value-of select="$text"/>
            </xsl:otherwise>
        </xsl:choose>
    </xsl:template>

Por ejemplo, sea nuestro xml:

<?xml version="1.0"?>
<pagina>
    <texto>El primer parrafo.-El segundo parrafo.-El tercer parrafo.--Final.</texto>
</pagina>

Y para invocar el template podriamos citar el siguiente ejemplo para reemplazar los guiones por elementos html “BR”:

<xsl:call-template name="string-replace-all-by-element">
    <xsl:with-param name="text" select="pagina/texto"/>
    <xsl:with-param name="replace" select="'-'"/>
    <xsl:with-param name="by">
        <xsl:element name="br"></xsl:element>
    </xsl:with-param>
</xsl:call-template>

Estos ejemplos son para la XPATH 1.0, pero para la XPATH 2.0 ya tiene la funcion nativa replace con la cual no necesitas del template, la forma de invocarla seria tan sencilla como esto:

    <xsl:value-of select="replace(pagina/texto,'parrafo','guion')"/>

Mas info:

XQuery 1.0 y XPath 2.0 operadores y funciones
http://www.w3.org/TR/xpath-functions/

Sintaxis XML canonico
http://www.w3.org/TR/2000/WD-xml-c14n-20000119.html


Oracle – PL/SQL – Paginación de registros de una consulta

Noviembre 26, 2009

Sea la consulta:

SELECT primera_columna, segunda_columna
  FROM mi_tabla

Si queremos recuperar los registros que se encuentran entre las filas n_start_row y n_end_row, nuestra consulta seria:

        SELECT *
          FROM ( SELECT A.*, ROWNUM row_number
                   FROM (
                        SELECT primera_columna, segunda_columna
                        FROM mi_tabla
                    ) A
                  WHERE ROWNUM <= n_end_row
            )
        WHERE row_number >= n_start_row;

Ahora si queremos paginar, primero tendriamos que saber cuantos registros recupera nuestra consulta (n_row_count) y definir el número de registros por cada página (n_page_size). Por ejemplo:

DECLARE
    CURSOR c_row_count
    IS
        SELECT count(1)
        FROM (
            SELECT primera_columna, segunda_columna
            FROM mi_tabla
        );
    --
    n_page_size   NUMBER(2) := 10;
    n_row_count   c_row_count%ROWTYPE;
BEGIN
    OPEN c_row_count;
    FETCH c_row_count INTO n_row_count;
    CLOSE c_row_count;
    --
    -- Pintamos los números de las páginas
    --
    IF n_row_count > n_page_size
    THEN
        FOR x IN 1..CEIL(n_row_count/n_page_size)
        LOOP
            dbms_output.put_line('n_page_number: ' || x);
        END LOOP;
    END IF;
END;
/

Asumiendo que el número de la pagina sea n_page_number y el número de registros por página sea n_page_size.

        SELECT *
          FROM ( SELECT A.*, ROWNUM row_number
                   FROM (
                        SELECT primera_columna, segunda_columna
                        FROM mi_tabla
                    ) A
                  WHERE ROWNUM < ((n_page_number * n_page_size) + 1 )
            )
        WHERE row_number >= (((n_page_number-1) * n_page_size) + 1);

Libro Scrum Manager – Gestión de Proyectos

Noviembre 26, 2009

Esta disponible el libro de texto para el área de gestión de proyecto en la plataforma de conocimento abierto de Scrum Manager. Ofrece en la segunda parte un conocimiento general y completo de las prácticas ágiles de Scrum para la gestión de proyectos, después de haberles dado un marco de situación la primera parte del libro para ayuda a comprender la razón, fortalezas, debilidades e idoneidad de la gestión clásica y la gestión ágil,  y establecer el contrapunto de ésta última con las prácticas, modelos y gestión de proyectos tradicional.

Se puede descargar  gratuitamente, o colaborar con su compra en el desarrollo de la plataforma Open Knowledge Scrum Manager.

Descargar:
http://www.scrummanager.net/files/sm_proyecto.pdf

Original:
http://www.navegapolis.net/content/view/937/61/

Via:
http://www.bizzit.es/blog/?p=2828


Recuperar un número limitado de registros en una consulta

Noviembre 26, 2009

Aparte de las cláusulas especificas de cada base de datos, la clave esta en utilizar ORDER BY ASC (ordenación de menor a mayor) para los primeros resultados y ORDER BY DESC (ordenación de mayor a menor) para los últimos resultados de la consulta.

Sea la consulta:

select primera_columna,
       segunda_columna
  from mitabla

En los ejemplos estamos recuperando los últimos 10 resultados de la consulta.

Para MS SQL Server ó MS Access, utiliza la cláusula TOP:

select TOP 10
       primera_columna,
       segunda_columna
  from mitabla
 order
    by primera_columna desc

Para MySQL ó PostgreSQL, utiliza la cláusula LIMIT:

select primera_columna,
       segunda_columna
  from mitabla
 order
    by primera_columna desc
 limit 10

Para Oracle, utiliza la cláusula ROWNUM:

select *
  from ( select primera_columna,
                segunda_columna
           from mitabla
          order
             by primera_columna desc )
 where rownum <= 10

Para DB2, utiliza la cláusula FETCH FIRST:

select primera_columna,
       segunda_columna
  from mitabla
 order
    by primera_columna descending
fetch first 10 rows only

Adobe BrowserLab – Disponible – Aceptando nuevos usuarios

Agosto 13, 2009

Ya se puede probar el Adobe BrowserLab, y la verdad que promete ser una herramienta muy útil a la par de sencilla para visualizar páginas web y comprobar el motor de renderizado de diferentes navegadores y sistemas operativos.

adobe_browserlab_test_edusanver

Via:

http://edusanver.wordpress.com/2009/06/15/adobe-browserlab-prueba-online-el-diseno-de-tus-webs-en-los-navegadores-mas-populares/