Introduzione a XML

By Francesco Allassia

XML è l’acronimo di eXtensible Markup Language. A dispetto del nome non si tratta propriamente di un linguaggio, ma di un meta-linguaggio, cioè un linguaggio per costruire altri linguaggi.

XML deriva dal linguaggio SGML (Standard Generalized Markup Language). Entrambi sono linguaggi di marcatura testuale, ossia inseriscono all’interno del documento delle etichette o marcature (tag), che permettono di descrivere il contenuto del documento stesso

L’insieme dei tag utilizzabili per creare un documento XML non è predefinito come nel linguaggio HTML per il quale, un organismo unico internazionale (Web Consortium), ha definito l’insieme dei tag utilizzabili e il loro significato. L’autore del documento XML definisce i propri tag in base alla tipologia dei dati da descrivere.

I punti chiave di XML sono

  • definizione di un formato standard: XML è uno standard W3C e quindi un documento XML può essere elaborato da qualsiasi parser (analizzatore sintattico) o tool conforme allo standard
  • separazione del contenuto dalla rappresentazione dei dati: un documento XML definisce il contenuto informativo e non contiene alcuna informazione relativa alla formattazione dei dati

Di seguito un semplice esempio di file XML.

<?xml version="1.0"?>
<books>
      <book>
            <author>P.K. Dick</author>
            <title>Ubik</title>
      </book>
      <book>
            <author>Franz Kafka</author>
            <title>Il processo</title>
      </book>
</books>

Il documento precedente definisce una lista di libri con i corrispondenti autori e titoli. La struttura gerarchica di un documento XML, con l’annidamento degli elementi, permette una naturale rappresentazione di una collezione di libri e delle informazioni associate ad un singolo libro.

I tag utilizzati (books, book, author e title) hanno esclusivamente significato informativo e non contengono alcuna informazione di rendering. Ad esempio leggendo il contenuto di un elemento author possiamo risalire all’autore del libro in esame ma non sappiamo nemmeno se il documento verrà visualizzato come pagina HTML o altro.

Struttura di un documento XML

Così come un documento HTML deve essere redatto secondo alcune regole sintattiche ben precise perché sia visualizzabile da un browser anche un documento XML deve rispettare ben precise regole strutturali.

In particolare un documento XML si dice ben formato (well-formed) se sono rispettate le seguenti regole:

  • Ogni documento XML deve contenere un unico elemento di massimo livello (root element) che contenga tutti gli altri elementi del documento. Le sole parti di XML che possono stare all’esterno di questo elemento sono i commenti e le direttive di elaborazione (per esempio, la dichiarazione della versione di XML)
  • Ogni elemento deve avere un tag di chiusura o, se vuoti, possono prevedere la forma abbreviata (/>)
  • Gli elementi devono essere nidificati in modo appropriato, cioè i tag di chiusura devono seguire l’ordine inverso dei rispettivi tag di apertura
  • XML è sensibile alle lettere maiuscole e minuscole, per cui i nomi dei tag e degli attributi devono coincidere nei tag di apertura e chiusura anche in relazione a questo aspetto
  • I valori degli attributi devono sempre essere racchiusi tra singoli o doppi apici

Oltre a poter definire documenti ben formati è possibile validare la particolare struttura di un file XML, ad esempio per garantire che il tag author sia compreso all’interno del tag book.

A tal proposito il W3C ha definito due modalità:

  • DTD (Document Type Definition): si tratta di un particolare documento che definisce i tag utilizzabili in un documento XML e anche la loro struttura. Il seguente esempio mostra un DTD per il linguaggio XML di definizione di libri usato nel documento visto in precedenza

         <!ELEMENT books (book)+>
         <!ELEMENT book (author,title)>
            <!ELEMENT author (#PCDATA)>
            <!ELEMENT title (#PCDATA)>

Il DTD dichiara che il tag books contiene un numero non precisato di elementi book; questo a sua volta contiene i tag author e title che contengono solo caratteri.

  • Schema: rappresentano un modo alternativo ai DTD per esprimere la struttura di un documento. Il principale vantaggio degli schema consiste nel fatto che vengono essi stessi descritti in XML. Vediamo ad esempio lo schema per la definizione del documento XML precedente
            <xsd:schema xmlns:xsd="http://www.w3.org/1999/XMLSchema">
                    <xsd:element name="books" type="BooksType"/>
                    <xsd:complexType name="BookType">
                            <xsd:element name="book" type="BookType" minOccurs="0"
                            maxOccurs="unbounded"/>
                    </xsd:complexType>
                    <xsd:element name="book" type="BookType"/>
                    <xsd:complexType name="BookType">
                            <xsd:element name="author" type="xsd:string"/>
                            <xsd:element name="title" type="xsd:string"/>
                    </xsd:complexType>
            </xsd:schema>

Il documento precedente sarà contenuto in un file .xsd (XML Schema Definition).

L’elemento principale è “schema” che a sua volta contiene altri elementi

  • “element”: definisce un elemento del documento XML e le informazioni ad esso associato (numero di occorrenze,…)
  • “complexType”: definisce un tipo composto, ovvero un elemento che contiene a sua volta altri elementi e attributi

Maggiori informazioni sugli schema si possono trovare in http://www.w3.org.

Parser

I parser XML possono essere non validanti oppure validanti.

Mentre i primi verificano che il documento ricevuto in input sia ben formato, i secondi verificano anche la struttura del documento basandosi sul corrispondente DTD o schema.

I parser si distinguono anche in parser SAX (Simple API for XML) e DOM (Document Object Model). I parser SAX mettono a disposizione una API event-driven per la gestione dei documenti mentre i parser DOM restituiscono il documento XML con una struttura ad albero.

Di seguito una lista di alcuni parser XML disponibili:

  • Microsoft MSXML
  • Oracle XML Parser per Java
  • Sun Java API per XML Parsing (JAXP)
  • James Clark’s XP
  • IBM XML4J
  • IBM XML4C
  • James Clark’s expat XML Parser Toolkit
  • XML Parser per PHP

Tag: , , , ,

Lascia un commento