# 2 - Struttura del documento XML

Una delle caratteristiche principali dell'XML e' la possibilita' di fornire una struttura a un documento. Ogni documento XML comprende

- una struttura logica, simile a un modello che indica quali elementi includere in un documento e in quale ordine
- una struttura fisica che contiene i dati effettivi utilizzati in un documento, quali il testo memorizzato nella memoria del computer, un'immagine memorizzata nel WWW e cosi' via.

Per comprendere la struttura di un documento XML, osserviamo questo modello:

Un docuemnto XML puo' includere un gran numero di tiupi di istruzioni diverse. Gli elementi di dati del documento sono tra i piu' comuni. I documenti xml possono includere anche dichiarazioni markup, vale a dire istruzioni al parser XML e istruzioni di elaborazione pe rprogrammi di applicazioni che elaborano i dati descritti nel documento.

Tutti i documenti XML iniziano con una dichiarazione XML che ha l'aspetto di un'istruzione di elaborazione, sebbene non lo sia dal punto di vista tecnico. La dichiaraziione xml identifica il documento come xml e fornisce il numero della versione dello standard xml utilizzato. Tale dichiarazione puo' includere informazioni aggiuntive, che tuttavia non sono rilevanti per gli obiettivi questa lezione. La forma della dichiarazione xml da utilizzare e' la seguente:

`<?xml version = "1.0"?>`

I commenti in xml sono gli stessi dell'html `<!-- ... -->`. Per ovvi motivi i commenti non possono contenere due trattini adiacenti

I nomi xml vengono utilizzati per etichettare gli elementi e gli attributi. Un nome xml deve iniziare con una lettera o un carattere di sottolineatura e puo' includere cifre, trattini di unione e punti. Non vi sono limiti alla lunghezza dei nomi xml, per i quali la capitalizzazione e' rilevante: `Body, body` e `BODY` sono tutti nomi distinti.

Esiste un piccolo gruppo di regole sintattiche per XML che non sono invece necessarie in html. Tuttavia XHTML specifica regole simili rispettate dal linguaggio markup html di questo corso. Tali regole vengono descritte nelle prossime lezioni.

Ogni documento xml definisce un unico elemento radice il cui tag di apertura deve apparire sulla prima riga del codice xml. Tutti gli elementi di un documento xml devono venire annidati all'interno dell'elemento radice. I tag xml sono preceduti e seguiti, come quelli dell'html, da parentesi angolari.

In xml le regole di sintassi sono piu' severe e uniformi rispetto a quelle di html. Ogni elemento xml che sia in grado di avere del contenuto deve disporre di un tag di chiusura. Le seguenti righe sono valide in html, ma per esserlo anche in xml avrebbero bisogno del tag di chiusura `</p>`:

`<p> Gaul is devided into three aprts.
<p> Cesar was quite a writer.`

Gli elementi che non inlcudono del contenuto devono utilizzare un tag con la seguente forma:

`<element_name />`

In html puo' accadere di annidare impropriamente dei tag, come nell'esempio:

`In conclusion, I say <i> <b> Pick up the book and read it </i> </b>`

In xml questa riga non sarebbe valida, al contrario della versione seguente:

`In conclusion, I say <b> <i> Pick up the book and read it </i> </b>`

## Attributi e tag

Come per html, i tag xml possono avere attributi specificati con assegnazioni "nome/valore". In alcuni casi, in html il valore dell'attributo in un'assegnazione del genere non ha bisogno di venire collocato tra virgolette; in xml cio' non e' valido perche' tutti i valori degli attributi devono venire collocati tra virgolette singole o doppie.

Un documento xml rigorosamente conforme alle regole di sintassi viene considerato un documento formato correttamente.

Si consideri il seguente esempio, semplice, ma completo:

`<?xml version = "1.0"?>
<ad>
`

<year> 1960 </year>
<make> Cessna </make>
<model> Centurian </model>
<color> Yellow with withe trim </color>
<location>
<city> Gulfport </city>
<state> Gulfport </state>
</location>
</ad>

Gli attributi non vengono utilizzati in xml nello stesso modo dell'html. In entrambi lo scopo dell'attributo e' quello di specificare informazioni aggiuntive su un tag o sul suo contenuto. Con html si e' costretti ad utilizzare un set ristretto di tag e i loro attributi, mentre in xml l'utente puo' creare i tag a seconda delle proprie esigenze ed in numero illimitato. Inoltre l'ultente puo' attribuire al tag il significato desiderato. Cosi', invece di creare attributi per modificare il significato di un tag, e' possibile creare direttamente un nuovo tag con il significato desiderato

I tag annidati si rivelano spesso migliori degli attributi. E' possibile infatti che un documento o una categoria di documenti abbia bisogno in futuro di crescere dal punto di vista della complessita' strutturale. I tag annidati possono venire aggiunti ai tag esistenti per descriverne le dimensioni e la complessita' crescenti. Agli attributi invece non e' possibile aggiungere nulla, per cui uno dei loro problemi e' appunto l'impossibilita' totale di descrivere la struttura dei documenti

Gli attributi dovrebbero venire utilizzati sempre per identificare numeri o nomi di elementi, quindi allo stesso modo in cui vengono utilizzati gli attributi `id` e `name` in html.

Le tre versioni seguenti di un elemento chiamato `patient` illustrano l'ampia facolta' di scelta di tag e attributi:

`<!-- A tag with one attribute -->
<patient name = "Maggie Dee Magpie">
...
</patient>
<!-- A tag with one nested tag -->
<patient>
`

<name> Maggie Dee Magpie </name>
...
</patient>
<!-- A tag with one nested tag, which contains three nested tags -->
<patient>
<name>
<first> Maggie </first>
<middle> Dee </middle>
<last> Dee </last>
</name>
...
</patient>