Il misterioso mondo dei namespaces

21 aprile 2006

Uno dei concetti più difficili da digerire per chi si avvicina per la prima volta a XML e agli XML Schema è quello di namespace. Nei confronti tra colleghi e nei corsi che ho avuto occasione di tenere, la presenza in un documento XML di tag con prefissi e l’indicazione del fatidico attributo xmlns ha sempre creato panico.

In questo articolo vorrei provare a dileguare il panico da namespace cercando di spiegarne il funzionamento e le finalità.

Il problema

Uno dei grandi vantaggi di XML deriva dal fatto che esso è un metalinguaggio, cioè un linguaggio per creare altri linguaggi di markup. Questa caratteristica ci offre la libertà di crearci il nostro linguaggio lasciandoci decidere come vogliamo strutturare un documento e quali tag utilizzare.

Quindi, se voglio creare un mio linguaggio di markup per definire, ad esempio, ricette da cucina, non ho da fare altro che definire la struttura che voglio dare alle ricette e i tag da utilizzare. Supponiamo di aver deciso di definire una ricetta nel nostro linguaggio, chiamiamolo XMLRicette, e che il seguente sia un esempio di ricetta:

Listato 1. Esempio di ricetta in XML

<ricetta>
 <titolo>Pasta, aglio olio e peperoncino</titolo>
 <autore>Anonimo</autore>
 <ingredienti>
  <ingrediente>200 gr. di spaghetti</ingrediente>
  <ingrediente>uno spicchio di aglio</ingrediente>
  <ingrediente>olio</ingrediente>
  <ingrediente>un pizzico di peperoncino</ingrediente>
  <ingrediente>sale</ingrediente>
 <ingredienti>
 <procedimento>
  Far bollire dell’acqua in una pentola…
 </procedimento>
</ricetta>

La struttura sembra ragionevole, la scelta dei tag pure. Siamo soddisfatti del nostro nuovo linguaggio.

Supponiamo, però, che ad un certo punto decidiamo che non sarebbe male arricchire il nostro linguaggio con la possibilità di inserire una bibliografia in fondo a ciascuna ricetta. Abbiamo sentito parlare molto di un linguaggio basato su XML che consente di definire bibliografie: XMLBiblio.

Non sarebbe male utilizzarlo per integrare il nostro XMLRicette. Avremmo il vantaggio di utilizzare un linguaggio noto e ci eviteremmo di doverci reinventare quello che altri hanno già definito.

Bene! Diamo un’occhiata ad un esempio di bibliografia descritta con XMLBiblio:

Listato 2. Esempio di Bibliografia

<?xml version=”1.0″ ?>
<biblio>
 <autore>Hermann Hesse</autore>
 <titolo>Narciso e Boccadoro</titolo>
 <editore>Mondadori Editore</editore>
 <anno_pubblicazione>1933</anno_pubblicazione>
<biblio>

Niente di complicato. Potremmo utilizzare questo linguaggio per inserire note bibliografiche in fondo ad una ricetta descritta con XMLRicette, come nel seguente esempio:

Listato 3. Ricetta con bibliografia

<?xml version=”1.0″ ?>
<ricetta>
 <titolo>Pasta, aglio olio e peperoncino</titolo>
 <autore>Anonimo</autore>
 <ingredienti>
  <ingrediente>200 gr. di spaghetti</ingrediente>
  <ingrediente>uno spicchio di aglio</ingrediente>
  <ingrediente>olio</ingrediente>
  <ingrediente>un pizzico di peperoncino</ingrediente>
  <ingrediente>sale</ingrediente>
 <ingredienti>
 <procedimento>
  Far bollire dell’acqua in una pentola…
 </procedimento>
<biblio>
 <autore>Mario Rossi</autore>
 <titolo>Della pasta e di altre delizie</titolo>
 <editore>Chef Editore</editore>
 <anno_pubblicazione>2002</anno_pubblicazione>
<biblio>
</ricetta>

Guardando meglio l’esempio, però, salta all’occhio un piccolo problemino: come il nostro linguaggio, anche XMLBiblio utilizza i tag <titolo> e <autore>, naturalmente per un contesto diverso. Ma come farà il parser a distinguere il tag <titolo> di XMLBiblio dal tag <titolo> di XMLRicette? Come possiamo risolvere il problema dei tag omonimi?

Se vuoi aggiornamenti su Il misterioso mondo dei namespaces inserisci la tua e-mail nel box qui sotto:
 
X
Se vuoi aggiornamenti su Il misterioso mondo dei namespaces

inserisci la tua e-mail nel box qui sotto:

Ho letto e acconsento l'informativa sulla privacy

Acconsento al trattamento di cui al punto 3 dell'informativa sulla privacy