All'interno della categoria che prende il nome di famiglia di linguaggi XML rientrano una serie di tecnologie sviluppate negli ultimi anni che hanno a comune il fatto di essere basate su XML.
In questa guida vedremo di effettuare una panoramica su queste tecnologie, analizzandone l'ambito di utilizzo e cercando di descriverne i principi base ed il loro funzionamento, in modo da fare il punto della situazione sui molteplici aspetti del "mondo XML".
Molte di queste tecnologie ormai sono molto diffuse e vengono utilizzate normalmente su Internet (come ad esempio XML, XML Namespace, DOM, XHTML, XSL, etc.) altre invece sono attualmente meno diffuse (vedi ad esempio XLink, XQuery, RDF) ma andranno sicuramente a costituire le fondamenta del Web di domani.
Descriviamo brevemente le componenti che sono alla base di tutte queste tecnologie.
L'Extensible Markup Language (XML) è un metalinguaggio, ovvero un insieme di regole base utilizzate per creare altri linguaggi. Dalla sua nascita avvenuta nel 1998, ha assunto un ruolo centrale per quanto riguarda lo sviluppo di nuove tecnologie in ambito Web e non solo.
XML permette di creare nuovi linguaggi per rappresentare informazione strutturata in formato testuale. Il suo successo è dovuto a molti motivi e tra i principali possiamo sicuramente includere la sua semplicità, la sua espandibilità e la sua portabilità.
La specifica di XML descrive un insieme di regole per definire linguaggi basati su tag (marcatori) all'interno dei quali inserire in maniera strutturata il contenuto informativo da rappresentare.
I tag devono essere inseriti correttamente l'uno dentro l'altro, ad ogni tag di apertura deve corrispondere un tag di chiusura e gli attributi dei tag devono essere racchiusi tra apici. Utilizzando queste semplici ed essenziali regole l'utente ha la possibilità di creare un nuovo linguaggio definendo i tag e gli attributi più appropriati a memorizzare l'informazione che si vuole trattare.
Inoltre XML favorisce l'interoperabilità in quanto è un formato testuale, quindi facilmente trasferibile ed elaborabile su differenti piattaforme hardware e software.
Una caratteristica fondamentale di XML è quella di occuparsi del contenuto dell'informazione e non la sua rappresentazione. La modalità di rappresentazione dell'informazione può essere scelta in un secondo momento e, partendo dallo stesso file XML, possiamo rappresentare l'informazione contenuta al suo interno in differenti modi, come ad esempio in HTML, XHTML, SVG, etc.
Come esempio vediamo adesso di memorizzare in formato xml le informazioni relative ad una rubrica. Tipicamente in una rubrica, sono conservati alcuni dati (quali ad esempio nome, cognome, indirizzo, numero di telefono) riguardanti una determinata persona e tutto questo in XML può essere espresso con:
<?xml version="1.0"?>
<rubrica>
<persona>
<nome>Mario</nome>
<cognome>Rossi</cognome>
<indirizzo>
<via>via bianchi 1</via>
<cap>00000</cap>
<citta>Roma</citta>
</indirizzo>
<telefono>
<telefono_fisso>123456</telefono_fisso>
<cellulare>987656412</cellulare>
</telefono>
</persona>
</rubrica>
In questo esempio abbiamo descritto in formato XML le informazioni relative ad una rubrica, andando a creare gli opportuni tag ed annidandoli in modo tale da rappresentare la struttura dati che avevamo in mente.
Proprio a causa delle caratteristiche descritte, XML ha incontrato molto successo come formato per lo scambio di dati tra applicazioni differenti.
Affinché due applicazioni possano scambiarsi dei dati in formato XML è necessario però che queste conoscano come viene strutturata l'informazione all'interno del file, ovvero quali sono e come sono chiamati i tag e gli attributi che costituiscono il file XML.
Per questo scopo sono state sviluppate alcune tecnologie quali XML Namespace, Dtd e XML Schema.
XML Namespace nasce con lo scopo di evitare possibili ambiguità tra i nomi degli elementi che fanno parte di un linguaggio basato su XML, visto che utilizzando i Namespace siamo in grado di identificare univocamente i nomi dei tag e degli attributi.
Un XML Namespace è un insieme di nomi, utilizzato per definire gli elementi e gli attributi di un linguaggio XML, a cui viene associato un URI (Universal Resource Identifier) di riferimento tramite il quale identificare in maniera assoluta il namespace. Un URI (Universal Resource Identifier) è una stringa di caratteri che definisce il nome di una risorsa sul web ed è per definizione unica.
A questo insieme di nomi viene associato un prefisso che utilizzato in abbinata con il nome dell'elemento, permette di riferire univocamente tutti gli elementi.
Come esempio vediamo di definire un namespace per l'insieme di elementi utilizzati per descrivere la rubrica.
<?xml version="1.0"?>
<mia_rubrica:rubrica xmlns:mia_rubrica="http://indirizzo_del_sito/mia_rubrica_ns">
<mia_rubrica:persona>
<mia_rubrica:nome>Mario</mia_rubrica:nome>
<mia_rubrica:cognome>Rossi</mia_rubrica:cognome>
<mia_rubrica:indirizzo>
<mia_rubrica:via>via bianchi 1</mia_rubrica:via>
<mia_rubrica:cap>00000</mia_rubrica:cap>
<mia_rubrica:citta>Roma</mia_rubrica:citta>
</mia_rubrica:indirizzo>
<mia_rubrica:telefono>
<mia_rubrica:telefono_fisso>123456</mia_rubrica:telefono_fisso>
<mia_rubrica:cellulare>987656412</mia_rubrica:cellulare>
</mia_rubrica:telefono>
</mia_rubrica:persona>
</mia_rubrica:rubrica>
Attraverso l'attributo xmlns (inserito nel primo tag del nostro file) definiamo l'URI di riferimento associato al nostro namespace e gli assegniamo un prefisso (mia_rubrica) che sarà utilizzato in abbinata con il nome dell'elemento per identificare in maniera univoca gli elementi del nostro file.
Per quanto riguarda la descrizione della struttura di un file XML, esistono due tecnologie: Dtd e XML Schema.
Document Type Definition (Dtd) è un linguaggio utilizzato per definire la struttura di un file XML ed è storicamente il primo metodo utilizzato per tale scopo. È caratterizzato da una sintassi complessa, difficilmente estendibile e totalmente estranea al mondo XML.
Per vedere un esempio di Dtd proviamo a definire la struttura del nostro file XML che descrive la rubrica.
<!DOCTYPE rubrica [
<!ELEMENT rubrica (persona)>
<!ELEMENT persona (nome, cognome, indirizzo, telefono)>
<!ELEMENT nome (#PCDATA)>
<!ELEMENT cognome (#PCDATA)>
<!ELEMENT nome (#PCDATA)>
<!ELEMENT indirizzo (via, cap, citta)>
<!ELEMENT via (#PCDATA)>
<!ELEMENT cap (#PCDATA)>
<!ELEMENT citta (#PCDATA)>
<!ELEMENT telefono (telefono_fisso, cellulare)>
<!ELEMENT telefono_fisso (#PCDATA)>
<!ELEMENT cellulare (#PCDATA)>
]>
Per ovviare alle limitazioni della Dtd è nato XML Schema, ovvero un linguaggio, basato su XML, per definire la struttura di un documento XML.
XML Schema è uno strumento molto più potente di Dtd per descrivere la struttura di un file XML in quanto è più espandibile, permette di ottenere una migliore caratterizzazione dei tipi di dati e ha una sintassi basata su XML, quindi possiamo utilizzare gli strumenti XML per lavorare con gli Schema.
La struttura del nostro esempio, espressa con un XML Schema, diventa:
<?xml version="1.0"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:element name="rubrica" type="tipo_rubrica"/>
<xsd:complexType name="tipo_rubrica">
<xsd:sequence>
<xsd:element name="persona" type="tipo_persona"/>
</xsd:sequence>
</xsd:complexType>
<xsd:complexType name="tipo_persona">
<xsd:sequence>
<xsd:element name="nome" type="xsd:string"/>
<xsd:element name="cognome" type="xsd:string"/>
<xsd:element name="indirizzo" type="tipo_indirizzo"/>
<xsd:element name="telefono" type="tipo_telefono"/>
</xsd:sequence>
</xsd:complexType>
<xsd:complexType name="tipo_indirizzo">
<xsd:sequence>
<xsd:element name="via" type="xsd:string"/>
<xsd:element name="cap" type="xsd:decimal"/>
<xsd:element name="citta" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
<xsd:complexType name="tipo_telefono">
<xsd:sequence>
<xsd:element name="telefono_fisso" type="xsd:decimal"/>
<xsd:element name="cellulare" type="xsd:decimal"/>
</xsd:sequence>
</xsd:complexType>
</xsd:schema>
Un'altra componente che ha favorito il successo di XML è la definizione del "DOM" (Document Object Model).
Il DOM è un'API (Application Programmer Interface) standard per accedere e modificare la struttura di un documento XML. Il DOM lavora su di una rappresentazione ad albero associata al file XML, ovvero opera su di un albero gerarchico di oggetti rappresentanti il contenuto del file XML.
tramite il DOM possiamo sviluppare applicazioni che accedono alle componenti di un file XML e che vanno ad analizzarne o a modificarne il contenuto.
Ad esempio abbiamo dei metodi che ci permettono di inserire nuovi nodi nel documento (appendChild), di eliminarli (removeChild), di leggere le proprietà di un nodo quali il suo nome (nodeName), il suo valore (nodeValue) o accedere ai suoi nodi figli (childNodes).
Queste tecnologie che abbiamo velocemente descritto costituiscono la base su cui sono state costruite le altre tecnologie XML operanti in differenti settori.
Nel corso della guida analizzeremo le tecnologie della famiglia XML che si occupano dell'elaborazione dell'informazione, della sua trasformazione e del suo recupero; del collegamento tra risorse e dell'autenticazione e della sicurezza dei documenti.