Zona HTML Zona Java Zona PHP Zona ASP Zona Bases de datos

ORIGEN:

Fecha

3-2-2006

------------------------------------------------------

Inicio > Tutoriales > Internet > XML > Apuntes de XML
-Tutoriales

Apuntes de XML


Presentación y transformación de documentos XML

. Hojas de estilo CSS

. CSS con XML

  • CSS es un lenguaje de hojas de estilo que se utiliza normalmente para controlar la presentación de documentos HTML, pero también se puede utilizar con documentos XML. Su principal característica, en contraste con el lenguaje XSLT, es su sencillez.
  • Ventajas:
    • Fácil de aprender y utilizar. Muchos desarrolladores ya lo conocen.
    • Consume poca memoria y tiempo de proceso, pues no construye una representación en arbol del documento.
    • Muestra el documento según se va procesando.
  • Desventajas:
    • Sólo sirve para visualizar documentos en un navegador.
    • No permite realizar manipulaciones sobre el documento, tales como añadir y borrar elementos, realizar ordenaciones, etc.
    • Sólo permite acceder al contenido de los elementos. No a los atributos, instrucciones de proceso, etc.
    • Utiliza una sintaxis diferente a la del XML.

. Un ejemplo

  • Ejemplo de documento XML:
    <?xml version="1.0" ?>
    <?xml-stylesheet type="text/css" href="proyectos.css" ?>
    <BD_Proyectos>
      <Proyecto pid="0511-001" tipo="Web" comienzo="11/1/05">
        <Nombre_Proy> Xray Mind Learners Web Site </Nombre_Proy>
        <Contacto tipo="primario">
         <Nombre>Kell Attain</Nombre>
          <Direccion> Web Ravin Consulting, 661 Oakey Rd</Direccion>
          <Tlf> 111-555-1111 </Tlf>
          <Fax> 111-555-2222 </Fax>
          <E-Mail> kattain@webravin.com </E-Mail>
        </Contacto>
        <Contacto tipo="marketing">
         <Nombre> Francis Chillington </Nombre>
          <Direccion> Web Ravin Consulting, 661 Oakey Rd</Direccion>
          <Tlf> 111-555-1112 </Tlf>
          <Fax> 111-555-2222 </Fax>
          <E-Mail> fchillington@webravin.com </E-Mail>
        </Contacto>
        <Contacto tipo="graficos">
         <Nombre> Lara Firewalker </Nombre>
          <Direccion> Web Ravin Consulting, 661 Oakey Rd</Direccion>
          <Tlf> 111-555-1113 </Tlf>
          <Fax> 111-555-2222 </Fax>
          <E-Mail> lfirewalker@webravin.com </E-Mail>
        </Contacto>
        <Notas>
          <Entrada fecha="11/03/05" contacto="kta001"> Development on the Web site 
          has started. The primary graphics - logo | backgrounds | navigation 
          system - should be done by 11/8/00.
          </Entrada>
        </Notas>
      </Proyecto>
      <Proyecto pid="0511-002" tipo="Database">
        <Nombre_Proy> XML Database for Site Visitors </Nombre_Proy>
        <Contacto tipo="primario">
         <Nombre> Tom Phannon </Nombre>
          <Direccion> Web Ravin Consulting, 661 Oakey Rd</Direccion>
          <Tlf> 111-555-1122 </Tlf>
          <Fax> 111-555-2222 </Fax>
          <E-Mail> tphannon@webravin.com </E-Mail>
        </Contacto>
        <Notas>
          <Entrada fecha="11/10/05"> 
            Database structure is complete. Ready to start propagating the data.
          </Entrada>
        </Notas>
      </Proyecto>
      <Proyecto tipo="AI">
        <Nombre_Proy> House of Glass </Nombre_Proy>
        <Contacto tipo="primario">
         <Nombre> Shamu Wagonride </Nombre>
          <Direccion> Web Ravin Consulting, 661 Oakey Rd</Direccion>
          <Tlf> 111-555-1133 </Tlf>
          <Fax> 111-555-2222 </Fax>
          <E-Mail> shamu@wagonride.com </E-Mail>
        </Contacto>
        <Notas>
          <Entrada fecha="11/01/05"> 
          AI logic model software has been picked out and ordered, as well 
          as the equipment required to run it. Networking (MIS) has been notified 
          of the machine's arrival and networking needs.
          </Entrada>
          <Entrada fecha="11/11/05"> 
          MIS has received equipment and software and is starting the installation.
          Expected date for network connection is 11/15/05.
          </Entrada>
        </Notas>
      </Proyecto>
    </BD_Proyectos>
  • Hoja de estilo para visualizar el documento en un navegador:
    Proyecto  {display: block;
              background: blue;
              font-family: sans-serif;
              margin: 1cm}
    
    Nombre_Proy  {display: block; 
              background: #FF0000;
              font-size: larger;
              font-weight: bold;
              color: yellow; 
              font-family: Arial; 
              border: #FF0000; 
              border-style: double}
    
    Contacto  {display: block;
            padding: 5pt;
            text-indent: 1cm}
    
    Nombre    {display: block;
            font-variant: small-caps;
            font-size: medium;
            font-weight: bold;
            color: red}
    
    Direccion  {display: block;
            font-style: italic;
            font-size: smaller;
            color: white}
    
    Tlf  {display: block;
        font-weight: bold;
        font-size: smaller;
        color: white}
    
    Fax  {display: block;
        font-weight: bold;
        font-size: smaller;
        color: white}
    
    E-Mail  {display: block;
          font-weight: bold;
          font-style: italic;
          color: white}
    
    Notas    {display: block;
          font-style: italic;
          color: white;
          padding: 3em}
    
    Entrada  {display: block}

. Lenguaje XSLT

. Introducción a XSLT

  • Para aclarar terminología, XSL es un estándar que se compone de dos partes diferenciadas:
    • XSLT: Lenguaje para transformar documentos XML en otro formato (otro XML, HTML, DHTML, texto plano, PDF, RTF, Word, etc.)
    • XSL-FO: Especificación que trata cómo deben ser los objetos de formato para convertir XML a formatos binarios (PDF, Word, imágenes, etc.)
  • La principal característica del lenguaje XSLT es su potencia. No es sólo un lenguaje para visualizar documentos, sino en general para transformarlos y manipularlos.
  • Esta manipulación la gestiona un programa especial que se llama procesador XSLT. Existen distintos procesadores disponibles, como Xalan, del proyecto colaborativo de código abierto Apache.

. Ventajas y desventajas

  • Ventajas:
    • La salida no tiene por qué ser HTML para visualización en un navegador, sino que puede estar en muchos formatos.
    • Permite manipular de muy diversas maneras un documento XML: reordenar elementos, filtrar, añadir, borrar, etc.
    • Permite acceder a todo el documento XML, no sólo al contenido de los elementos.
    • XSLT es un lenguaje XML, por lo que no hay que aprender nada especial acerca de su sintaxis.
  • Desventajas:
    • Su utilización es más compleja.
    • Consume cierta memoria y capacidad de proceso, pues se construye un árbol con el contenido del documento.

. Formas de uso

  • Visualizar directamente en un navegador el documento XML que tiene asociada una hoja XSLT. El navegador debe tener incorporado un procesador XSLT.
  • Ejecutar el procesador XSLT independientemente del navegador. Se le pasan las entradas necesarias (fichero origen y hoja XSLT a utilizar) y genera la salida en un fichero, con el que podemos hacer lo que queramos.
  • Realizar las transformaciones dentro de un programa en el servidor y enviar a los clientes sólo el resultado de la transformación.

. Un ejemplo de hoja

  • Hoja de estilo XSLT para el ejemplo del libro:
    <?xml version="1.0"?>
    
    <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                   xmlns:Lib="http://www.mislibros.com/libros/javaxml"
                   xmlns:Catalogo="http://www.mislibros.com/catalogo"
                   version="1.0">
    
      <xsl:template match="Lib:Libro">
        <html>
          <head>
            <title><xsl:value-of select="Lib:Titulo" />
              (<xsl:value-of select="Catalogo:Seccion" />:
              <xsl:value-of select="Catalogo:SubSeccion" />)
            </title>
          </head>
          <body>
           	<xsl:apply-templates select="Lib:Contenido" />
          	<i><xsl:value-of select="Lib:Copyright" /></i>
          </body>
        </html>
      </xsl:template>
    
      <xsl:template match="Lib:Contenido">
        <center>
         <h1>Contenidos</h1>
        </center>
        <hr/>
        <ul>
         <xsl:for-each select="Lib:Capitulo">
          <xsl:choose>
           <xsl:when test="@materia='Java'">
            <li><xsl:value-of select="Lib:Tema" /> (Java)</li>
           </xsl:when>
           <xsl:otherwise>
            <li><xsl:value-of select="Lib:Tema" /> (No Java)</li>
           </xsl:otherwise>
          </xsl:choose>
         </xsl:for-each>
        </ul>
      </xsl:template>
    
    </xsl:stylesheet>

. Características

  • Se puede observar que una hoja de estilo XSLT es un documento XML.
  • El elemento raíz es stylesheet, en el que se especifican los espacios de nombre para la propia hoja de estilo y para el documento XML que se quiere presentar.
  • Cada elemento template se asocia con un fragmento del documento XML (que puede ser un elemento o un conjunto de elementos) y se transforma en otro fragmento de XML, según una serie de reglas que se especifican en su interior.
  • El elemento value-of extrae un valor concreto del documento.
  • El elemento apply-templates aplica las plantillas que se especifiquen e inserta la salida de las mismas.
  • Para iterar sobre una serie de elementos que se repiten se utiliza for-each.
  • Para realizar distintos procesamientos en función de los datos se puede utilizar el elemento choose, que se compone de un número de elementos when, cada uno con un caso distinto, y un elemento opcional otherwise que se refiere al caso por defecto.
  • Para procesar o no un elemento en función de una condición se utilizaría simplemente el elemento if, especificando la condición en el atributo test.
  • El HTML que se especifica en las plantillas debe seguir las reglas del XML (es decir, debe ser XHTML).

. XPath

  • Las expresiones que pueden aparecer en los atributos select, match o test de los elementos explicados siguen el lenguaje XPath, y pueden llegar a ser todo lo complejas que se requiera.
  • Veamos un ejemplo sobre el mismo documento del libro con algunas expresiones XPath. Este ejemplo muestra una lista con las secciones de 3 ó más apartados de capítulos cuya materia sea Java, numerándolas e indicando a qué capítulo pertenecen.
    <?xml version="1.0"?>
    
    <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                   xmlns:Lib="http://www.mislibros.com/libros/javaxml"
                   version="1.0">
    
    <xsl:template match="Lib:Libro">
      <html><body>
        <ul>
          <xsl:for-each select="Lib:Contenido/Lib:Capitulo[@materia='Java']
            /Lib:Seccion[@apartados>=3]">
            <li>
              <xsl:value-of select="position()" />: 
              <xsl:value-of select="." />, de 
              <xsl:value-of select="preceding-sibling::Lib:Tema" />
            </li>
          </xsl:for-each>
        </ul>
      </body></html>
    </xsl:template>
    </xsl:stylesheet>
  • La especificación XPath contiene muchas complejidades que no podemos detenernos a cubrir, pero destaquemos algunos aspectos del ejemplo:
    • Para descender por la jerarquía de elementos se utiliza el separador /.
    • Se pueden imponer restricciones al conjunto de nodos extraídos, entre corchetes.
    • Existen una serie de funciones predefinidas, como position(), que nos da el número de orden de un nodo respecto al conjunto de nodos extraídos.
    • Se puede trabajar con los nodos relacionados con el actual (nodo padre, hijos, nodos al mismo nivel, etc.) mediante una serie de ejes, como preceding-sibling, que nos da los nodos anteriores al actual del mismo nivel.

. Crear elementos

  • Con XSLT también es posible crear nuevos elementos mediante las etiquetas element y attribute. Esto sirve para crear elementos con algún atributo no conocido a priori, que debe tomarse del fichero XML.
  • Añadimos el siguiente fragmento de XML al final del documento del libro, a partir del cual queremos generar enlaces HTML:
    <Referencias>
      <Referencia>
       <Nombre>XSL en el W3C</Nombre>
       <Url>http://www.w3.org/Style/XSL</Url>
      </Referencia>
      <Referencia>
       <Nombre>Lista XSL</Nombre>
       <Url>http://www.mulberrytech.com/xsl/xsl-list</Url>
      </Referencia>
    </Referencias>
  • El fragmento de XSLT que genera los enlaces es:
    <xsl:template match="Lib:Referencias">
       <p>
        <center><h3>Referencias útiles</h3></center>
        <ol>
         <xsl:for-each select="Lib:Referencia">
          <li>
           <xsl:element name="a">
            <xsl:attribute name="href">
             <xsl:value-of select="Lib:Url" />
            </xsl:attribute>
            <xsl:value-of select="Lib:Nombre" />
           </xsl:element>      
          </li>
         </xsl:for-each>
        </ol>
       </p>
    </xsl:template>
    
    	(Recordar aplicar la nueva plantilla:)
    
    <xsl:apply-templates select="Lib:Contenido|Lib:Referencias" />

. Ordenaciones

  • Si queremos ordenar los capítulos alfabéticamente, sólo tenemos que añadir lo siguiente tras el elemento for-each:
    <xsl:sort select="Lib:Tema"/>
  • Se puede ordenar descendentemente añadiendo al elemento sort el atributo order="descending"
 
Patrocinados
 

Copyright © 1999-2005 Programación en castellano. Todos los derechos reservados.
Formulario de Contacto - Datos legales - Publicidad

Hospedaje web y servidores dedicados linux por Ferca Network

red internet: musica mp3 | logos y melodias | hospedaje web linux | registro de dominios | servidores dedicados
más internet: comprar | recursos gratis | posicionamiento en buscadores | tienda virtual | gifs animados