Equipos Programas Media Internet Telecomunicaciones Seguridad Base de Datos Programación Calidad Desarrollo Empresa

XML Metodología

Tabla de Contenido

  1. XML Procesos
    1. ¿Como pasar una página HTML a XML?
    2. ¿Como pasar una página XML a HTML?
    3. ¿Como hacer un enlace en XML?
    4. ¿Como poner imágenes en XML?
    5. ¿Como dejar un espacio en blanco entre dos elementos XML?
    6. ¿Como hacer referencia a datos XML desde un XML?
    7. Ejemplo: Web de TIC
  2. XML Procesos Isla de Datos
    1. Islas de datos XML y XSL
    2. Isla de datos XML y proceso XSLT en Servidor
    3. Isla de datos XML y proceso XSLT en cliente
  3. XSLT Procesos
    1. Clases en el Servidor
    2. Clases en el Cliente
  4. LenguajeFuncional
    1. Recursion
    2. Ejemplo de recursion
    3. Ejemplo de recursion segmentada
    4. Paramétro en recursión sacar de pila
  5. Errores
    1. No se puede eliminar el archivo resultado

Contenido

  • XML Procesos

    • ¿Como pasar una página HTML a XML?

      Convertir un documento HTML a XML

      • Utilizar el programa XMLSpy para realizar la conversión.


        • Abrir la página html en el Spy, (en vista texto), copiar su contenido en una nueva hoja con extensión .xml.


        • Para que funcione como archivo xml, deben cambiarse los tags html por los xml de la siguiente forma:

      En html tenemos los siguientes tags:
      En xml los cambiamos:
      Sustituir en:
      Borrar desde <html> a <body> inclusive
      e insertar los tags de comienzo de xml
      <?xml version='1.0' encoding='ISO-8859-1'?>

      <?xml-stylesheet type='text/xsl'
      href='http://tic2.dyndns.org/
      Librerias/xmldocs/templates/WebTIC/
      Arbol/arbolPagina-cnt.xsl'?>

      <menu
      xmlns:xsi='<a href='http://www.w3.org/
      2001/XMLSchema-instance'>
      http://www.w3.org/2001/
      XMLSchema-instance</a>'
      xsi:noNamespaceSchemaLocation='
      <a href='http://tic2.dyndns.org/
      Librerias/xmlDocs/Templates/WebTIC/
      Arbol/arbolEntryTextUrl.xsd'>
      http://tic2.dyndns.org/Librerias/
      xmlDocs/Templates/WebTIC/Arbol/
      arbolEntryTextUrl.xsd</a>'>
      Al principio del archivo xml
      Al final del archivo quitar </body> </html> </menu> Al final del archivo xml
      <h1> o <h2> <title>xxx</title> buscar
      <li> <entry> todos
      </li> </entry> todos
      <a href =' <url> todos
      '> </url><text> todos(menos en el tag <menu...>)
      </a> </text> todos
      <ul> blanco todos
      </ul> blanco todos
      <ol> blanco
      </ol> blanco
      En el archivo xml, cambiar el orden de los elementos:
      primero el tag
      <text>,
      después el tag <url>
      y el tag <descrip>
      si lo hay, para que aparezca el texto antes que la url,
      y no de error al chequearlo contra el xsd.
      blanco todos
      Por cada <text>, <url> y <descrip>
      (este último es opcional) que haya en el archivo xml,
      se incluye un tag <entry>,
      que engloba a los otros tres:
        <entry>
          <text>xxx</text>
          <url>xxx</url>
          <descrip>xxx</descrip>
        </entry>
      
      todos
      Para poner otros textos
      que no sean de hiperenlace ni descripción,
      se puede utilizar el tag <entry>
      de manera recursiva.
        <entry>
           <text>xx</text>
           <entry>
              <text>xx</text>
              <url>xx</url>
           </entry>
        </entry>
      
      todos
      &aacute; á
      buscar
      &eacute; é
      &iacute; í
      &oacute; ó buscar
      &uacute; ú
      'de; ñ
      Verificar todo y corregir lo necesario En todo el documento


      • Una vez se haya completado el cambio de todos los tags y el xml esté formado correctamente, siendo seleccionado el archivo xml en el Spy, se pulsa la tecla 'output' (icono verde con el texto: xsl), para generar automáticamente el archivo html a partir del xml.


      • Para terminar, sólo hay que salvar el archivo html generado automáticamente por el antiguo (con su mismo nombre), que es el que se abre desde la web.


      • Al guardarlo se actualiza directamente, así que cuando se abra la página html desde la web, se deberá ver el nuevo archivo.
    • ¿Como pasar una página XML a HTML?

      Convertir un documento XML a HTML

      Para Convertir un documento XML a HTML, hay que realizar una transformación del documento XML con otro documento XSL.

    • ¿Como hacer un enlace en XML?

      El hiperenlace

      • A continuación se muestra una tabla de correspondencia entre un XML y su XSL.
      • Para ver el resultado del ejemplo, pulsa aquí.

      LinkEjemplo.xml
      Ver como XML
      LinkEjemplo.xsl
      Ver como XSL
      <?xml version='1.0' encoding='ISO-8859-1'?>
      
      <?xml-stylesheet type='text/xsl'
      href='LinkEjemplo.xsl'?>
      
      <!-- Este es nuestro primer archivo XML -->
      
      <Pag>
       <Titulo>Como hacer enlaces en XML</Titulo>
       <PagDesc>Enlace www.terra.es</PagDesc>
       <Enlace>
        <Titulo>Link http://www.terra.es</Titulo>
        <Link>Enlace a Terra</Link>
        <URL>http://www.terra.es</URL>
       </Enlace>
      </Pag>
      
      <?xml version='1.0' encoding='ISO-8859-1'?>
      <xsl:stylesheet 
      xmlns:xsl='http://www.w3.org/1999/XSL/Transform'
      version='1.0'>
      
      <!-- Este es nuestro primer archivo XSL -->
      
      <xsl:template match='/'>
      
      <!-- Aqui comienza la plantilla -->
      
      <html>
      <head>
       <title>
         <xsl:value-of select='/Pag/Titulo' />
       </title>
      </head>
      
      <body>
       <h1>
        <xsl:value-of select='/Pag/Titulo' />
       </h1>
       <p>
         <xsl:value-of select='/Pag/PagDesc' />
       </p>
       <p>Pon el cursor sobre el siguiente enlace
       para ver el texto alternativo (atributo ALT de 
       HTML) y la web con la que enlaza (atributo HREF
       de HTML).</p>
      
       <p>
        <a>
         <xsl:attribute name='href'>
          <xsl:value-of select='/Pag/Enlace/URL' />
         </xsl:attribute>
         <xsl:attribute name='title'>
          <xsl:value-of select='/Pag/Enlace/Titulo' />
         </xsl:attribute>
         <xsl:attribute name='target'>
          <xsl:value-of select='/Pag/Enlace/@target' />
         </xsl:attribute>
         <xsl:value-of select='/Pag/Enlace/Link' />
        </a>
       </p>
      
      </body>
      </html>
      
      </xsl:template>
      </xsl:stylesheet>
      
    • ¿Como poner imágenes en XML?

      ¿Cómo insertamos imágenes en un documento XML?

      • Si hemos definido una imagen dentro de un documento XML (con su ruta, tamaño, etc.), podemos tomar luego dicha información para mostrar esa imagen en una página HTML.
      • Lo mostraremos a través de los siguientes ejemplos, que van aumentando en complejidad.

      Ejemplo 1

      Resultado del ejemplo

      XMLejemplo.xml
      Ver como XML
      XSLejemplo.xsl
      Ver como XML
      
      <?xml version='1.0'
      encoding='ISO-8859-1'?>
      
      <?xml-stylesheet type='text/xsl' 
      href='xslejemplo.xsl'?>
      
      <!-- Este es nuestro primer archivo XML --> 
      <Pag>
        <Titulo>Imagen de gráfico</Titulo>
        <PagDesc>Se muestra...</PagDesc>
        <Imagen>imagen.gif</Imagen>
      </Pag>
      
      
      <?xml version='1.0'
      encoding='ISO-8859-1'?>
      
      <xsl:stylesheet 
      xmlns:xsl='http://www.w3.org/1999/XSL/Transform' 
      version='1.0'>
      
      <!-- Este es nuestro primer archivo XSL -->
      
      <xsl:template match='/'>
      <!-- Aqui comienza la plantilla -->
      <html>
        <body>
          <h1>
           <xsl:value-of select='/Pag/Titulo' />
          </h1>
          <p>
           <xsl:value-of select='/Pag/PagDesc' />
          </p>
          <img>
            <xsl:attribute name='src'>
             <xsl:value-of select='/Pag/Imagen' />
            </xsl:attribute>
          </img>
          <p></p>
        </body>
      </html>
      </xsl:template>
      
      </xsl:stylesheet>
      


      Ejemplo 2

      Resultado del ejemplo

      XMLejemplo.xml
      Ver como XML
      XSLejemplo.xsl
      Ver como XML
      
      <?xml version='1.0'
      encoding='ISO-8859-1'?>
      
      <?xml-stylesheet type='text/xsl' 
      href='xslejemplo2.xsl'?>
      
      <!-- Este es nuestro primer archivo XML --> 
      <Pag>
        <Titulo>Imagen de gráfico</Titulo>
        <PagDesc>Se muestra...</PagDesc>
        <Imagen>imagen.gif</Imagen>
      </Pag>
      
      
      <?xml version='1.0'
      encoding='ISO-8859-1'?>
      
      <xsl:stylesheet 
      xmlns:xsl='http://www.w3.org/1999/XSL/Transform' 
      version='1.0'>
      
      <!-- Este es nuestro primer archivo XSL -->
      
      <xsl:template match='/'>
      <!-- Aqui comienza la plantilla -->
      <html>
       <body>
         <h1>
          <xsl:value-of select='/Pag/Titulo' />
         </h1>
         <p>
          <xsl:value-of select='/Pag/PagDesc' />
         </p>
         <img>
          <xsl:attribute name='src'>
           <xsl:value-of select='/Pag/Imagen' />
          </xsl:attribute>
          <xsl:attribute name='height'>
           <xsl:value-of select='/Pag/Imagen/@height'/>
          </xsl:attribute>
          <xsl:attribute name='width'>
           <xsl:value-of select='/Pag/Imagen/@width'/>
          </xsl:attribute>
         </img>
         <p></p>
        </body>
      </html>
      </xsl:template>
      
      </xsl:stylesheet>
      


      Ejemplo 3

      Resultado del ejemplo

      XMLejemplo.xml
      Ver como XML
      XSLejemplo.xsl
      Ver como XML
      
      <?xml version='1.0'
      encoding='ISO-8859-1'?>
      
      <?xml-stylesheet type='text/xsl' 
      href='xslejemplo.xsl3'?>
      
      <!-- Este es nuestro primer archivo XML --> 
      <Pag>
        <Titulo>Imagen de gráfico</Titulo>
        <PagDesc>Se muestra...</PagDesc>
        <Imagen>imagen.gif</Imagen>
      </Pag>
      
      
      <?xml version='1.0'
      encoding='ISO-8859-1'?>
      
      <xsl:stylesheet 
      xmlns:xsl='http://www.w3.org/1999/XSL/Transform' 
      version='1.0'>
      
      <!-- Este es nuestro primer archivo XSL -->
      
      <xsl:template match='/'>
      <!-- Aqui comienza la plantilla -->
      <html>
       <body>
         <h1>
          <xsl:value-of select='/Pag/Titulo' />
         </h1>
         <p>
          <xsl:value-of select='/Pag/PagDesc' />
         </p>
         <img>
          <xsl:attribute name='src'>
           <xsl:value-of select='/Pag/Imagen' />
          </xsl:attribute>
          <xsl:attribute name='height'>
           <xsl:value-of select='/Pag/Imagen/@height'/>
          </xsl:attribute>
          <xsl:attribute name='width'>
           <xsl:value-of select='/Pag/Imagen/@width'/>
          </xsl:attribute>
         </img>
         <p>Pon el cursor sobre la siguiente imagen
       para ver el texto alternativo
       (Atributo ALT de HTML).</p>
      
         <a>
          <xsl:attribute name='href'>
           <xsl:value-of select='/Pag/Imagen2/URL'/>
          </xsl:attribute>
          <img>
          <xsl:attribute name='src'>
           <xsl:value-of select='/Pag/Imagen2/Origen'/>
          </xsl:attribute>
          <xsl:attribute name='alt'>
           <xsl:value-of select='/Pag/Imagen2/Titulo'/>
          </xsl:attribute>
          <xsl:attribute name='border'>
           <xsl:value-of select='/Pag/Imagen2/@border'/>
          </xsl:attribute>
         </img>
         </a>
      
        </body>
      </html>
      </xsl:template>
      
      </xsl:stylesheet>
      


      Un ejemplo más complejo

    • ¿Como dejar un espacio en blanco entre dos elementos XML?

      Los espacios en blanco

      • Cuando estamos haciendo una página XSL para transformar un XML en HTML, en ocasiones nos interesa que, al mostrarse dos elementos XML estos estén separados por un espacio.
      • Por ejemplo: tenemos un archivo .XML con los siguientes elementos:
        • <InformacionPersonal>
            <Nombre>Jaime</Nombre>
            <Apellido1>López</Apellido1>
            <Apellido2>Trujillo</Apellido2>
          </InformacionPersonal>
          

      • Si queremos que en el HTML resultante se muestre "Jaime López Trujillo", en teoria, en el .XSL pondríamos algo similar a esto:
        • <html>
           <body>
            <xsl:value-of select="/InformacionPersonal/Nombre" />
            <xsl:value-of select="/InformacionPersonal/Nombre" />
            <xsl:value-of select="/InformacionPersonal/Nombre" />
           </body>
          </html>
          

      • Sin embargo, lo que se vería en pantalla al procesarse el .XML con el .XSL sería esto:
        • JaimeLópezTrujillo

      • ¿Como hacemos que haya un espacio en blanco entre esos elementos XML? pues usando el código &#160;, que equivale al espacio en blanco.


      • Luego el .XSL debería ser:
        • <html>
           <body>
            <xsl:value-of select="/InformacionPersonal/Nombre" />&#160;
            <xsl:value-of select="/InformacionPersonal/Nombre" />&#160;
            <xsl:value-of select="/InformacionPersonal/Nombre" />
           </body>
          </html>
          

      • Y daría como resultado:
        • Jaime López Trujillo
    • ¿Como hacer referencia a datos XML desde un XML?

      Referenciar datos

      • Puede darse el caso de que tengamos un documento XML y desde él queramos hacer referencia a datos que se encuentran en otras fuentes, como otros documentos XML.
      • Un buen ejemplo de esto sería la página principal de una web, en la cual los datos de la cabecera, el cuerpo, y los menús laterales podrían estar separados en varios XML, siendo llamados desde el fichero XML de la página (llamado index.xml, por ejemplo).
      • Veremos un caso sencillo para entender como se hace es referenciado.
      • Por ejemplo tenemos cuatro archivos:
        • document.xml (página principal, referenciará los datos que contienen otros XML).
        • document.xsl (la plantilla de la página principal).
        • hrGroup.xml (uno de los documentos con datos XML).
        • myGroup.xml (otro documento con datos XML).

      • A continuación se detalla el contenido de cada archivo:

      document.xml
      (pulsa para ver el archivo)
      document.xsl
      (pulsa para ver el archivo)
      
      <?xml version='1.0'
      encoding="ISO-8859-15"?>
      
      <?xml-stylesheet type="text/xsl"
      href="../Conceptos/Metodologia/
      ReferenciarXMLs/document.xml" ?>
      
      <groups>
        <groupRef href="hrGroup.xml"/>
        <groupRef href="myGroup.xml"/>
      </groups>
      
      
      <?xml version='1.0'
      encoding ="ISO-8859-15"?>
      
      <xsl:stylesheet version="1.0"
      xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
          
      <xsl:template match="/">
       <groups>
         <xsl:apply-templates select="//groupRef"/>
       </groups>
      </xsl:template>
          
      <xsl:template match="groupRef">
        <xsl:copy-of select="document(@href)//group"/>
      </xsl:template>
      
      </xsl:stylesheet>
      
      hrGroup.xml
      (pulsa para ver el archivo)
      myGroup.xml
      (pulsa para ver el archivo)
      
      <?xml version='1.0' 
      encoding ="ISO-8859-15"?>
      
      <group name="hr">
        <leader>Juan Sánchez</leader>
        <member>Pepe</member>
        <member>Pepita</member>
        <member>Pepón</member>
      </group>
      
      
      <?xml version='1.0' 
      encoding ="ISO-8859-15"?>
      
      <group name="my">
        <leader>Pedro Martín</leader>
        <member>Luis</member>
        <member>Luisa</member>
        <member>Luisito</member>
        </group>
      


      • Cuando abramos el archivo document.xml en el explorador aparecerá lo siguiente:
        • Juan Sánchez Pepe Pepita Pepón Pedro Martín Luis Luisa Luisito

      • Como vemos en el texto <xsl:copy-of select="document(@href)//group"/> en el archivo document.xsl, lo que hace que sea llamado un documento desde otro es la función document (), en la cual se hace una llamada al atributo href (que contiene la dirección al archivo XML correspondiente) de cada elemento groupRef del archivo document.xml.
    • Ejemplo: Web de TIC

      Una web basada en XML

      • Aquí puede verse un ejemplo de como hacer una web basada en XML.
      • La idea es tener un documento tipo a partir del cual podamos hacer todas las páginas del web con el mismo aspecto, y que nos deje cambiar fácilmente su apariencia y contenido.
      • Para ello se ha dividido el contenido de la página en distintas zonas (cuerpo, pie de página, y menús izquierdo, derecho, central y mini) y cada una de ellas se obtiene haciendo una llamada a un determinado archivo, que contiene los elementos que presentará dicha zona.
      • De esta manera podremos personalizar el contenido de los menús para cada página del web, simplemente cambiando las referencias de cada página a los archivos que contienen sus menús.

      Los elementos

      • La página que se le muestra al usuario en su navegador es en realidad el resultado de la unión de varios archivos XML, dispuestos de la manera que indica una plantilla XSL y un archivo de hoja de estilo CSS.
      • Si se pulsa sobre los enlaces, se puede ver el contenido de cada archivo:
        • index.xml
          • Archivo XML principal.
          • Contiene los elementos del cuerpo de la página.
          • Desde él se hace referencia a los archivos que contienen los elementos de los distintos menús que formarán la página que aparecerá ante el usuario.
          • La referencia a la plantilla XSL está desactivada para que pueda verse el contenido del archivo XML sin que se aplique la plantilla.

        • index.xsl
          • Plantilla XSL para el archivo index.xml.
          • Contiene la plantilla que indica como se dispondrán los distintos elementos en la página que verá el usuario.
          • Contiene también la referencia a la hoja de estilo.

        • XMLstyle.css Hoja de estilo CSS.
        • MenuMini.xml Archivo XML con los elementos del mini menú (en la mitad superior derecha).
        • MenuIzq.xml Archivo XML con los elementos del menú izquierdo.
        • MenuDer.xml Archivo XML con los elementos del menú derecho.
        • MenuCentro.xml Archivo XML con los elementos del menú central (sobre la zona central).
        • PiePagina.xml Archivo XML con los elementos del pie de página.
        • TICpeq.gif Archivo con el logotipo corporativo.

      • El resultado final, tal y como lo verá el usuario, puede verse pulsando aquí. (Es el archivo index.xml, pero con la referencia a la plantilla XSL activada).
  • XML Procesos Isla de Datos

    • Islas de datos XML y XSL

      Las islas de datos

      • Etiquetas <xml> </xml> dentro del cuerpo de la página html.
      • Clases:
        • Con acceso interno.
        • Con acceso externo.
        • Con acceso mixto.
    • Isla de datos XML y proceso XSLT en Servidor

      En Servidor

      • La extensión del archivo es ASP.
      • En el archivo html, se definen dos islas XML de datos, una para el archivo XML (acceso externo al HTML) y otra para el archivo XSL (con acceso interno al HTML).


      • Ventajas:
        • El cliente puede usar el navegador de cualquier fabricante y versión.
        • No se requieren las funciones JavaScripts para transformar el documento XML con el documento XSL, ya que esto se realiza en el servidor.

      • Inconvenientes:
        • La aplicación requiere una fuerte interacción con el servidor.
        • Es útil para aplicaciones que corren en una extranet, ya que los navegadores pueden ser de distinto fabricante y distintas versiones.
    • Isla de datos XML y proceso XSLT en cliente

      En Cliente

      • La extensión del archivo es .HTM
      • En el archivo html, se definen dos islas XML de datos, una para el archivo XML (acceso externo al HTML) y otra para el archivo XSL (con acceso interno al HTML).


      • Ventajas:
        • La aplicación requiere una mínima interacción con el servidor.
        • Es útil para aplicaciones que corren en una intranet, ya que todos los navegadores, al ser del mismo fabricante y la misma versión, soportarán el proceso XSLT (Ej. Internet Explorer versión 6.0).

      • Inconvenientes:
        • El cliente necesita MXSML 3.0 o posterior e Internet Explorer 5.0 o posterior.
        • Se requiere una serie de funciones JavaScripts para transformar el documento XML con el documento XSL.en todos los archivos HTML con islas XML.
        • En una de esas funciones, showGenre(genre){ hay que hacer cambios para cada página html con islas XML, en concreto en las variables:
          • var srcDoc=loadSource(book_catalog);
            var processor=getProcessor(catalog_filter) 
            
          • Hacen referencia al alchivo xml (book_catalog) y xsl (catalog_filter).
  • XSLT Procesos

    • Clases en el Servidor

    • Clases en el Cliente

  • LenguajeFuncional

    • Recursion

      XSL es un lenguaje funcional y como tal no se permite la asignación de variables, ni hacer bucles que almacenen el valor de una variable entrevarias iteraciones del bucle. La alternativa al bucle es la recursión y las variables se almacenan en los parámetros de invocación al template.

    • Ejemplo de recursion

        <!-- 
      ++++++++++++++++++++++ Template raiz cuadrada ++++++++++++++++++++++++++++++
      
      ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
      -->
        <xsl:template name='sqrt'>
          <xsl:param name='num' select='0'/>
          <!-- The number you want to find the square root of -->
          <xsl:param name='try' select='1'/>
          <!-- The current 'try'.  This isused internally. -->
          <xsl:param name='iter' select='1'/>
          <!-- The current iteration, checked against maxiter to limit loop count -->
          <xsl:param name='maxiter' select='20'/>
          <!-- Set this up to insure against infinite loops 10 -->
      
          <!-- This template was written by Nate Austin using Sir Isaac Newton's
       method of finding roots -->
          <!-- incrementado maxiter a 20 porque para numeros grandes terminaba con el max -->
          <xsl:choose>
            <xsl:when test='$try * $try = $num or $iter > $maxiter'>
              <xsl:value-of select='$try'/>
            </xsl:when>
            <xsl:otherwise>
              <xsl:call-template name='sqrt'>
                <xsl:with-param name='num' select='$num'/>
                <xsl:with-param name='try' select='$try - (($try * $try - $num) div (2 * $try))'/>
                <xsl:with-param name='iter' select='$iter + 1'/>
                <xsl:with-param name='maxiter' select='$maxiter'/>
              </xsl:call-template>
            </xsl:otherwise>
          </xsl:choose>
      
        </xsl:template>
      
      
    • Ejemplo de recursion segmentada

      Evita que desborde la pila

       <!-- 
        +++++++++++++++++++ Template OperRecursionPuntosTrack ++++++++++++++++++++++++
        
       
        ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
        -->
        <xsl:template name='OperRecursionPuntosTrack'>
          <!--
          <xsl:param name='pTrk'/>
          <xsl:param name='pTrkSeg'/>
      -->
          <xsl:param name='pOperPila' select='INICIO'/>
      
      
          <xsl:param name='pSegmentIndex' select='number(1)'/>
      
          <xsl:param name='pSegmentTrkptList' />
          <xsl:param name='pSegmentTrkptIndex' select='number(1)'/>
          <xsl:param name='pSegmentLength'/>
      
          <xsl:param name='pTrkptList'/>
          <xsl:param name='pTrkptListIndex'  select='number(1)'/>
          <xsl:param name='pTrkptListCount' select='count($pTrkptList)'/>
      
          <xsl:param name='pTrkptAIndex' select='number(0)'/>
          <xsl:param name='pTrkptBIndex' select='number(1)'/>
      
          <xsl:param name='pMaxIterRecurPtTraza' select='number(10)'/>
          <xsl:param name='pDocParam'/>
      
          <xsl:comment>++ OperRecursionPuntosTrack ++ </xsl:comment>
      
          <!-- +++++++++++ calcula valores vTrkptAIndex, vTrkptBIndex ++++++++++ -->
          <xsl:variable name='vFiltraPuntos' select='$pDocParam//FiltraPuntos'/>
      
          <xsl:variable name='vTrkptAIndex'>
            <xsl:choose>
              <xsl:when test='$pOperPila = 'INICIO'>
                <xsl:value-of select='0'/>
              </xsl:when>
      
              <xsl:when test='$pSegmentIndex > 1 and $pSegmentTrkptIndex = 1'>
                <xsl:value-of select='$pTrkptListIndex'/>
              </xsl:when>
      
              <xsl:otherwise>
                <xsl:value-of select='$pTrkptAIndex'/>
              </xsl:otherwise>
            </xsl:choose>
          </xsl:variable>
      
          <xsl:variable name='vTrkptBIndex'>
            <xsl:choose>
              <xsl:when test='$pOperPila = 'INICIO'>
                <xsl:value-of select='1'/>
              </xsl:when>
      
              <xsl:when test='$pSegmentIndex > 1 and $pSegmentTrkptIndex = 1'>
                <xsl:value-of select='$pTrkptListIndex + 1'/>
              </xsl:when>
      
              <xsl:otherwise>
                <xsl:value-of select='$pTrkptBIndex'/>
              </xsl:otherwise>
            </xsl:choose>
          </xsl:variable>
      <!--
          <xsl:call-template name='PAPB-VAVB'>
            <xsl:with-param name='pTrkptAIndex' select='$vTrkptAIndex'/>
            <xsl:with-param name='pTrkptBIndex' select='$vTrkptBIndex'/>
           </xsl:call-template>
      -->    
          <xsl:variable name='vPila' select='concat('++ ORPTrack:', ' Pila:', $pOperPila, ' (', $pSegmentIndex,'-', $pSegmentTrkptIndex,'/',$pSegmentLength, ') ',  'Lista:(', $pTrkptListIndex, '/', $pTrkptListCount,') ', ' PAPB-VAVB:(', $pTrkptAIndex,',', $pTrkptBIndex, '-', $vTrkptAIndex,',', $vTrkptBIndex, ') ++')'/>
          <xsl:comment>
            <xsl:value-of select='$vPila'/>
          </xsl:comment>
      
          <!-- +++++++++++++ Crear Trackpt PA:1 +++++++++++++ -->
          <!--
          <xsl:if test='$pOperPila = 'INICIO' '>
            
            <xsl:variable name='vTrkpt' select='$pTrkptList[$pTrkptAIndex]'/>
            <xsl:variable name='vExtraCmd' select='concat('PA', $pTrkptAIndex)'/>
      
            <xsl:call-template name='TrackPt'>
      
              <xsl:with-param name='pTrkptList' select='$pTrkptList'/>
              <xsl:with-param name='pTrkptListIndex' select='$pTrkptAIndex'/>
              <xsl:with-param name='pTrkptListCount' select='$pTrkptListCount'/>
      
              <xsl:with-param name='pExtraCmd' select='$vExtraCmd'/>
              <xsl:with-param name='pDocParam' select='$pDocParam'/>
            </xsl:call-template>
      
          </xsl:if>
      -->
      
          <!-- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++   -->
          <xsl:variable name='vCalculoValFiltro'>
            <xsl:if test='$pOperPila != 'SACAR' and $vFiltraPuntos ='si'>
              <xsl:call-template name='CalculoValFiltro'>
                <xsl:with-param name='pTrkptList' select='$pTrkptList'/>
                <xsl:with-param name='pTrkptAIndex' select='$vTrkptAIndex'/>
                <xsl:with-param name='pTrkptBIndex' select='$vTrkptBIndex'/>
                <xsl:with-param name='pDocParam' select='$pDocParam'/>
              </xsl:call-template>
            </xsl:if>
          </xsl:variable>
      
          <xsl:comment>
            <xsl:value-of select='$vCalculoValFiltro'/>
          </xsl:comment>
      
          <!--   
          bbb<xsl:value-of select='concat('&#10;', contains($vCalculoValFiltro, 'Aceptado'),'&#10;')'/>
      -->
          <!--
          <xsl:call-template name='TestValFiltro'>
            <xsl:with-param name='pTrkptAIndex' select='$vTrkptListIndex'/>
            <xsl:with-param name='pTrkptBIndex' select='$vTrkptListIndex + 1'/>
            
            <xsl:with-param name='vVelocidad' select='$vVelocidad'/>
            <xsl:with-param name='vDistancia' select='$vDistancia'/>
            <xsl:with-param name='vTiempo' select='$vTiempo'/>
            <xsl:with-param name='vAngulo' select='$vAngulo'/>
      
            <xsl:with-param name='pDocParam' select='$pDocParam'/>
          </xsl:call-template>
        -->
      
          <!-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -->
          <xsl:if test='$pOperPila != 'SACAR' and $pSegmentTrkptList and $pSegmentTrkptIndex <= $pSegmentLength and $pTrkptListIndex < $pTrkptListCount and $pTrkptBIndex < $pTrkptListCount'>
      
            <xsl:if test='$vCalculoValFiltro =' or contains($vCalculoValFiltro, 'Aceptado')'>
      
              <xsl:variable name='vExtraCmd' select='concat('PB', $vTrkptBIndex)'/>
      
              <xsl:call-template name='TrackPt'>
                <xsl:with-param name='pTrkptList' select='$pTrkptList'/>
                <xsl:with-param name='pTrkptListIndex' select='$vTrkptBIndex'/>
                <xsl:with-param name='pTrkptListCount' select='$pTrkptListCount'/>
      
                <xsl:with-param name='pExtraCmd' select='$vExtraCmd'/>
                <xsl:with-param name='pDocParam' select='$pDocParam'/>
              </xsl:call-template>
      
            </xsl:if>
          </xsl:if>
      
          <!-- +++++++ ajusta indices vSegmentTrkptIndex, vTrkptListIndex +++++++ -->
          <xsl:if test='  $pOperPila = 'INICIO' or $pTrkptBIndex < $pTrkptListCount' >
      
            <xsl:variable name='vSegmentTrkptIndex'>
              <xsl:choose>
                <xsl:when test='$pOperPila = 'INICIO'>
                  <xsl:value-of select='1'/>
                </xsl:when>
      
                <xsl:when test='$pOperPila = 'SACAR' and $pSegmentIndex > 1 and $pSegmentTrkptIndex = 1'>
                  <xsl:value-of select='1'/>
                </xsl:when>
      
                <xsl:otherwise>
                  <xsl:value-of select='$pSegmentTrkptIndex + 1'/>
                </xsl:otherwise>
              </xsl:choose>
            </xsl:variable>
      
            <xsl:variable name='vTrkptListIndex'>
              <xsl:choose>
                <xsl:when test='$pOperPila = 'INICIO'>
                  <xsl:value-of select='1'/>
                </xsl:when>
      
                <xsl:when test='$pSegmentIndex > 1 and $pSegmentTrkptIndex = 1'>
                  <xsl:value-of select='$pSegmentLength * ($pSegmentIndex - 1) + 1 '/>
                </xsl:when>
      
                <xsl:otherwise>
                  <xsl:value-of select=' $pTrkptListIndex + 1'/>
                </xsl:otherwise>
              </xsl:choose>
            </xsl:variable>
            <!--
            <xsl:comment>aaAA $vFiltraPuntos ='no' or ($vFiltraPuntos ='si'  and contains($vCalculoValFiltro, 'Aceptado')) </xsl:comment>
            <xsl:comment>eeAA $vFiltraPuntos ='si'  and contains($vCalculoValFiltro, 'Eliminado')</xsl:comment>
            <xsl:comment>xxAA </xsl:comment>
      -->
            <xsl:variable name='zTrkptAIndex'>
              <xsl:choose>
                <xsl:when test='($vFiltraPuntos ='si'  and contains($vCalculoValFiltro, 'Aceptado')) '>
                  <xsl:value-of select='$pTrkptBIndex'/>
                </xsl:when>
      
                <xsl:when test='$vFiltraPuntos ='no' or ($vFiltraPuntos ='si'  and contains($vCalculoValFiltro, 'Eliminado'))'>
                  <xsl:value-of select='$vTrkptAIndex'/>
                </xsl:when>
      
                <xsl:when test='$pSegmentIndex > 1 and $pSegmentTrkptIndex = 1'>
                  <xsl:value-of select='$pSegmentLength * ($pSegmentIndex - 1) + 1 '/>
                </xsl:when>
      
                <xsl:otherwise>
      
                  <xsl:value-of select='$vTrkptBIndex'/>
                </xsl:otherwise>
              </xsl:choose>
            </xsl:variable>
            <!--
            <xsl:comment>aaBB $vFiltraPuntos ='no' or ($vFiltraPuntos ='si'  and contains($vCalculoValFiltro, 'Aceptado')) </xsl:comment>
            <xsl:comment>eeBB $vFiltraPuntos ='si'  and contains($vCalculoValFiltro, 'Eliminado')</xsl:comment>
            <xsl:comment>xxBB </xsl:comment>
      -->
            <xsl:variable name='zTrkptBIndex'>
              <xsl:choose>
                <xsl:when test='($vFiltraPuntos ='si'  and contains($vCalculoValFiltro, 'Aceptado')) '>
                  <xsl:value-of select='$pTrkptBIndex + 1'/>
                </xsl:when>
      
                <xsl:when test='$vFiltraPuntos ='no' or ($vFiltraPuntos ='si'  and contains($vCalculoValFiltro, 'Eliminado'))'>
                  <xsl:value-of select='$vTrkptBIndex + 1'/>
                </xsl:when>
      
                <xsl:when test='$pSegmentIndex > 1 and $pSegmentTrkptIndex = 1'>
                  <xsl:value-of select='$pSegmentLength * ($pSegmentIndex - 1) + 1 '/>
                </xsl:when>
      
                <xsl:otherwise>
                  <xsl:value-of select='$vTrkptBIndex + 1'/>
                </xsl:otherwise>
              </xsl:choose>
      
            </xsl:variable>
      
            <xsl:variable name='v1Pila' select='concat('++ despues ajuste-RPTrack:', ' Pila:', 'xxx', ' (', $pSegmentIndex,'-', $vSegmentTrkptIndex,'/',$pSegmentLength, ') ',  'Lista:(', $vTrkptListIndex, '/', $pTrkptListCount,') ', ' PAPB-ZAZB:(', $pTrkptAIndex,',', $pTrkptBIndex,'-', $zTrkptAIndex,',', $zTrkptBIndex,') ++')'/>
            <xsl:comment>
              <xsl:value-of select='$v1Pila'/>
            </xsl:comment>
      
            <!-- +++++++++++++++++++++ Recursion +++++++++++++++++++++++++ -->
            <xsl:call-template name='RecursionPuntosTrack'>
              <xsl:with-param name='pOperPila' select='$pOperPila'/>
              <xsl:with-param name='pSegmentIndex'  select='$pSegmentIndex'/>
      
              <xsl:with-param name='pSegmentTrkptList'  select='$pSegmentTrkptList'/>
              <xsl:with-param name='pSegmentTrkptIndex'  select='$vSegmentTrkptIndex'/>
              <xsl:with-param name='pSegmentLength' select='$pSegmentLength'/>
      
              <xsl:with-param name='pTrkptList' select='$pTrkptList'/>
              <xsl:with-param name='pTrkptListIndex' select='$vTrkptListIndex'/>
              <xsl:with-param name='pTrkptListCount' select='$pTrkptListCount'/>
      
              <xsl:with-param name='pTrkptAIndex' select='$zTrkptAIndex'/>
              <xsl:with-param name='pTrkptBIndex' select='$zTrkptBIndex'/>
      
              <xsl:with-param name='pMaxIterRecurPtTraza' select='$pMaxIterRecurPtTraza'/>
              <xsl:with-param name='pDocParam' select='$pDocParam'/>
            </xsl:call-template>
          </xsl:if>
          <!-- +++++++++++++++++++++ fin recursion por segmentos +++++++++++++++++++ -->
      
        </xsl:template>
      
    • Paramétro en recursión sacar de pila

      Si en la invocación del template para sacar de la pila, se pone el parámetro de las forma que se indica, el parámetro toma los valores valores que se indican:

      Selectresultado
      ' 'vacio
      '1'1
      $pTrkPtBIndexel valor almacenado
      (decreciente)
      $vPBvalor almacenado en vPB
      nadavalor vacio
  • Errores

    • No se puede eliminar el archivo resultado

      Si una transformación no termina y se cancela, o se interrumpe, el archivo generado está con tamaño 0 y no se puede eliminar. Da el mensaje: está siendo utilizado por otra persona.

      Para desbloquearlo,

      • el xsl tiene que ser correcto y efectuar la transformación del archivo con el mismo nombre tanto del archivo xml como del xsl.
      • Reinicializar el ordenador

Página generada automáticamente desde la Base de Datos: XML/ el 10/11/2010 18:27:47