Con XHTML 1.0 il World Wide Web Consortium aveva voluto esplicitamente creare un linguaggio di transizione: passare ad XML ma mantenendo il più possibile la compatibilità con il passato. La scelta di basare le tre DTD su quelle di HTML 4.0 ne è la prova più evidente. XHTML 1.1 è invece tutto proietatto verso il futuro. Nelle intenzioni del Consortium esso sarà la base per futuri linguaggi web estensibili e facilmente adattabili ad un ampio numero di dispositivi.
La definizione di questa specifica è strettamente legata ad un'altra raccomandazione, quella relativa alla modularizzazione di XHTML. Se XHTML 1.0 era consistito nella riscrittura di HTML come applicazione XML, questo nuovo approccio punta invece a frammentare il linguaggio in tanti moduli indipendenti. È un argomento complesso e un suo approfondimento va oltre gli scopi di questa guida. In questa lezione daremo pertanto solo riferimenti essenziali.
Linguaggio più "stretto"
In XHTML 1.1 il W3C ha portato al termine la sua redifinizione di un linguaggio di markup orientato solo alla struttura. È basato infatti sulla DTD Strict di XHTML 1.0: tutti gli elementi e gli attributi di presentazione sono definitivamente esclusi. La dichiarazione DOCTYPE può dunque fare riferimento solo ad una DTD e non a tre:
<!DOCTYPE
html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
Rimangono invariate le altre regole di base relative all'elemento radice <html> e alla dichiarazione del namespace con l'attributo xmlns.
Moduli
La DTD XHTML 1.1 è diversa dalle precedenti. Non contiene una lista di elementi e attributi con le regole che ne definiscono l'uso. È invece costituita da diverse dichiarazioni che includono altrettanti moduli. Le specifiche sui moduli XHTML fanno parte di un'altra raccomandazione, quella sulla modularizzazione di XHTML.
Senza scendere nei dettagli, diciamo che ciascun modulo definisce un insieme di elementi e attributi per una determinata classe di oggetti. Ecco perchè si è detto che XHTML 1.1 smonta il linguaggio. Esiste, ad esempio, un modulo "structure" che serve a definire la struttura di base di un documento e che contiene: body, head, html, title. E ancora, troviamo un modulo per il testo, uno per i form, uno per le liste e così via. Potete farvi un'idea precisa sui moduli e sul loro contenuto consultando la specifica XHTML 1.1.
Nella DTD XHTML 1.1 un modulo viene caricato con questa dichiarazione (l'esempio fa riferimento all'inclusione del modulo form):
<!-- Forms Module ..... -->
<!ENTITY % xhtml-form.module "INCLUDE" >
<![%xhtml-form.module;[
<!ENTITY % xhtml-form.mod
PUBLIC "-//W3C//ELEMENTS XHTML Forms 1.0//EN"
"http://www.w3.org/TR/xhtml-modularization/DTD/xhtml-form-1.mod" >
%xhtml-form.mod;]]>
L'approccio modulare è stato ben descritto da Molly Holzschlag in uno dei suoi articoli su XHTML. Esso viene paragonato all'uso di certi portatili in cui le varie periferiche possono essere inserite e tolte a seconda delle necessità. Ho bisogno del floppy? Collego il floppy. Mi serve il CD-Rom ma non il DVD? Facile, attacco il primo e stacco il secondo. Non mi serve nessuno dei tre? Non importa: il mio portatile continuerà a funzionare.
Ecco perchè dei moduli inclusi nella DTD alcuni sono richiesti e altri opzionali. Quelli richiesti sono indispensabili perchè senza di essi non si potrebbe nemmeno parlare di un documento. È come se al portatile di prima togliessimo, invece del floppy, la RAM: si potrebbe chiamare ancora PC?
Altre differenze
Nella specifica XHTML 1.1 vengono anche indicate le differenze con la DTD Strict di XTML 1.0. Esse sono:
- l'attributo lang è sostituito da xml:lang
- per gli elementi img e map l'attributo name è sostituito da id
- è stata inserita la collezione di oggetti ruby
Riferimenti
Specifica XHTML 1.1: è la raccomandazione definitiva datata 31 maggio 2001.
Come
creare moduli XHTML: dal sito del W3C. Articolo-tutorial complesso ma essenziale.
Introduzione alla modularizzazione: sempre dal sito del W3C, breve e coinciso articolo sui moduli.
Specifica "Modularizzazione di XHTML": complessa, ricchissima, fondamentale. La seconda parte spiega in maniera completa come implementare nuovi moduli ed estendere le DTD.