XHTML
XHTML ha riformulato HTML 4 come XML rigoroso. Scopri le regole di correttezza, i doctype e xmlns, e perché HTML5 lo ha in gran parte sostituito.
XHTML (Extensible HyperText Markup Language) è una riformulazione di HTML 4.01 degli anni 2000 come applicazione XML rigorosa, pubblicata dal World Wide Web Consortium (W3C). Ha lo stesso vocabolario di tag di HTML, ma impone le regole di correttezza dell'XML: ogni tag deve essere chiuso, in minuscolo e correttamente annidato.
Per i nuovi progetti, preferire HTML5. XHTML 1.0 è stato in gran parte sostituito da HTML5, che mantiene la disciplina della correttezza come stile poliglotta opzionale, essendo molto più permissivo e ricco di funzionalità. Questa pagina è da intendere come un riferimento di sfondo su uno standard legacy che potreste ancora incontrare in codebase più datate.
L'obiettivo originale era rendere i documenti più rigorosi e prevedibili, in modo da poter essere analizzati da qualsiasi processore XML standard e riutilizzati su una varietà di dispositivi e strumenti. Poiché le regole non ammettono eccezioni, un singolo tag di chiusura mancante poteva impedire il rendering dell'intero documento quando servito come XML reale.
Regole di correttezza
La differenza fondamentale tra HTML e XHTML è che XHTML deve essere XML ben formato. Di seguito sono elencate le regole, ciascuna mostrata con un esempio errato e uno corretto.
Struttura del documento e doctype
Ogni documento XHTML deve iniziare con un <!DOCTYPE> XHTML e contenere gli elementi <html>, <head>, <title> e <body>. L'elemento <html> deve anche dichiarare il namespace XML con l'attributo xmlns.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Title of the document</title>
</head>
<body>
Content of the page
</body>
</html>L'attributo xmlns
xmlns="http://www.w3.org/1999/xhtml" è la dichiarazione di namespace XML. Indica a un parser XML che gli elementi del documento appartengono al vocabolario XHTML piuttosto che a un altro linguaggio XML. È obbligatorio sull'elemento radice <html> di ogni documento XHTML. L'URL è un identificatore, non un link che il browser recupera.
Varianti del doctype XHTML
XHTML 1.0 definisce tre DOCTYPE, ciascuno che punta a un DTD diverso. L'esempio sopra usa Transitional, la scelta più comune.
- Strict — markup pulito, privo di presentazione. Gli elementi e gli attributi di presentazione deprecati (come
fontobgcolor) non sono consentiti; lo stile è delegato a CSS. - Transitional — permette le funzionalità di presentazione deprecate per la compatibilità con i contenuti più vecchi.
- Frameset — come Transitional, ma consente documenti
<frameset>che suddividono la finestra in frame.
Chiudere ogni elemento
In HTML alcuni tag di chiusura possono essere omessi, ma in XHTML ogni elemento deve essere chiuso. Gli elementi void senza contenuto (come br, hr, img) si chiudono da soli con una barra finale.
<!-- Wrong (HTML-style, not closed) -->
A break: <br>
An image: <img src="smile.gif" alt="Always smile">
<!-- Right (self-closed for XHTML) -->
A break: <br />
An image: <img src="smile.gif" alt="Always smile" />Usare nomi di tag e attributi in minuscolo
XML è sensibile alle maiuscole, quindi <P> e <p> sono tag diversi. XHTML richiede che tutti i nomi di elementi e attributi siano in minuscolo.
<!-- Wrong -->
<BODY>
<P>Some paragraph</P>
</BODY>
<!-- Right -->
<body>
<p>Some paragraph</p>
</body>Racchiudere ogni valore di attributo tra virgolette
Tutti i valori degli attributi devono essere racchiusi tra virgolette, anche quelli numerici.
<!-- Wrong -->
<table width=100%>
<!-- Right -->
<table width="100%">Annidare correttamente gli elementi
I tag sovrapposti sono vietati; gli elementi interni devono essere chiusi prima del loro elemento genitore esterno.
<!-- Wrong (overlapping) -->
<strong><em>This text is bold and italic</strong></em>
<!-- Right (properly nested) -->
<strong><em>This text is bold and italic</em></strong>Nessuna minimizzazione degli attributi
In HTML, gli attributi boolean possono stare da soli (checked). XHTML vieta questa forma abbreviata: ogni attributo necessita di un valore, e per i boolean il valore ripete il nome.
<!-- Wrong (minimized) -->
<input type="checkbox" name="flower" value="rose" checked />
<!-- Right -->
<input type="checkbox" name="flower" value="rose" checked="checked" />Preferire id rispetto a name
In XHTML l'attributo name è deprecato sugli elementi come le ancore, quindi si raccomanda l'utilizzo dell'attributo id per identificare gli elementi.
Vantaggi di XHTML
- Tutti i tag devono essere chiusi e correttamente annidati, il che mantiene il markup coerente e più facile da leggere.
- Essendo XML ben formato, i documenti potevano essere elaborati in modo affidabile da strumenti XML generici e trasportati in ambienti specializzati come i lettori Braille e altri software assistivi.
- Incoraggia una netta separazione tra struttura e presentazione, lavorando in sinergia con CSS per lo stile.
XHTML vs HTML
Alcune differenze chiave tra i due:
- Standard di base. HTML è un'applicazione di SGML; XHTML è un'applicazione di XML.
- Discendenza. HTML discende da SGML; XHTML deriva sia da XML che da HTML 4.
- Storia. HTML ha avuto origine con Tim Berners-Lee nei primi anni '90 (Wikipedia); XHTML 1.0 è diventato una Raccomandazione W3C nel 2000 (Wikipedia).
- Analisi sintattica. HTML utilizza un parser permissivo e tollerante agli errori; XHTML servito come XML richiede un parser XML rigoroso che rifiuta i documenti non conformi.
XHTML vs HTML5
- Sensibilità alle maiuscole. XHTML è sensibile alle maiuscole; HTML5 (come l'HTML classico) non lo è.
- Doctype. I doctype XHTML sono lunghi e fanno riferimento a un DTD; HTML5 usa il breve
<!DOCTYPE html>. - Tipo MIME. HTML5 è servito come
text/html; l'analisi XHTML rigorosa richiedeapplication/xhtml+xml. - Tolleranza. HTML5 si riprende correttamente da molti errori di markup, mentre XHTML li rifiuta.
- Stato. HTML5 è lo standard moderno per tutti i dispositivi; XHTML 1.0 è ora considerato legacy.