Introduzione
Come anticipato, tutte le definizioni di viste, form, query e report sono attuate in ProOne mediante l’utilizzo di XML. Questo linguaggio rappresentativo è ampiamente diffuso e consente di definire strutture anche molto complesse, mediante l’utilizzo di appositi tag. Per un approfondimento sul linguaggio XML si rimanda ai molti tutorial presenti on-line. In questa sede ci limitiamo ad alcune precisazioni e suggerimenti relativi alle casistiche di maggior interesse in ProOne.
Il tag
Il tag è l’elemento base della struttura XML ed esso si presenta nel modo seguente:
<nome>valore</nome>
dove il nome determina il significato del tag mentre il valore può essere un dato semplice (ad esempio un numero, una stringa, …) o, a sua volta, un costrutto XML con suoi tag. Pensando ad un elenco di prodotti, una rappresentazione XML potrebbe essere la seguente:
<listaProdotti>
<prodotto>
<nomeProdotto>Ferro da stiro Alfa</nomeProdotto>
<prezzoProdotto>1.23</prezzoProdotto>
</prodotto>
<prodotto>
<nomeProdotto>Biscotti della nonna</nomeProdotto>
<prezzoProdotto>2.39</prezzoProdotto>
</prodotto>
<prodotto>
<nomeProdotto>Grappa del nonno</nomeProdotto>
<prezzoProdotto>23.99</prezzoProdotto>
</prodotto>
</listaProdotti>
CDATA per poter rappresentare ogni dato
Nel costruire le viste, le form, le query e i report ci troveremo a dover inserire, come valori, formule e costrutti (soprattutto SQL) i quali potrebbero prevedere anche la presenza di caratteri “tecnici” quali, ad esempio “>” e “<“. Pensando quindi di dover inserire una clausola where in una query ci potremo trovare a dover gestire un caso come il seguente:
<sqlwhere>where articoli.prunit < 10</sqlwhere>
Purtroppo tale modalità risulta errata in quanto il carattere “<” è riservato ai tag e il contenuto XML risulterebbe non valido.
Una prima soluzione è quella di utilizzare la tecnica di escape già nota in HTML (linguaggio utilizzato per la realizzazione delle pagine web e assai diffuso). Con questa soluzione il caso di prima diviene:
<sqlwhere>where articoli.prunit < 10</sqlwhere>
dove, in luogo di <, appare la sequenza < che è la sequenza escape che riconduce al simbolo < (analogamente > riconduce a >). Questa soluzione, pur praticabile, potrebbe rendere assolutamente illeggibili le clausole SQL e rendere difficile la manutenzione degli XML.
Fortunatamente esiste una soluzione più adeguata che è quella di utilizzare la clausola CDATA per specificare che il contenuto del tag è una espressione contenente caratteri speciali:
<sqlwhere><[CDATA![where articoli.prunit < 10]]></sqlwhere>
i due delimitatori <[CDATA![ da un lato e ]]> dall’altro consentono di inserire all’interno qualsiasi carattere senza alcuna necessità di ricorrere agli escape.