Condividi tramite


Spazi vuoti

Nella specifica W3C (World Wide Web Consortium) relativa a XML vengono normalizzate in un'unica convenzione diverse convenzioni sulle terminazioni di riga, ma vengono conservati tutti gli altri spazi vuoti, ad eccezione di quelli contenuti nei valori degli attributi. XML fornisce, inoltre, un insieme di strumenti utilizzabili nei documenti per segnalare alle applicazioni se conservare o meno gli spazi vuoti.

Spazi vuoti e dichiarazione XML

Secondo lo standard XML 1.0 corrente, prima della dichiarazione XML non sono consentiti gli spazi vuoti.

Se questo è presente, verrà considerato come un'istruzione di elaborazione. Tali informazioni, in particolare la codifica, non possono essere utilizzate dal parser.

Per ulteriori informazioni sulla dichiarazione XML, vedere Dichiarazione XML.

Spazi vuoti nel contenuto dell'elemento

I parser XML sono necessari per segnalare tutti gli spazi vuoti presenti nel contenuto di un elemento all'interno di un documento. Per un parser XML, quindi, i seguenti tre documenti saranno diversi.

<document>
<data>1</data>
<data>2</data>
<data>3</data>
</document>

e:

<document><data>1</data><data>2</data><data>3</data></document>

e:

<document><data>1</data> <data>2</data> <data>3</data></document>

Per alcune applicazioni, i valori dei tre dati sono più importanti della stampa. Per applicazioni XML orientate a documenti, la conservazione degli spazi vuoti è fondamentale.

Gli autori di documenti possono utilizzare l'attributo xml:space per identificare porzioni di documenti in cui gli spazi vuoti sono considerati importanti. Anche i fogli di stile possono utilizzare l'attributo xml:space come hook per conservare gli spazi vuoti nelle presentazioni. Tuttavia, dal momento che molte applicazioni XML non interpretano correttamente l'attributo xml:space, l'utilizzo di tale attributo è considerato facoltativo.

L'attributo xml:space accetta due valori.

  • default
    Questo valore consente all'applicazione di gestire gli spazi vuoti in base alle esigenze. Se non si include un attributo xml:space, si ottiene lo stesso risultato che si otterrebbe utilizzando il valore default.
  • preserve
    Questo valore indica all'applicazione di mantenere gli spazi vuoti, poiché potrebbero essere significativi.

I valori degli attributi xml:space si applicano a tutti i discendenti dell'elemento che contiene l'attributo, a meno che non venga eseguito l'override da parte di uno degli elementi figlio.

Ad esempio, i seguenti documenti specificano lo stesso comportamento degli spazi vuoti.

e:

In entrambi gli esempi, viene notificato all'applicazione di conservare gli spazi vuoti nelle righe della poesia e di gestire quelli contenuti nelle altre parti del documento in base alle esigenze.

Analogamente all'attributo xml:lang, ovvero l'attributo che indica la lingua, anche l'attributo xml:space, se utilizzato in un ambiente di convalida, deve essere dichiarato in una DTD. Non è necessario, invece, dichiarare lo spazio dei nomi XML poiché tale spazio vuoto viene già riservato dalla specifica XML.

Per impostazione predefinita, MSXML (Microsoft XML Core Services) non rispetta l'attributo xml:space. Se un'applicazione deve rispettare l'attributo xml:space, la proprietà preserveWhiteSpace dell'oggetto DOMDocument deve essere impostata su True prima dell'analisi.

xmldoc= new ActiveXObject("Msxml2.DOMDocument.5.0");

xmldoc.preserveWhiteSpace = true;

xmldoc.load(url);

MSXML fornisce anche le impostazioni che consentono di delegare al parser la gestione degli spazi vuoti nell'applicazione. Per ulteriori informazioni, vedere l'argomento "Controlling White Space and the DOM" nella documentazione dell'SDK MSXML (informazioni in lingua inglese).

ms256097.note(it-it,VS.100).gifNota:
La conservazione dello spazio vuoto può far aumentare significativamente la dimensione delle strutture del DOM (Document Object Model) a causa del sovraccarico derivante dalla conservazione dei nodi di spazi vuoti tra gli elementi.

Spazi vuoti negli attributi

Sebbene i processori XML consentano di conservare tutti gli spazi vuoti presenti nel contenuto dell'elemento, spesso lo normalizzano in valori di attributo. Tabulazioni, ritorni a capo e spazi vengono segnalati come spazi singoli. In alcuni tipi di attributo, vengono eliminati gli spazi vuoti che precedono e che seguono il corpo principale del valore, mentre quelli all'interno del valore vengono ridotti a spazi singoli. Se è disponibile una DTD, l'eliminazione verrà eseguita in tutti gli attributi che non sono di tipo CDATA.

Ad esempio, un documento XML può contenere:

<whiteSpaceLoss note1="this is a note." note2="this
is
a
note.">

Un parser XML segnala entrambi i valori dell'attributo come "this is a note." e converte in spazi singoli le interruzioni di riga.

Nota: in MSXML3 DOM e SAX non normalizzano gli spazi vuoti. In MSXML6 solo SAX normalizza gli spazi vuoti.

Se per il documento è presente una DTD, negli attributi dichiarati di tipo diverso da CDATA verranno rimossi gli spazi presenti all'inizio e alla fine del valore dell'attributo. Inoltre, tutti i cluster degli spazi vuoti all'interno del valore verranno sostituiti con spazi singoli. Se al contrario non è presente alcuna DTD, tutti gli attributi verranno considerati di tipo CDATA.

Gestione delle terminazioni di riga

I processori XML considerano il CRLF (Carriage Return-Line Feed, ritorno a capo e avanzamento di riga) della sequenza di caratteri come singoli caratteri CR o LF. Tutti vengono segnalati come un singolo carattere LF. I documenti possono essere salvati utilizzando la convenzione appropriata sulle terminazioni di riga.