3.2

Sezione 3: Autori

Q 3.2: Come XML gestisce gli spazi vuoti nei miei documenti?

Gli interpreti li mantengono tutti. Sta all’applicazione decidere cosa farne.

 

Tutti gli spazi bianchi, fra cui le interruzioni di riga (Mac CR, Win CR/LF, Unix LF), caratteri di tabulazione, e spazi normali, anche fra elementi ‘strutturali’ dove non potrà mai apparire testo, viene analizzato dal parser (interprete) non cambiatoe immesso nell’applicazione (browser, formattatore, visualizzatore, convertitore, ecc). Il parser identifica il contesto in cui è stato trovato lo spazio bianco (contenuto d’elemento, contenuto dei dati carattere, o contenuto misto), se questa informazione è disponibile, ad es. da un DTD o Schema. Questo significa che sta all’applicazione decidere cosa fare di questi spazi bianchi, non al parser.

Questo è uno dei pochi cambiamenti radicali rispetto a SGML, dove tutti gli spazi bianchi negli elementi di contenuto venivano scartati dal parser prima di arrivare all’applicazione. Vedi Perché? qui sotto per scoprire il perché.

Ci sono due tipi diversi di spazio bianco:

  • Spazi bianchi insignificanti(spazi bianchi scartabili) che si trovano fra elementi strutturali e elementi di contenuto. Questo è uno spazi che si verifica solo dove sono permessi altri elementi, dove non si trova mai testo. È solitamente inserito automaticamente da un editore o manualmente da un autore per migliorare la chiarezza visiva del markup, e spesso non ha nulla a che fare con la spaziatura nel modo in cui la vedi quando il documento viene elaborato o formattato. Su XML, questo spazio verrà analizzato dall’applicazione (su SGML è stato soppresso, motivo per cui puoi mettere tutti questi spazi extra nei documenti HTML vecchio stile e non preoccuparti di nulla);
  • Spazi bianchi significativiche si verificano all’interno degli elementi che contengono solo testo (contenuti dati carattere, come un title HTML) o testo e markup combinati (ad es. paragrafi). Su XML, questo spazio sarà comunque analizzato dall’applicazione esattamente come con SGML.

In entrambi i casi, sta all’applicazione gestire gli spazi correttamente (XSLT2, per esempio, fornisce un’istruzione strip-space per specificare come gestirlo). Il parser deve dunque informare l’applicazione che si è imbattuto in uno spazio bianco nell’elemento di contenuto, se può individuarlo, in modo da poterlo scartare. (Gli utenti di SGML riconosceranno che quest’informazione non è nell’ESIS, ma è nel Grove.)

 
<chapter> 
  <title> 
   My title for
   Chapter 1. 
  </title> 
    <para> 
text 
    </para> 
</chapter>

Nell’esempio qui sopra, l’applicazione riceverà tutte le interruzioni di riga, tabulazioni, e spazi fra gli elementi, nonché quelli incorporati nel titolo del capitolo. È la funzione dell’applicazione, non del parser, quella di decidere che tipo di spazio bianco scartare e quale mantenere. Molte applicazioni XML hanno opzioni configurabili per permettere ai programmatori e agli utenti di controllare come gestire questi spazi bianchi.

Peter Flynn scrive:

Perché?

Su SGML, un DTD è sempre obbligatorio. Un parser dunque sa sempre in anticipo se si è verificato uno spazio bianco in un elemento di contenuto (e dunque può essere scartato) o in un contenuto misto o dato carattere (dove deve essere mantenuto). XML permette l’elaborazione senza DTD o Schema, dove potrebbe essere impossibile capire se lo spazio è stato scartato o no, quindi la regola generale imposta è che tutti  gli spazi bianchi devono essere segnalati all’applicazione.

Leave a Comment

Your email address will not be published. Required fields are marked *