Torna alla pagina di Tecnologie Web
:: Tecnologie Web ::
Namespace
Scopi
I namespaces (spazio dei nomi) sono dei metodi utilizzati da XML per associare elementi ed attributi ad un URI. Gli URI permettono di suddividere gli elementi in insiemi disgiunti, infatti gli elementi con lo stesso nome, ma associati ad URI differenti sono considerati elementi differenti.
I due scopi principali dei namespaces sono:
- distinguere tra elementi e attributi con lo stesso nome, appartenenti ad applicazioni XML differenti.
- raggruppare assieme tutti gli elementi e gli attributi di un'applicazione XML correlati tra di loro, per fare in modo che il software possa gestirli più facilmente.
Sintassi
Tutti gli elementi e gli attributi relativi ad un'applicazione XML vengono assegnati ad un URI, mentre quelli relativi ad un'altra applicazione XML vengono assegnati ad un URI differente, però non è sempre così. Infatti è possibile che all'interno della stessa applicazione XML si utilizzino namespaces multipli per suddividere porzioni differenti dell'applicazione.
La sintassi è la seguente:
prefisso:porzioneLocale
dove:
- prefisso: indica il namespace al quale appartiene l'elemento o l'attributo.
- porzione locale: identifica l'elemento o l'attributo appartenente al namespace.
- nome qualificato: è tutto il blocco, cioè prefisso:porzioneLocale.
Il motivo per cui viene usato un prefisso è che gli URI sono, nella maggior parte dei casi, composti da caratteri particolari (ex: / * %) che non sono legali nei nomi XML ed inoltre avere un file XML con mille mila URI riportati per esteso non è esattamente il massimo della leggibilità.
Il prefisso può contenere qualsiasi carattere tranne i : Lo stesso vale per la porzioneLocale per ovvi motivi di sintassi.
All'inizio però abbiamo detto che un namespace associa gli elementi ad un URI, quindi significa che ogni prefisso di un nome qualificato deve essere associato ad un URI.
La sintassi per legare un prefisso ad un URI è la seguente:
xmlns:prefix="URI"
dove:
- prefix: prefisso che si desidera utlizzare.
- xmlns:prefix: va aggiunto all'elemento prefissato o a uno degli elementi che lo sovrastano nella gerarchia. Infatti il legame tra il prefisso e URI è attivo solo all'interno dell'elemento nel quale viene dichiarato.
Esempio (preso da html.it) :
NOTA: Solitamente per convenzione le applicazioni XML sono associate a prefissi prestabiliti (ex: gli elementi SVG sono associati al prefisso svg), ma questi prefissi sono solo una convenzione e possono essere modificati come si desidera(ovviamente sempre rispettando le regole viste precedentemente).
Gli URI invece sono standardizzati quindi se si desidera si può modificare il prefisso, ma lo URI deve rimanere lo stesso.
Namespace default
La dichiarazione di un namespace di default viene utilizzata quando tutto(o quasi) il contenuto di un elemento si riferisce alla stessa applicazione.
La sintassi è la seguente:
<elementoPadre xmlns="URI"
Con questo tipo di dichiarazione indichiamo che tutti gli elementi privi di prefisso e i relativi discendenti dipendono dallo stesso namespace presente nell'elemento padre.
Il namespace di default non viene applicato agli elementi dotati di prefisso, che dipendono quindi dal namespace al quale il prefisso relativo risulta legato. E' quindi possibile modificare il namespace di default all'interno di un particolare elemento aggiungendo un attributo xmlns all'elemento stesso.
NOTA: Il namespace di default è applicabile solo agli elementi, non agli attributi.
Esempio:
Legame coi DTD
I namespace sono indipendenti dai DTD, quindi un documento XML può utilizzare namespace e non avere un DTD, oppure avere un DTD e non utlizzare namespace.
I namespace non modificano la sintassi DTD e non hanno alcun ruolo nella validità di un documento.
Un DTD di un documento che utilizza un elemento dc:title dovrà includere la dichiarazione ELEMENT che descrive il contenuto dell'elemento dc:title:
<!ELEMENT dc:title (#PCDATA)>
quindi il nome dell'elemento nel DTD include anche il prefisso se questo è presente, mentre se utilizziamo un namespace di default e quindi abbiamo degli elementi privi di prefisso allora anche nel DTD dovranno essere dichiarati senza prefisso. Bisogna seguire questa regola perché il validatore se ne frega dei namespace, gli interessano i nomi degli elementi e degli attributi.
Torna alla pagina di Tecnologie Web