Corsi on-line
Chiudi
Newsletter:
  • Seguici su Facebook
  • Seguici su Twitter
  • Seguici su Google+
  • Seguici via RSS
  • Seguici col tuo Smartphone

Namespace e template di XSL

Introduzione

Nel documento XSLT si usano elementi provenienti da almeno due namespace:

  1. quello di XSLT;
  2. quello del modello di documenti di destinazione.
Esistono due filosofie di riscrittura disponibili in XSLT, iterativo e ricorsivo, dette anche pull e push: 3.1 Stile iterativo

I fogli di stile tipo pull sono adatti per riscrivere documenti XML dalla struttura di database, molto ripetitivi, ad esempio:

<portfolio titoli>
    <indice="MIB">
        <nome>la mia società</nome>
        <sym>ZCXM</sym>
        <prezzo>28.875</prezzo>
    </indice>
    <indice="Nikkei">
        <nome>la sua società</nome>
        <sym>ZFFX</sym>
        <prezzo>92.250</prezzo>
    </indice>
    <indice="nasdaq">
        <name>la nostra società</nome>
        <sym>ZYSZ</sym>
        <prezzo>20.313</prezzo>
    </indice>
</portfolio titoli>
Di seguito è illustrato un foglio di stile XSLT di tipo pull per generare un documento HTML con i dati di sopra:
<HTML xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    xmlns="http://www.w3.org/HTML4/">
<BODY>
<TABLE BORDER="2">
<TR><TD>Indice</TD><TD>Nome</TD><TD>Prezzo</TD></TR>
<xsl:for-each select="portfoliotitoli">
<TR>
<TD><xsl:value-of select="sym"/> </TD>
<TD><xsl:value-of select="nome"/></TD>
<TD><xsl:value-of select="prezzo"/></TD>
</TR>
</xsl:for-each>
</TABLE>
</BODY>
</HTML>
</HTML>
Quello di sopra è sostanzialmente un documento HTML con qualche tag strano, che spiegheremo nei capitoli successivi, per ora diciamo che: Stile ricorsivo

Supponiamo di avere questo documento XML dalla struttura di documento, molto diversificato:

<document>
<titolo>In principio era ...</titolo>
<sezione>
    <titolo>Il primo giorno</titolo>
        <paragrafo>Quando non c'era ancora niente
            <enfatizzato>lui</enfatizzato>
            fu impegnato nella<enfatizzato>creazione</enfatizzato> 
            di tutto</paragrafo>
        <paragrafo><enfatizzato>Lui</enfatizzato> aveva qualche dubbio 
            riguardo a tale atto<enfatizzato>Lui</enfatizzato>
            si impegno al massimo comunque</paragrafo>
</sezione>

...

</document>
Questo è un foglio di stile XSLT di tipo push:
<xsl:stylesheet version="1.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns="http://www.w3.org/HTML4/">
<xsl:template match="/">
<HTML>
<BODY>
<H1><xsl:value-of select="document/titolo"/></H1>
<xsl:apply-templates select="document/sezione"/>
</BODY>
</HTML>
</xsl:template>
<xsl:template match="sezione">
<HR/>
<H2><xsl:value-of select="title"/></H2>
<xsl:apply-templates select="paragrafo"/>
</xsl:template>
<xsl:template match="paragrafo"><P>
<xsl:apply-templates /></P>
</xsl:template>
<xsl:template match="paragrafo"><I>
<xsl:apply-templates /></I>
</xsl:template>
</xsl:stylesheet>
I Templates

Il testo di sopra non assomiglia ad un documento HTML, ma difatti rappresenta una serie di istruzioni di riscrittura separate:

Il parser costruisce una lista di nodi correnti e per default gli inserisce il nodo radice. Quindi cerca tutti i template che possono essere applicati alla testa della lista di nodi correnti e seleziona il più importante sulla base di criteri espliciti di preferenza.

L'applicazione del template può creare dei frammenti di albero di destinazione e può anche inserire altri nodi nella lista di nodi correnti,poi il ciclo si ripete fino ad esaurimento della lista di nodi correnti. L'elemento xsl:template è un modello che definisce delle regole che vengono applicate al nodo specificato nell'attributo match del documento sorgente XML. L'utilizzo del carattere / indica al processore di applicare queste regole all'elemento radice dell'XML.

(L'articolo continua più sotto...)

All'interno dell'elemento xsl:template per prima cosa mettiamo i TAG <html> e all'interno di questi utilizziamo l'elemento xsl:apply-templates per richiamare gli altri modelli che saranno applicati agli elementi figli.

Ad esempio, avendo un documento contenente la collezione di CD con autori (identificati dal nome) e titoli dei CD, possiamo applicare una trasformazione in base alla regola, descritta dal seguente documento XSLT:

<!-- Prologo XML -->
<?xml version="1.0" encoding="UTF-8"?>

<xsl:stylesheet version="1.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<!-- Applica il template al nodo radice indicato dal carattere -->
<xsl:template match="/">
<html>
    <!-- Richiama e applica gli altri templates -->
    <xsl:apply-templates>
    </xsl:apply-templates>
    </html>
    </xsl:template>
    <!-- Quando c'è nodo artista applica questa regola -->
    <xsl:template match="artista"> 
        <xsl:value-of select="nome">
        </xsl:value-of>
        <br></br>
    </xsl:template>

</xsl:stylesheet>
Il risultato della trasformazione è visualizzare i nomi dei cantanti su ogni riga, cioè:
<html>
    Pippo Pluto
    Paperina Pericoli
	Jack Lemmond
    Frank Energy
</html>
Quando un Template non corrisponde a nessun elemento dell'XML questo semplicemente non viene applicato, non crea quindi nessun errore, il codice XSLT dell'esempio può essere ridotto se tutti gli elementi vuoti vengono scritti in questo modo <elemento/> (per esempio <xsl:apply-templates></xsl:apply-templates> può essere scritto così <xsl:apply-templates/> lo stesso vale per <br></br> che possiamo scrivere così <br/>).

Corsi
Corso CSSCorso CSS
Web Design ed Accessibilità secondo il W3C con CSS ed XHTML. A partire da 29 €.
Corso XMLCorso XML
Creazione di strutture XML, XSL ed altri linguaggi eXtensible. A partire da 39 €.
Sommario
Annunci

Mr.Webmaster

Pubblicità
Chi Siamo
Contattaci
Collabora
Note Legali
© 2003 - 2012 Mr.Webmaster - Il portale dei Webmaster Italiani - Tutti i diritti riservati | Powered by IKIweb Internet Media S.r.l. - PIVA 02848390122