eXtensible Markup Language Tutorial - by Marco Giannì
Capitolo IV: Ampliare i documenti XML

Utilizzo dei modelli

Un foglio di stile comprende uno o più modelli che a loro volta contengono dei pattern. I modelli forniscono la struttura dei documenti generati dal codice. Gli elementi generati possono essere di qualsiasi tipo, poiché non è necessario che i modelli XSL contengano riferimenti ai dati XML.

La reale potenzialità dei fogli di stile consiste nel generare dati XML in nuovi documenti. I modelli XSL fanno riferimento ai dati XML mediante i pattern.

PATTERN

Il linguaggio XSL utilizza i pattern per specificare gli elementi XML a cui viene applicato il modello XSL. Questo metodo di corrispondenza dei pattern rende XSL un linguaggio di dichiarazioni in contrapposizione con i linguaggi basati sulle procedure. Questo significa che i pattern definiscono il "livello" specifico della struttura del documento da far corrispondere identificandone la gerarchia della struttura. Per avere un'idea della struttura di un modello, sarà sufficiente prendere in esame un semplice foglio di stile. Sarà quindi necessario creare un documento XML a cui applicare il foglio di stile:

<CATALOG>
 <PLANT>
  <COMMON>Bloodroot</COMMON>
  <BOTANICAL>Sanguinaria canadensis</BOTANICAL>
  <ZONE>4</ZONE>
  <LIGHT>Mostly Shady</LIGHT>
  <PRICE>$7.05</PRICE>

  <AVAILABILITY USONLY="true">02/01/99</AVAILABILITY>

 </PLANT>
</CATALOG>

Quindi procedere con la creazione di un foglio di stile XSL per un unico modello dell'elemento Common:

<?xml version="1.0"?>
<xsl:template xmlns:xsl="uri:xsl">
 <HTML>
  <BODY>
   <xsl:repeat for="CATALOG/PLANT">
    <DIV>
     <SPAN STYLE="font-weight:bold; font-size:20">
      <xsl:get-value for="COMMON"/>
     </SPAN>
    </DIV>
   </xsl:repeat>
  </BODY>
 </HTML>
</xsl:template>

Quando il documento XML viene elaborato con il foglio di stile XSL, l'elaboratore genera il seguente codice HTML:

<HTML>
<BODY>
<DIV>
<SPAN STYLE="font-weight:bold; font-size:20">
 Bloodroot
</SPAN>
</DIV>
</BODY>
</HTML>

ANALISI DEL MODELLO

Ogni modello comprende uno o più pattern. L'esempio che segue riporta la sezione che contiene due pattern:

<xsl:repeat for="CATALOG/PLANT">
 <DIV>
  <SPAN STYLE="font-weight:bold; font-size:20">
   <xsl:get-value for="COMMON"/>
  </SPAN>
 </DIV>
</xsl:repeat>

Il primo pattern specifica qualsiasi elemento Plant secondario all'elemento Catalog. Il secondo pattern per questa regola specifica l'elemento Common. In base alla regola, qualsiasi dato trovato nell'elemento del pattern verrà inserito nell'elemento Span a cui viene quindi applicato lo stile "font-weight:bold; font-size:20". Questo modello espresso in modo discorsivo, sarebbe formulato nel seguente modo: "Ripetere quanto segue per ogni elemento Plant secondario dell'elemento Catalog: prendere il valore dell'elemento Common e inserirlo nell'elemento Span applicando il grassetto e una dimensione di carattere pari a 20".

Il modello viene applicato a ogni elemento che risponda al pattern o ai criteri definiti in esso.

Questa è una delle potenzialità del linguaggio XSL. Utilizzando le funzionalità di pattern matching, o corrispondenza dei pattern, del linguaggio XSL, è possibile riorganizzare in modo efficiente i dati XML, per soddisfare esigenze precise. Se non si desidera includere uno o più elementi nel risultato finale, sarà sufficiente escludere il pattern relativo a tali elementi. Se invece si desidera includere un unico elemento in una sezione specifica del documento, è possibile creare un pattern dettagliato per convertirlo per la visualizzazione.

STRUTTURA A MODELLO SINGOLO

Il modello inizia con il tag <xsl:template xmlns:xsl="uri:xsl"> e termina con il tag </xsl:template>. Questi due tag, o contenitori, facilitano l'applicazione di diverse sezioni del foglio di stile quando vengono utilizzati più modelli. Dal momento che questo foglio di stile contiene un solo modello, è possibile utilizzare anche il contenitore <xsl:document> </xsl:document>. Ad esempio il foglio di stile seguente equivale a quello precedente:

<?xml version="1.0"?>
<xsl:document xmlns:xsl="uri:xsl">
 <HTML>
  <BODY>
   <xsl:repeat for="CATALOG/PLANT">
    <DIV>
     <SPAN STYLE="font-weight:bold; font-size:20">
      <xsl:get-value for="COMMON"/>
     </SPAN>
    </DIV>
   </xsl:repeat>
  </BODY>
 </HTML>
</xsl:document>

Ambedue i fogli di stile sono esempi di una struttura a modello singolo, ossia ciascuno dei due fogli di stile è costituito da un unico modello. Ma un foglio di stile può avere anche una struttura a più modelli, nella quale il foglio di stile contiene più modelli che possono essere applicati indipendentemente dagli altri.

STRUTTURA A PIU' MODELLI

Un foglio di stile a più modelli utilizza i tag <xsl:stylesheet> </xsl:stylesheet>, che a loro volta possono contenere diverse coppie di tag <xsl:template> </xsl:template>. Ciascuna di queste coppie può essere applicata indipendentemente dalle altre. Nell'esempio che segue è possibile esaminare in modo più approfondito questa struttura:

<CATALOG>
 <PLANT BESTSELLER="no">
  <NAME>
   <COMMON>Bloodroot</COMMON> 
   <BOTAN>Sanguinaria canadensis</BOTAN> 
  </NAME>
  <GROWTH>
   <ZONE>4</ZONE>
   <LIGHT>Mostly Shady</LIGHT>
  </GROWTH>
  <SALESINFO>
   <PRICE>$3.00</PRICE> 
   <AVAILABILITY>4/21/99</AVAILABILITY> 
  </SALESINFO>
 </PLANT>
 		
 <PLANT BESTSELLER="yes">
  <NAME>
   <COMMON>Columbine</COMMON> 
   <BOTAN>Aquilegia canadensis</BOTAN> 
  </NAME>
  <GROWTH>
   <ZONE>3</ZONE> 
   <LIGHT>Mostly Shady</LIGHT> 
  </GROWTH>
  <SALESINFO>
   <PRICE>$9.00</PRICE> 
   <AVAILABILITY>4/10/99</AVAILABILITY> 
  </SALESINFO>
 </PLANT>

 <PLANT BESTSELLER="no">
  <NAME>
   <COMMON>Marsh Marigold</COMMON> 
   <BOTAN>Caltha palustris</BOTAN> 
  </NAME>
  <GROWTH>
   <ZONE>4</ZONE> 
   <LIGHT>Mostly Sunny</LIGHT> 
  </GROWTH>
  <SALESINFO>
   <PRICE>$9.00</PRICE> 
   <AVAILABILITY>4/19/99</AVAILABILITY> 
  </SALESINFO>
 </PLANT>
</CATALOG>

Nel listato seguente è riportato il foglio di stile dell'esempio precedente, il quale contiene diversi modelli che vengono applicati in modo indipendente alle diverse sezioni del documento XML:

<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="uri:xsl">
 <xsl:template match="/">
  <HTML>
   <BODY>
    <TABLE BORDER="1">
     <TR STYLE="font-weight:bold">
      <TD>Common Name</TD>
       <TD>Botanical Name</TD>
       <TD>Zone</TD>
       <TD>Light</TD>
       <TD>Price</TD>
       <TD>Availability</TD>
      </TR>
      <xsl:for-each select="CATALOG/PLANT">
       <TR>
        <xsl:apply-templates/>
       </TR>
      </xsl:for-each>
    </TABLE>
   </BODY>
  </HTML>
 </xsl:template>

 <xsl:template match="NAME">
  <TD><xsl:value-of select="COMMON"/></TD>
  <TD><xsl:value-of select="BOTAN"/></TD>
 </xsl:template>

 <xsl:template match="GROWTH">
  <TD><xsl:value-of select="ZONE"/></TD>
  <TD><xsl:value-of select="LIGHT"/></TD>
 </xsl:template>

 <xsl:template match="SALESINFO">
  <TD><xsl:value-of select="PRICE"/></TD>
  <TD><xsl:value-of select="AVAILABILITY"/></TD>
 </xsl:template>
</xsl:stylesheet>

Il foglio di stile inizia con il tag <xsl:stylesheet> e termina con il tag </xsl:stylesheet>.

La sigla xmlns è una parola riservata e serve per identificare un particolare namespace; ad esempio in questo caso tutte le parole riservate che iniziano con xsl: fanno parte del vocabolario individuato dall'URL htttp://www.w3.org/TR/WD-xsl.

Dal momento che il documento XML può avere un solo elemento principale e che l'XSL è un profilo di XML, il solo elemento xsl:stylesheet consente di includere più elementi xsl:template nel foglio di stile.

Il pattern di questo modello è semplicemente "/" e definisce l'elemento principale del documento XML. E' presente anche l'elemento xsl:for-each all'interno del modello, che definisce un altro pattern, CATALOG/PLANT, e stabilisce che la struttura generata che segue deve essere applicata a ogni sezione corrispondente al pattern. All'interno di tale struttura è contenuto l'elemento xsl:apply-templates che avvia la ricerca da parte dell'elaboratore di altri modelli nel foglio di stile, ciascuno con il suo pattern. Poiché l'elemento xsl:apply-templates si trova all'interno del pattern CATALOG/PLANT, gli altri modelli verranno applicati solo quando verrà trovata una corrispondenza all'interno dell'elemento. Ad esempio, il modello NAME verrà applicato solo agli elementi nella gerarchia CATALOG/PLANT/NAME.

Facciamo una sintesi di quanto visto fino ad ora.

Il linguaggio XSL trasforma l'XML in elementi di output. Questi elementi di output vengono tipicamente utilizzati per preparare i dati per la visualizzazione applicando formattazione ai dati XML, ma questo non ne costituisce l'unico utilizzo possibile. Questa trasformazione avviene in questa sequenza:

  1. Un foglio di stile specifica pattern che corrispondono ai dati rilevati nel documento XML. Questi pattern fanno parte di singoli modelli che contengono strutture di output.
  2. L'elaboratore rileva i dati che corrispondono ai pattern e li converte nella struttura di output.
  3. Una volta elaborato l'intero foglio di stile, nella memoria del computer esiste una nuova struttura di dati basata sull'output del foglio di stile.
<indietro home page avanti>

Copyright © 2000-2005. Tutti i diritti sono riservati. Per informazioni: mgianni@infinito.it