- Introduzione a XML -
 
COSA SERVE PER QUESTO TUTORIAL
Chiedi sul FORUM | Glossario Un qualunque editor testuale e Internet Explorer, Opera o Firefox oppure un server che supporti ASP .Net o PHP
Tipologie, componenti e requisiti di un documento XML

DEFINIZIONE E TIPOLOGIE DI DOCUMENTI XML
XML e le sue relazioni con i database, SGML e (X)HTML.

Si sente parlare tanto di XML, ma di cosa si tratta in realtà? XML è un formato documentale, come RTF, CSV e così via. Il suo nome è un acronimo per eXtensible Markup Language, il che significa che XML è un formato basato su evidenziare informazioni tramite i tag. Esso è in sostanza un sottoinsieme semplificato di SGML, come lo è anche HTML, ma la conoscenza di SGML non è assolutamente richiesta per comprendere XML, basti sapere che si tratta di un formato documentale ancora più ampio, versatile e ricco di possibilità, al punto che sono davvero poche le sue implementazioni complete e per questo si usa in genere limitarlo creando formati proprio come XML e HTML.
A questo punto bisogna subito fare una distinzione di tipo qualitativo tra i tipi di documenti XML: documenti XML orientati ai dati e documenti XML orientati alla narrazione. Al primo tipo potrebbe ad esempio appartenere il seguente documento XML:


<clienti>
    <persona>
        <nome>Mario</nome>
        <cognome>Rossi</cognome>
        <altezza>1,80 m</altezza>
        <peso>75 Kg</peso>
        <professione>impiegato</professione>
    </persona>
    <persona>
        <nome>Carlo</nome>
        <cognome>Neri</cognome>
        <altezza>1,88 m</altezza>
        <peso>80 Kg</peso>
        <professione>insegnante</professione>
    </persona>
<clienti>

È facile intuire perché si tratti di un documento orientato ai dati: il suo obiettivo è quello di descrivere una lista di clienti e fornire le informazioni a loro riguardo. Si noti però che "orientato ai dati" non significa che XML sia un database, XML non va mai usato come database: il fatto di essere leggibile da una persona senza bisogno di strumenti intermediari (necessari invece per qualsiasi formato binario) lo rende molto prolisso, pesante e soprattutto non indicizzato. I documenti orientati ai dati possono essere ad esempio utili per trasmettere le informazioni attraverso la rete utilizzando XML, formato standard, universale, versatile e multi-piattaforma, ma non va mai usato come se fosse un database, se non per piccole quantità di dati.
Un documento orientato alla narrazione potrebbe invece essere quello che segue:


<mydoc>
    <corpo>
      <paragrafo>
        Questo è un <importante>documento</importante> orientato alla narrazione.
        Oggi bisogna comprare:
      </paragrafo>
      <lista>
        <linea>carne</linea>
        <linea>patate</linea>
        <linea>pesce</linea>
      </lista>
      <paragrafo>
        Tutto questo costerà <prezzo valuta="EUR">15</prezzo>
      </paragrafo>
    </corpo>
</mydoc>

Come si può vedere la struttura è più discorsiva e varia, un esempio sicuramente noto di documento XML orientato alla narrazione è un qualunque file XHTML. Che relazione c'è tra XML e XHTML? Semplicemente XHTML è HTML in tutto e per tutto se non per alcune questioni sintattiche dovute alle regole di ben-formazione (in inglese well-formedness) di XML. In generale si può dire che XML è più restrittivo rispetto ad HTML, ad esempio se in HTML è possibile avere un codice come quello che segue:


<html>
    <body>
        <p> <!-- Questo P non si chiude -->
            <br> <!-- I tag BR si aprono solamente -->

            <!-- 
            Il valore dell'attributo title che segue non è racchiuso tra
            tra virgolette e nell'attributo href è contenuto il carattere
            & (amperstand) invece della sua forma &amp;                   
            -->
            <a title=Link href="http://sito/path?val1=34&val2=35">Link</a>
    </body>
</html>

In XHTML si dovrebbe invece usare quello che segue:


<html>
    <body>
        <p>
            <br /> <!-- I tag BR devono essere chiusi -->

            <!--
            Il valore dell'attributo title è stato racchiuso
            tra virgolette e nell'attributo href è contenuto il carattere
            & (amperstand) è stato riscritto nella forma &amp;
            -->
            <a title="Link" href="http://sito/path?val1=34&amp;val2=35">Link</a>
        </p> <!-- Tutti gli elementi devono chiudersi -->
    </body>
</html>

È estremamente importante capire che XML non è affatto solamente XHTML, esso può avere infinite applicazioni e in questo tutorial se ne useranno anche di inventate proprio per evitare questa confusione e riuscire ad approfondire le potenzialità di XML.

LE PARTI DI UN DOCUMENTO XML
Tutti i tipi di nodi che possono comporre un documento XML.

Prendiamo ora in considerazione un documento XML e analizziamo ogni sua parte. Un documento XML è composto di nodi (secondo la terminologia del DOM), un nodo è l'unità minima che il parser riconosce: del testo normale è un nodo di testo, un elemento si definisce nodo di elemento e così via.


<?xml version="1.0" encoding="utf-8" standalone="no" ?>
<!DOCTYPE multa SYSTEM "multa.dtd"> 
<multa>
    <?miaapplicazione InserisciTimeStamp() ?>
    <!-- Ricordarsi di impostare l'autore -->
    <autore id="15">
        Carlo Rossi
    </autore>
    <destinatario nome="Paolo" cognome="Neri" />
    <motivazione>
        Intralcio al traffico
    </motivazione>
    <condizione>
        <![CDATA[ velocità < 20 Km/h ]]>
    </condizione>
</multa>

Analizziamo riga per riga il contenuto di questo ipotetico documento XML che descrive una multa:

<?xml version="1.0" encoding="utf-8" standalone="no" ?>

Questa riga è la dichiarazione XML, che indica la versione di XML in uso (in genere 1.0), la codifica usata e se il documento è autonomo (tramite l'attributo standalone), ovvero se è necessario accedere a risorse esterne per poter consultare correttamente il documento o meno. Esso non è indispensabile per ritenere un documento XML ben formato.

<!DOCTYPE multa SYSTEM "multa.dtd">

Questa sintassi indica la dichiarazione del Document Type, ovvero l'insieme di regole che descrivono il documento XML in questione come quali elementi/attributi è permesso che un certo elemento abbia e così via. In questo caso tutte queste regole si trovano in un file esterno, ma spiegare la sua sintassi va oltre lo scopo di questo articolo.

<multa>

Questa riga contiene il tag di apertura dell'elemento radice (in inglese root element). Un elemento può essere vuoto (come vedremo in seguito) o avere dei nodi figlio, ovvero altri elementi, nodi di testo e così via. L'elemento radice deve essere unico ed è il solo nodo davvero indispensabile perché un documento XML possa dirsi tale.

<?miaapplicazione InserisciTimeStamp() ?>

Questa riga è una istruzione di elaborazione (in inglese processing instruction) e serve per dare istruzioni specifiche al parser (programma che sta analizzando il codice XML). In questo caso ad esempio si suppone che l'applicazione sia in grado di comprendere ed eseguire istruzioni di elaborazione miaapplicazione e che quindi venga richiamata una (ipotetica) funzionalità InserisciTimeStamp che potrebbe ad esempio inserire data e ora correnti nel risultato di un'elaborazione del documento XML.

<!-- Ricordarsi di impostare l'autore -->

Questo è un semplice commento.

<autore id="15">

Questo è il tag di apertura dell'elemento autore, dotato di un attributo id con valore 15. Un elemento può avere quanti attributi (sempre formato da una coppia nome-valore) si desideri, a patto che abbiano nomi diversi.

Carlo Rossi

Un semplice nodo di testo, figlio dell'elemento autore.

</autore>

Il tag di chiusura dell'elemento autore. Tutti gli elementi in XML devono sempre chiudersi in questo modo, o se vuoti, in alternativa nelle modalità seguente:

<destinatario nome="Paolo" cognome="Neri" />

Questo è un elemento destinatario dotato di due attributi ma senza nessun nodo figlio, dunque vuoto. Si noti lo spazio e lo slash alla fine del tag, che indicano che l'elemento vuoto e non è dunque necessario specificare il tag di chiusura ("</destinatario>").
Saltiamo alcune righe e arriviamo alla sezione CDATA:

<![CDATA[ velocità < 20 Km/h ]]>

Una sezione CDATA è una porzione di documento XML racchiusa tra quadre come indicato (in questo caso il contenuto della sezione è "velocità < 20 Km/h"). Si noti che al suo interno è stato usato direttamente il simbolo "<" invece della sua rappresentazione sottoposta a escape "&lt;" come obbligherebbe XML in generale: questo proprio perché ci si trova all'interno di una sezione CDATA, dove le regole XML non valgono. Essa è stata studiata appositamente per contenere dati che utilizzano una sintassi non XML e che potrebbero entrare in conflitto con essa, si pensi ad esempio ad uno script JavaScript dove è a dir poco frequente l'uso di simboli non validi in XML come "<" e "&". Per ovviare a questo problema in HTML si è soliti inserire il codice di script e fogli di stile CSS all'interno di commenti, ma le sezioni CDATA risolvono il problema in maniera molto più efficiente.

BEN FORMAZIONE E VALIDITÀ
Requisiti di un documento XML e validità.

Perché un documento XML possa dirsi tale deve essere ben formato (in inglese well-formed) ovvero deve seguire un serie di regole. Quelle che creano problemi più di frequente sono le seguenti:

  • ogni elemento deve aprirsi e chiudersi, anche se vuoto; il tag di chiusura può essere omesso per gli elementi vuoti inserendo uno slash e uno spazio prima della chiusura del tag di apertura ("<tag />");
  • gli elementi non possono sovrapporsi e incrociarsi, ovvero ogni elemento deve aprirsi e chiudersi sempre all'interno dello stesso elemento padre ("<casa><palazzo></casa></palazzo>" sarebbe dunque una sintassi non accettabile);
  • deve esserci un solo elemento radice;
  • i valori degli attributi devono sempre essere racchiusi tra virgolette;
  • commenti e istruzioni di elaborazione non possono apparire all'interno di tag ("<tag <?istruzione ?>>" non è accettabile);
  • i caratteri "&" e "<" non possono comparire all'interno del testo di un elemento o nel valore di un attributo se non sottoposti ad escape rispettivamente tramite "&amp;" e "&lt;";
  • i nomi di attributi ed elementi (nomi XML) devono essere formati solo da caratteri alfanumerici (lettere maiuscole e minuscole dalla A alla Z, cifre a 0 a 9, caratteri accentati, greci e così via) e dai caratteri di punteggiatura "-" (trattino), "_" (underscore) e "." (punto); tutti i rimanenti sono vietati, inoltre un nome XML non può iniziare con una cifra;
Queste sono solo alcune delle regole indispensabili perché un parser (il software che interpreta il documento XML) possa ritenere il vostro codice ben formato e quindi procedere con l'analisi.
Spesso si confonde la ben formazione con la validità di un documento. La ben formazione sono un'insieme di regole comuni a tutti i tipi di documenti XML ed è assolutamente indispensabile, se non si verifica non si sta parlando di XML; la validazione invece è specifica per ogni tipologia di applicazione XML  e si riferisce al DTD (Document Type Definition, come già accennato) del documento, ad esempio XHTML ha delle sue regole, SVG altre e così via. La validazione si occupa di verificare che ogni elemento abbia come elementi figli o come attributi solamente quelli permessi per questo tipo di documento. La validazione anche se molto utile, non è un requisito indispensabile per un documento XML, che può anche non avere nessun DTD specificato.
 
<< INDIETRO by VeNoM00