eXtensible Markup Language Tutorial - by Marco Giannì
Capitolo III: Definizione del tipo di documento (DTD)

Creazione di nomi univoci tramite gli spazi dei nomi XML

La definizione spazio dei nomi è utilizzata dal programmatore tradizionale per indicare un gruppo di nomi in cui non esistono duplicati. Poiché la natura del linguaggio XML consente di definire set di tag personalizzati, che potrebbero dar luogo a nomi duplicati nei documenti XML, nel linguaggio XML gli spazi dei nomi offrono caratteristiche aggiuntive. Costituiscono infatti una metodologia per la creazione di nomi universalmente univoci in un documento XML identificando i nomi degli elementi con una risorsa esterna univoca. Nel linguaggio XML uno spazio dei nomi è pertanto una raccolta di nomi identificata da un URI e può essere qualificato o non qualificato.

NOMI QUALIFICATI

Nell'XML un nome qualificato si compone in due parti: il nome dello spazio dei nomi e la parte locale. Il nome dello spazio dei nomi, ovvero un URI, definisce lo spazio dei nomi, mentre la parte locale corrisponde al nome dell'elemento o dell'attributo del documento locale. Poiché l'URI è sempre univoco, il nome dello spazio dei nomi crea insieme alla parte locale un nome di elemento universalmente univoco. Per poter utilizzare uno spazio dei nomi in documento XML, è necessario includere una dichiarazione dello spazio dei nomi nel prologo del documento. E' inoltre possibile includere nella dichiarazione un prefisso dello spazio dei nomi. Utilizzando i due punti (:), il prefisso può essere aggiunto alla parte locale in modo da associarla al nome dello spazio dei nomi. Nel documento riportato nell'esempio che segue, i due spazi dei nomi vengono dichiarati con prefissi, quindi utilizzati nel documento.

<?xml version="1.0"?>
<?xml:namespace ns=http://inventory/schema/ns prefix="inv"?>
<?xml:namespace ns=http://wildflowers/schema/ns prefix="wf"?>
<PRODUCT>
 <PNAME>Test1</PNAME>
 <inv:quantity>1</inv:quantity>
 <wf:price>323</wf:price>
 <DATE>6/1</DATE>
</PRODUCT>

In questo esempio di codice, i prefissi vengono utilizzati per identificare elementi appartenenti allo spazio dei nomi selezionato. Si otterranno in questo modo nomi univoci, ma anche la conservazione del valore semantico dei nomi. Gli elementi inv:quantity e wf:price contengono nomi completamente qualificati che risulteranno univoci indipendemente dalla posizione in cui sono stati utilizzati. Il prefisso è parte del nome dell'elemento e deve essere sempre incluso in modo tale da indicare che l'elemento appartiene allo spazio dei nomi.

NOMI NON QUALIFICATI

Un nome non qualificato non dispone di nome associato al nome dello spazio dei nomi. I nomi di elementi XML tipici non sono qualificati poiché non specificano uno spazio dei nomi.

AREA DI VALIDITA' DELLO SPAZIO DEI NOMI

Il prologo non è l'unica opzione disponibile per la posizione della dichiarazione dello spazio dei nomi. E' infatti possibile includere tale dichiarazione direttamente all'interno di un elemento appartenente allo spazio dei nomi. A questo scopo, è sufficiente includere la dichiarazione la prima volta che si utilizza l'elemento, come mostrato nell'esempio che segue:

<PRODUCT>
 <PNAME>Test1</PNAME>
 <inv:quantity>1</inv:quantity>
 <wf:price xmlns:wf="urn:shemas-wildflowers-com:xml-prices">
  323
 </wf:price>
 <DATE>6/1</DATE>
</PRODUCT>

Lo spazio dei nomi risulta quindi disponibile nel contesto dell'elemento specifico, ovvero tale elemento e tutti i relativi elementi secondari possono utilizzare lo spazio dei nomi. Se dichiarato nell'elemento del documneto, lo spazio dei nomi può essere utilizzato nell'intero documento.

SPAZIO DEI NOMI PREDEFININTI

E' possibile impostare come predefinito uno spazio dei nomi dichiarandolo senza l'assegnazione di un prefisso. In questo caso, lo spazio dei nomi viene considerato all'interno del contesto dell'elemento in cui è stato dichiarato, come mostrato nel seguente esempio di codice:

<CATALOG>
 <INDEX>
  <ITEM>Trees</ITEM>
  <ITEM>Wildflowers</ITEM>
  §
 </INDEX>

 <PRODUCT xmlns:wf="urn:shemas-wildflowers-com>
  <NAME>Bloodroot</NAME>
  <QUANTITY>10</QUNTITY>
  <PRICE>$2.44</PRICE>
 </PRODUCT>
</CATALOG>

L'elemento Product contiene la dichiarazione di uno spazio dei nomi senza prefisso associato. In quanto tale, lo spazio dei nomi viene utilizzato per l'elemento Product e tutti i relativi elementi secondari, ma per nessun altro elemento oltre Product.

DICHIARAZIONE DELLO SPAZIO DEI NOMI COME URL O URN

In quanto univoci, gli URL possono essere utilizzati per rendere univoci i nomi degli spazi dei nomi. Se uno spazio dei nomi è mappato a un URL, tale spazio dei nomi risulterà univoco nell'intero contesto in cui viene utilizzato.

Un'altra situazione tipica è rappresentata dall'esistenza di uno schema dello spazio dei nomi che identifica tutti i nomi contenuti nello spazio dei nomi e il modo in cui sono strutturati. Il nome dello spazio dei nomi XML non fornisce alcun meccanismo per il recupero di tale schema, meccanismo che tuttavia può essere reso disponibile utilizzzando gli URN (Uniform Resource Names).

Un URN consente di individuare e recuperare un file di schema che definisce un determinato spazio dei nomi. Sebbene funzionalità simili possano essere fornite da un comune URL, a questo scopo l'URN è più efficiente e facile da gestire poiché può essere riferito a più URL.

Il codice seguente mostra l'utilizzo di un URN nel contesto di uno spazio dei nomi XML:

<CATALOG>
 <INDEX>
  <ITEM>Trees</ITEM>
  <ITEM>Wildflowers</ITEM>
  §
 </INDEX>

 <wf:product xmlns:wf="urn:shemas-wildflowers-com>
  <wf:name>Bloodroot>/wf:name>
  <QUANTITY>10</QUNTITY>
  <PRICE>$2.44</PRICE>
 </wf:product>
</CATALOG>

Lo schema relativo allo spazio dei nomi è disponibile nella posizione identificata dall'URN e l'applicazione di elaborazione è in grado di recuperare tale schema. Lo schema contiene informazioni dettagliate relative agli elementi dello spazio dei nomi utilizzabili nel documento.

SPAZIO DEI NOMI DEGLI ATTRIBUTI

Gli spazi dei nomi sono applicabili così come agli elementi, anche agli attributi. Ad esempio:

<wf:product TYPE="plant" class:kingdom="plantae"
 xmlns:wf="urn:wildflowers:schemas:product"
 xmlns:class="urn:bio:botany:classification">
 <PNAME>Test1</PNAME>
 <QUANTITY>1</QUNTITY>
 <PRICE>323</PRICE>
 <DATE>6/1</DATE>
</wf:product>

In questo esempio sia all'elemento wf:product che all'attributo class:kingdom sono associate dichiarazioni degli spazi dei nomi. Lo spazio dei nomi degli attributi viene utilizzato in modo simile allo spazio dei nomi degli elementi.

L'importanza degli spazi dei nomi aumenta parallelemente allo sviluppo di nuovi vocabolari e di nuove tecnologie basate sul linguaggio XML. Sono comunque già tecnologie che utilizzano gli spazi dei nomi, tra cui XML-Data, i tipi di dati XML e il linguaggio SMIL (Syncronized Multimedia Integration Language).

<indietro home page avanti>

Copyright © 2000-2005. Tutti i diritti sono riservati. Per informazioni: mgianni@infinito.it