Corsi on-line
Chiudi
Newsletter:
  • Seguici su Facebook
  • Seguici su Twitter
  • Seguici su Google+
  • Seguici via RSS
  • Seguici col tuo Smartphone

I namespaces

Nella visione XML, i tipi di documenti si mescolano e si fondono tra loro in maniera complessa. Lo stesso documento potrebbe avere alcuni elementi definiti in un vocabolario ed altri in un altro.

Un esempio comune è un documento XML di valori di borsa che adopera i tag di HTML per definire gli elementi di testo, ed un insieme di tag specifico per gli elementi di borsa.

(L'articolo continua più sotto...)

Oppure anche un documento che contiene elementi strutturali di un vocabolario principale, e un payload che è a sua volta un documento XML totalmente diverso (XSLT ed HTML, SOAP, ecc.).

I problemi sono identificare esattamente l'ambito di ciascun elemento, conciliare la presenza di elementi definiti in uno di più vocabolari, e soprattutto conciliare la presenza di elementi definiti con lo stesso nome in più vocabolari diversi.

I namespace in XML si propongono per risolvere questi problemi. XMLNamespaces è una recommendation di W3C del 1999.

Supponiamo che una libreria voglia mettere il proprio database su Web:

<h:html xmlns:mia="http://www.mia.it/libri”
    xmlns:h="http://www.w3.org/HTML/1998/html4">
<h:head><h:titolo>Sezione Informatica</h:titolo></h:head>
<h:body>
    <mia:Sezione Informatica>
    <mia:titolo>Guida ad ASP.NET</mia:titolo>
        <h:table>
            <h:tr><h:td>Autore</h:td> <h:td>Prezzo</h:td>
                <h:td>Pagine</h:td> <h:td>Data</h:td> </h:tr>
        <h:tr>
            <h:td><mia:autore>Matthew MacDonald</mia:autore></h:td>
            <h:td><mia:prezzo>56</mia:prezzo></h:td>
            <h:td><mia:pagine>864</mia:pagine></h:td>
            <h:td><mia:editore>Mondadori</mia:editore></h:td>
            </h:tr>
        </h:table>
    </mia:Sezione Informatica>
</h:body>
</h:html>
Ogni nome di elemento o attributo del documento XML è preceduto da un prefisso che ne specifica l'ambito. Il prefisso è separato da il carattere ‘:’ dal nome dell’elemento o dell’attributo. L’attributo predefinito "xmlns" serve per introdurre i prefissi usati dai namespace del documento. Il valore dell’attributo è un URI che non ha nessun valore dichiarativo, ma solo informativo. Si usa un URI perché si sa già che è unico su Internet. Poiché ogni namespace userà un prefisso diverso,è possibile capire quali elementi appartengono all’uno e all’altro, e di evitare qualunque problema di collisione. Un nome (di elemento o di attributo) che contiene prefisso di namespace e nome locale viene detto "nome qualificato". Ovviamente la natura specifica del prefisso è irrilevante. Conta solo che sia associato ad un URI ben preciso.
Nella dichiarazione xmlns si pone il nome del prefisso che si intende usare nel corso del documento per gli elementi definiti in quel namespace. L’assenza di tale prefisso in xmlns indica la presenza di un namespace di default, per cui tutti i nomi privi di prefisso si debbono intendere appartenenti a quel namespace.Mettendo HTML come namespace di default, è tutto un po’ più leggibile, riprendendo l'esempio di sopra diventa:
<html xmlns:mia="http://www.mia.it/libri”
      xmlns="http://www.w3.org/HTML/1998/html4">
<head><titolo>Sezione Informatica</titolo></head>
<body>
  <mia:Sezione Informatica>
    <mia:titolo>Guida ad ASP.NET</mia:titolo>
      <table>
            <tr><td>Autore</td> <td>Prezzo</td>
                <td>Pagine</td> <td>Data</td></tr>
        <tr>
            <td><mia:autore>Matthew MacDonald</mia:autore></td>
            <td><mia:prezzo>56</mia:prezzo><td>
            <td><mia:pagine>864</mia:pagine><td>
            <td><mia:editore>Mondadori</mia:editore></td>
        </tr>
      </table>
  </mia:Sezione Informatica>
<body>
<html>
La dichiarazione di namespace può essere fatta ovunque, e ha scope solo all’interno dell’elemento in cui è stata fatta. Possono essere fatte più definizioni di namespace di default, quella interna ha "ovviamente" precedenza.

Il namespace contiene tre partizioni di nomi:

<html:IMG html:src="image.gif" html:alt="scritta"/>

è equivalente a

<html:IMG src="image.gif" alt="scritta"/>
I namespace sono stati introdotti dopo i DTD, e quindi esprimere namespace nei DTD non è facile. L'unico modo è di esprimere come nomi validi i nomi qualificati, bloccando il prefisso:
<!DOCTYPE a:item [
  <!ELEMENT a:item (a:titolo, a:editore)>
  <!ATTLIST a:item
            xmlns:a CDATA #FIXED "http://www.mieilibri.com">
  <!ELEMENT a:titolo (#PCDATA) >
  <!ELEMENT a:editore (#PCDATA) >
  ]>
  <a:item xmlns:a="http://www.mieilibri.com">
           <a:titolo>DTD-Namespaces croce e delizia</a:titolo>
           <a:editore>Ipiùbeilibrichecisono</a:editore>
  </a:
L'etichetta di un namespace è solo un nome. Il namespace non è un vocabolario esplicito, raccontato in qualche forma, ma solo un modo per differenziare nomi dello stesso documento. Gli URI dei namespace vengono usati come identificatori. Ovviamente un URI relativo viola il concetto di identificatore assoluto. La raccomandazione W3C non dice niente, per questo è meglio evitare di usare URN relativi come etichette di namespace.

Corsi
Corso CSSCorso CSS
Web Design ed Accessibilità secondo il W3C con CSS ed XHTML. A partire da 29 €.
Corso XMLCorso XML
Creazione di strutture XML, XSL ed altri linguaggi eXtensible. A partire da 39 €.
Sommario
Annunci

Mr.Webmaster

Pubblicità
Chi Siamo
Contattaci
Collabora
Note Legali
© 2003 - 2012 Mr.Webmaster - Il portale dei Webmaster Italiani - Tutti i diritti riservati | Powered by IKIweb Internet Media S.r.l. - PIVA 02848390122