Cari ragazzi, in questo articolo vi spiegherò nel più semplice dei modi cosa sia l'XML e vi proporrò un esempio di utilizzo dei dati strutturati in XML che fa uso delle trasformazioni XSLT.
XML sta per eXtensible Markup Language, mentre XSLT sta per eXtensible Stylesheet Language Transformations.
Voi già sapete come è fatto un documento html, almeno nei suoi elementi essenziali. Sapete anche che ad un documento html possono essere associati degli stili, e addirittura dei fogli di stile, che modificano il modo in cui i diversi elementi della pagina html sono visualizzati (rendered).
Dobbiamo tuttavia domandarci: da dove arrivano i dati che sono visualizzati su una pagina html? In alcuni rari casi essi vengono scritti insieme alla pagina html, manualmente, da qualcuno che la compila. Se questo metodo fosse generalizzato vi sarebbe una sola alternativa: o una enorme richiesta di esperti di html e fogli di stile... oppure un numero enormemente inferiore di pagine html sul web. Come stiano le cose lo sapete: la richiesta di esperti di html e fogli di stile è piuttosto limitata (servono ben altre competenze per operare professionalmente in questo campo) mentre le pagine html sul web sono miliardi e miliardi. Dunque, chi le scrive?
La risposta è nel fatto che i dati vengono archiviati e gestiti in modo indipendente da come sono rappresentati. Per fare un esempio: le cravatte vengono prodotte nelle fabbriche di cravatte, poi ogni commerciante le espone come vuole nella sua vetrina.
I dati sono ospitati in sistemi chiamati DBMS (Data Base Management System), e le pagine web sono l'equivalente delle vetrine in cui i commercianti le espongono. L'analogia finisce qui perché, mentre nella vita reale serve almeno un commesso che sistemi le cravatte in vetrina o sugli scaffali, nel mondo dell'informatica anche i commessi sono virtuali, cioè a dire sono delle procedure automatiche. Sono cioè dei programmi che qualcuno ha scritto.
Il problema è complicato dal fatto che è necessario assicurare la massima capacità, ai dati che attraversano la rete Internet, di transitare in tutti i suoi nodi, indipendentemente dalla presenza di sistemi hardware e software diversi, come pure di sistemi firewall. Serve, cioè, un formato per il loro trasporto che sia considerato affidabile e sia compreso da qualsiasi sistema informatico. La soluzione è la codifica ASCII.
Dunque un set di dati in XML è codificato in ASCII. Tutto quello che è codificato in ASCII può andare ovunque, è come un tiepido venticello primaverile che nessuno teme, di per sé.
Nei DBMS non è detto che i dati siano codificati in ASCI, anzi spesso non lo sono. Dunque un set di dati, che serve per realizzare una pagina html, per poter transitare in tutta tranquillità sulla rete deve prima essere ricodificato in ASCII. Questa operazione si chiama "serializzazione", un'operazione in cui l'XML gioca un ruolo importante ma di cui non ci occuperemo per il momento.
Osservate lo schema seguente:
Quando voi chiedete una pagina web (digitando un indirizzo), la richiesta viene servita da un web-server. Se il web-server ha bisogno, per "servire" la pagina web, di attingere a dei dati, si rivolge a un suo collaboratore chiamato "application server". Questo è responsabile di effettuare la richiesta dei dati al DBMS. Affinché i dati possano viaggiare sulla rete che connette tutti gli attori sulla scena, senza "destare sospetti", è necessario, come detto, che siano codificati in ASCII. Fanno eccezione alcuni tipi di dati standard, ad esempio i documenti PDF e le immagini gif, jpg e png, che sono da tutti considerati sicuri, ma vi sarà capitato spesso di dover fornire un'autorizzazione per accettare alcuni tipi di dati, ad esempio i dati binari in files con estensione exe. L'uso dell'ASCII fa sì che voi e i sistemi intermedi non dobbiate continuamente analizzare e autorizzare ogni transito di dati. L'ASCII è considerato sicuro.
Tuttavia l'ASCII non basta. E' necessario che i dati abbiano una "struttura" per poter essere interpretati correttamente dai sistemi che devono gestirli. Questa struttura deve corredare i dati con dei metadati, cioè ulteriori informazioni che spiegano il loro significato. Facciamo un esempio considerando il seguente set di dati:
124,4
8,97
132
Vi dicono qualcosa? Ora guardateli in questa forma:
- Altezza: 124,4 mm
- Larghezza: 59,2 mm
- Profondità: 8,97 mm
- Peso: 132 grammi
Ora, poiché è necessario che ci sia un metodo standard per aggiungere le metainformazioni alle informazioni, e il tutto deve essere codificato in ASCII, ecco che è stato sviluppato il linguaggio XML. In XML le metainformazioni sono distinte dai dati perché sono racchiuse all'interno dei simboli "<" e ">". Il nome delle metainformazioni è quello che viene chiamato "tag".
Anche l'HTML è scritto in XML
Chi decide come chiamare le metainformazioni, cioè i tag? Nel caso dell'HTML (ma non solo) la decisione spetta agli estensori dello standard HTML, cioè al w3c. In moltissimi casi però sono gli stessi programmatori che possono liberamente scegliere il nome dei tag, come meglio fa comodo a loro. Ad esempio, le informazioni precedenti potrebbero essere così impacchettate (strutturate):
<?xml version="1.0"?>
<oggetto>
<altezza unit="mm">124,4</altezza>
<larghezza unit="mm">59,2</larghezza>
<profondita unit="mm">8,97</profondita>
<peso unit="grammi">132</peso>
</oggetto>
Nulla impedirebbe di utilizzare tag diversi, ad esempio:
<?xml version="1.0"?>
<package>
<high unit="mm">124,4</high>
<width unit="mm">59,2</width>
<deep unit="mm">8,97</deep>
<weight unit="grams">132</weight>
</package>
La sola cosa importante è che il programma che riceve i dati conosca il significato dei tag usati dal programma che li ha confezionati per la spedizione. Ovvero che i due team di sviluppo si siano accordati.
Un esempio di dati in XML
<?xml version="1.0" encoding="UTF-8"?>
<catalog>
<cd>
<title>Empire Burlesque</title>
<artist>Bob Dylan</artist>
<country>USA</country>
<company>Columbia</company>
<price>10.90</price>
<year>1985</year>
</cd>
.
.
</catalog>
<catalog>
<cd>
<title>Empire Burlesque</title>
<artist>Bob Dylan</artist>
<country>USA</country>
<company>Columbia</company>
<price>10.90</price>
<year>1985</year>
</cd>
.
.
</catalog>
Esso contiene le informazioni relative a un catalogo di dischi. Possiamo ragionevolmente immaginare che le informazioni siano inizialmente contenute in un DBMS, in forma binaria (non ASCII) e che l'application server (vedi figura), su richiesta del web server le debba reperite e successivamente impacchettate (serializzate) in formato xml. I dati giungono in questa forma al web server, il quale deve restituirli al browser che aveva inizialmente richiesto la pagina html contenente tali dati.
Tuttavia presentare i dati in questo modo non è il massimo dell'eleganza, né della leggibilità. In realtà il web server deve inserire questi dati all'interno di una pagina html, magari insieme con molti elementi e informazioni, e deve farlo in modo automatico. Per fare ciò il programmatore del web server ha a disposizione diverse tecnologie, anzi una miriade, una delle quali è costituita dalle trasformazioni XSLT.
Il programmatore del web server può creare una documento XSLT nel quale inserisce le direttive di formattazione dei dati in oggetto utilizzando un linguaggio chiamato XSLT. Questo file definisce il modo in cui i dati grezzi in XML verranno trasformati in HTML. Ecco un esempio di trasformazione XSLT:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html>
<body>
<h2>My CD Collection</h2>
<table border="1">
<tr bgcolor="#9acd32">
<th>Title</th>
<th>Artist</th>
</tr>
<xsl:for-each select="catalog/cd">
<tr>
<td><xsl:value-of select="title"/></td>
<td><xsl:value-of select="artist"/></td>
</tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html>
<body>
<h2>My CD Collection</h2>
<table border="1">
<tr bgcolor="#9acd32">
<th>Title</th>
<th>Artist</th>
</tr>
<xsl:for-each select="catalog/cd">
<tr>
<td><xsl:value-of select="title"/></td>
<td><xsl:value-of select="artist"/></td>
</tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
Si noti che nel file XSLT sono presenti anche dei tag tipici dell'HTML. Per applicare la trasformazione XSLT al file XML originario è sufficiente, a questo punto, aggiungere una sola riga al file XML originario (evidenziata in rosso nel seguito):
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="http://www.w3schools.com/xsl/cdcatalog.xsl"?>
<catalog>
<cd>
<title>Empire Burlesque</title>
<artist>Bob Dylan</artist>
<country>USA</country>
<company>Columbia</company>
<price>10.90</price>
<year>1985</year>
</cd>
.
.
</catalog>
<?xml-stylesheet type="text/xsl" href="http://www.w3schools.com/xsl/cdcatalog.xsl"?>
<catalog>
<cd>
<title>Empire Burlesque</title>
<artist>Bob Dylan</artist>
<country>USA</country>
<company>Columbia</company>
<price>10.90</price>
<year>1985</year>
</cd>
.
.
</catalog>
Il risultato è questo:
My CD Collection
Title | Artist |
---|---|
Empire Burlesque | Bob Dylan |
Hide your heart | Bonnie Tyler |
Greatest Hits | Dolly Parton |
Still got the blues | Gary Moore |
Eros | Eros Ramazzotti |
One night only | Bee Gees |
Sylvias Mother | Dr.Hook |
Maggie May | Rod Stewart |
Romanza | Andrea Bocelli |
When a man loves a woman | Percy Sledge |
Black angel | Savage Rose |
1999 Grammy Nominees | Many |
For the good times | Kenny Rogers |
Big Willie style | Will Smith |
Tupelo Honey | Van Morrison |
Soulsville | Jorn Hoel |
The very best of | Cat Stevens |
Stop | Sam Brown |
Bridge of Spies | T`Pau |
Private Dancer | Tina Turner |
Midt om natten | Kim Larsen |
Pavarotti Gala Concert | Luciano Pavarotti |
The dock of the bay | Otis Redding |
Picture book | Simply Red |
Red | The Communards |
Unchain my heart | Joe Cocker |
Nota: a causa di un mio errore, nel video una parte del testo (sulla sinistra) non compare. Chiedo scusa, ma credo che il tutto sia, comunque, comprensibile. Questa volta è andata così.
Nessun commento:
Posta un commento