Servire HTML5 come application/xhtml+xml non serve

Short link

HTML5 è stato concepito anche per essere servito come application/xhtml+xml. Questo perchè il W3C non ha voluto rompere il legame esistente tra questo MIME Type ed i linguaggi che ne fanno uso (come SVG, XLink e MathML). Il problema però sorge quando i contenuti esterni al documento host (in questo caso HTML5) devono essere validati. Se si usa la soluzione prologo XML + DOCTYPE HTML5 + namespace XHTML nell'elemento radice e poi si inseriscono altri linguaggi, la validazione non verrà superata.

Il motivo è semplice: SVG e MathML hanno bisogno di una DTD particolare per funzionare. Le DTD attuali riconosciute dal validatore del W3C sono quelle di XHTML1.1 plus (è qui il punto) SVG o MathML, dove XHTML è l'host. Dato che HTML5 non ha una DTD, non può includere di fatto altri linguaggi. E qui nasce il paradosso: se noi usiamo SVG o MathML in un documento HTML5 servito come application/xhtml+xml, il nostro codice funzionerà ma il documento non verrà validato.

C'è un evidente contrasto tra quanto dichiarato nelle specifiche e quanto implementato dal validatore (e non solo in HTML5), come se il parsing non si adeguasse alle specifiche. Ossia:


<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
  <title>SVG Test</title>
</head>

<body>

<!--qui il codice SVG-->

</body>

</html>

Funziona nei browser che lo supportano, ma non viene validato. Infatti avremmo dovuto avere una DTD come:


<!DOCTYPE html plus SVG 1.1>

che non esiste. Di qui i problemi sopra elencati.