あなたが持っているのは、内部サブセットにエンティティ宣言を含めるための有効な方法です。ただし、 W3C Markup Validatorで確認できるため、ドキュメントは他の方法では有効ではありません。要素の必須xmlns
属性が欠落しているため、必須属性も欠落しています。html
title
text / htmlとして提供される場合、ドキュメントはブラウザがHTMLドキュメントを処理するために使用する方法で処理されます。これは、とりわけ、内部サブセットが認識されないことを意味します。実際、ドキュメント型定義はまったく読み取られません。代わりに、doctype宣言はマジックストリングとして扱われるため、一部の文字列は「クァークズモード」をトリガーし、一部はトリガーしません。doctype宣言は単純な方法で解析され、最初の「>」で終了するため、その後に続くものはすべて文字データとして取得されます。
士気は、エンティティ宣言が「HTML」で内部的または外部的に機能しないことです。「HTML」がブラウザに何かを送信し、(HTTPヘッダーで)それをtext / htmlであると伝えることを意味する場合、これはサーバーが通常伝えることです。 .htmlファイルを送信するとき。
application / xhtml + xmlとして機能し、XHTML構文に準拠するように修正されたアプローチは、準拠するブラウザーで機能します(オンラインデモ:http ://www.cs.tut.fi/~jkorpela/test/nbsp.xhtml ):
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"
[<!ENTITY nbsp " ">]>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Entity demo</title></head>
<body>
<div>Hello World!</div>
</body>
</html>
ただし、IE8以前はapplication/ xhtml + xmlとして提供されている場合はHTMLを処理しません(ブラウザーは[名前を付けて保存]ダイアログを起動するだけです)。
結論は、実行していることと、「XMLパーサーをサポートする」必要がある理由(およびその意味)によって異なります。それは実際には構文解析ではなく、エンティティ宣言についてです。XHTMLユーザーエージェントは、HTMLのように事前定義されたエンティティを理解する必要はありません(XMLで定義されたものを除く)が、この可能性はどういうわけか実現されていますか?
また、一般的には、文字参照よりも実際のノーブレークスペース文字に変換する方が適切です。