Interrogazioni basate su viste

Esempio

Ordinare i dipartimenti in modo discendente in base alla somma degli stipendi pagati. In questo caso occorrono due documenti XSL. Il primo realizza una vista delle due tabelle della base di dati, in cui compaiono solamente il nome e la somma degli stipendi pagati agli impiegati di ciascun dipartimento:

<?xml version="1.0"?>
<xsl:template xmlns:xsl="http://www.w3.org/TR/WD-xsl">
  <xsl:script>
    function somma(
nodo)
    {
      
totale=0;
      
path = "//IMPIEGATO[@Dipart ='"+nodo.text+"']/Stipendio";
      
stipendi = nodo.selectNodes(path);
      for (
i=stipendi.nextNode();i;i=stipendi.nextNode())
        
totale +=i.nodeTypedValue;
      return formatNumber(
totale*1000000,"#,##0")
    }
  </xsl:script>
  <xsl:pi name="
xml-stylesheet">
    <xsl:attribute name="
type">text/xsl</xsl:attribute>
    <xsl:attribute name="
href">Query26b.xsl</xsl:attribute>
  </xsl:pi>
  <xsl:element name="
VISTA">
    <xsl:for-each select="//
DIPARTIMENTO/@Nome">
      <xsl:element name="
DIPARTIMENTO">
        <xsl:element name="
Nome"><xsl:value-of/></xsl:element>
        <xsl:element name="
SommaSt">
          <xsl:eval>somma(this)</xsl:eval>
        </xsl:element>
      </xsl:element>
    </xsl:for-each>
  </xsl:element>
</xsl:template>

Il risultato di questo foglio di stile è il seguente documento XML:

<?xml-stylesheet type="text/xsl" href="Query26b.xsl"?>
<VISTA>
<DIPARTIMENTO>
<Nome>
Amministrazione</Nome>
<SommaSt>
125.000.000
</SommaSt>
</DIPARTIMENTO>
[…]
</VISTA>

Questo documento realizza la vista e ad esso bisogna applicare un altro foglio di stile per avere il risultato dell'interrogazione. Tale foglio di stile è indicato con il nome "Query26b.xsl" ed è:

<?xml version="1.0"?>
<xsl:template xmlns:xsl="http://www.w3.org/TR/WD-xsl">
[…]
  <TD ALIGN="CENTER">
  <xsl:for-each select="
VISTA/DIPARTIMENTO"
                order-by="-number(
SommaSt)">
    <DIV><xsl:value-of select="
Nome"/></DIV>
  </xsl:for-each>
  </TD>
  <TD ALIGN="CENTER">
  <xsl:for-each select="
VISTA/DIPARTIMENTO"
                order-by="-number(
SommaSt)">
    <DIV><xsl:value-of select="
SommaSt"/></DIV>
  </xsl:for-each>
  </TD>
[…]
</xsl:template>

Finalmente, applicando alla vista il secondo foglio di stile, otteniamo il risultato dell'interrogazione:

Dipartimenti

Somma stipendi

Direzione
Amministrazione
Produzione
Distribuzione
Ricerca

153.000.000
125.000.000
82.000.000
45.000.000
0

Riferimenti bibliografici: [1] [3] [5] [19] [23] [24] [25] [26] [32] [33] [34] [35] [36] [37] [38]

Slide precedenteProssima slideIndiceBibliografia

Altre slides: