Hallo Ingo,
such a declaration is required when the character encoding of the document is other than the default UTF-8 or UTF-16 and no encoding was determined by a higher-level protocol. «
XHTML 1.0 darf als text/html ausgeliefert werden und für XHTML ist UTF-8 als default festgelegt.
Der Knackpunkt hier ist der Begriff „higher-level protocol“ - in diesem Fall ist damit HTTP gemeint. Und das sagt etwas anderes, als die XML Spezifikation für sich alleine stehende XML Dokumente. Es ist einfach so, dass hier verschiedene Spezifikationen in sich nicht wirklich schlüssig sind.
Vergleiche auch die Notiz der W3C HTML Working Group zum Thema XHTML Media Types zu text/html:
„Authors should also be careful about character encoding issues. A typical
misunderstanding is that since an XHTML document is an XML document, the
character encoding of an XHTML document should be treated as UTF-8 or
UTF-16 in the absence of an explicit character encoding information. This
is NOT the case when an XHTML document is served as 'text/html'.“
...
„Therefore, authors SHOULD NOT assume any default value for an XHTML
document served as 'text/html', and as mentioned in [RFC2854], the use of
an explicit charset parameter is STRONGLY RECOMMENDED. When it is difficult
to specify an explicit charset parameter through a higher-level protocol,
authors SHOULD include the XML declaration ...“
(Nebenbei: Das ist nur eine Notiz der W3C HTML Working Group, wie man das machen sollte. Wenn man wirklich genau rauskriegen will, welche Zeichenkodierung bei über text/html ohne charset-Angabe versandtem XHTML 1.0 angenommen werden soll, muss man haufenweise Spezifikationen miteinander in Harmonie bringen. MIME sagt dieses, HTTP jenes, HTML wiederum was anderes, XHTML 1.0 noch was anderes, etc. Ich bin langsam so weit, eine Seite zu erstellen, auf der ich all die in sich widersprüchlichen Aussagen dazu sammele.)
Tim