XHTML名前付き文字参照DTD

XHTML名前付き文字参照DTD

[8] XML では、いくつかの公開識別子を指定した外部実体 (DTD) を参照することで、 HTML名前付き文字参照が使えるようになります。

[22] 互換性のために必要な場合を除き、使うべきではありません。

仕様書

公開識別子

[2] 次の公開識別子名前付き文字参照についての実体宣言を含む DTD として規定 >>1 されています。

[7] これらは、歴史的な HTMLMathML の仕様で DTD公開識別子として採用されていたものです。 かつてこれらの DTD を参照して記述された XML 文書との互換性のため、 次に述べるような規定が必要となっています。

[20] この一覧は >>21JSON ファイルの charrefs_pubids にも含まれています。

処理

[3] 利用者エージェントは、外部実体を取得 (retrieve) する時、 >>2公開識別子が指定されていれば、 HTML Standard に示された DTD に対応するものとして処理するべきです >>1

[5] 利用者エージェントは、この場合には外部実体内容を取得しようと試みるべきであり、 それ以外の外部実体内容は取得しようと試みるべきではありません >>1

[4] その DTD は、 HTML名前付き文字参照すべての XML 実体宣言 (のみ) を含んだものです。

実装

[85] Firefox では、システム識別子絶対URLでないと (URL scheme が含まれていないと) 公開識別子文字参照DTD のものだとしても、無視されるようです。 Chrome ではそのようなことはありません。

[12] どの実装でも DOCTYPE 宣言で指定する外部部分集合や、 マーク付け宣言の間の引数実体参照参照される外部実体としてこれらの公開識別子が指定された場合には HTML Standard の規定に添って処理しますが、 要素内で参照される外部実体としてこれらの公開識別子が指定された場合には展開しない外部実体参照として扱うようです。

適合性

[9] これらの公開識別子の使用は XMLHTML の仕様上特に禁止されていませんが、 いずれも過去の HTMLMathML の仕様に基づくものですから、 新たに使用するべきではないでしょう。

[10] 現在の HTML の仕様では、 XML文書DOCTYPE 宣言を指定することは求められていません (禁止もされていませんが)。

[11] これらの公開識別子を使用しないと HTML名前付き文字参照XML (XHTML) 文書内で使えないことになります (定義済実体を除く)。 しかしこれらの公開識別子を使用したとしても Webブラウザー以外の XML構文解析器が対応している保証はありませんから、そもそも XML では HTML名前付き文字参照は使用するべきではありません。

歴史

HTML5

[15] 本規定は Webブラウザーにおける XML の実装との互換性のため、 Web Applications 1.0 (現 HTML Standard) に追加されました。

W3C HTML WG

[16] David Carlisle公開識別子のリストに -//W3C//ENTITIES HTML MathML Set//EN//XML を追加することを提案しました。本公開識別子MathML 向けの DTD の一部分として内部的に使われていたものでした。

[17] 本規定の趣旨は既存の XHTML 文書および Webブラウザーとの互換性のためでしたから、 未対応の公開識別子を新たに追加するのは相応しくありません。そのため WHATWGIan Hickson はこの提案を拒み、 HTML5 に追加しませんでした。

[18] 通常ならこれで話が終わるところでしたが、本提案は WHATWG で却下された後に W3C HTML WGWD として出版し、標準化しようと試みられました。 ただ流石にどの Webブラウザーも実装せず無視しているものを勧告トラックの先に進めることはできなかったようで、 2015年には WG Note として出版され >>14 正式に廃案となりました。

[19] 同じように WHATWG HTML5 で却下された後に W3C HTML WG に持ち込まれた例として longdesc がありますが、そちらは不思議なことに W3C勧告になっています。こちらはそこまで強硬に勧告化したい人がいなかったのでしょうかね。

メモ

[6] HTML Standard は、これは厳密には XML 仕様に対する意図的違反ではないものの、 その精神には反している >>1 と述べています。 XML 仕様上は指定されたシステム識別子URL を無視して型録等に従っても違反ではありませんから、 >>3 のような動作は仕様違反ではありません。ただ >>2 のような公開識別子が元々意図していた DTD>>4 のような DTD は明らかに異なるもので、異なる公開識別子DTD を結びつけるのは確かに仕様の精神には反しているのかもしれません。