[14] SGML および XML で文書型宣言や連結型宣言によって直接参照される外部実体を外部部分集合実体といい、 外部部分集合実体に含まれるもの全体を外部部分集合といいます。
[15] 外部部分集合実体のことをしばしば DTD と呼びますが、 本来 DTD は文書型宣言の外部部分集合と内部部分集合に含まれる DTD宣言の集合のことを指しています。これには外部部分集合実体の他に内部部分集合や引数実体も含まれています。
[16] 外部部分集合実体から直接又は間接に参照される引数実体も外部部分集合の一部であるのかどうかは定かではありません。
[9] 外部部分集合は、 文書型宣言部分集合のうち、外部宣言実体中に存在する部分です WebSGML K.2.1.2。
[10] 規格参照具象構文で表現した時に、 <!DOCTYPE doctype PUBLIC "foo" [<!>]> の PUBLIC "foo" で指定した外部解析実体のことを、 外部 DTD サブセットと呼ぶのです。
これに対して、 <!> の部分を、内部部分集合と呼びます。 文書型宣言はこの両者から構成されます。 (一方又は両者が空であることもあります。)
[11] Web SGML は >>9 のようにきてしていますけど、ここはあえて、連結型宣言にも外部部分集合はあるのだ! と主張したい。
[12] SGML宣言も文書型宣言や連結型宣言と似た構文のマーク宣言が使われますが、外部参照の SGML 宣言を「外部部分集合」とは言いません。 SGML 宣言には宣言部分集合 (内部部分集合) が存在しないからです。
[13] 誤り訂正日記 - d:id:quaa ( 版) <http://d.hatena.ne.jp/quaa/20071108#p1>
文書型宣言の外部識別子引数は、 たとえば規格参照具象構文では、次のように表されます。
<!DOCTYPE doctype PUBLIC "-//example//DOCTYPE doctype//en" "http://www.example.com/doctype" [ <!-- 内部部分集合 --> ]>
(PUBLIC 以下の部分です。)
この外部識別子引数で参照される実体が外部部分集合実体です。
[3] 素のSGML では
文書型宣言に指定する外部識別子が表す実体
と呼ばれています。
[4] JIS X 4151‐1992 10.1 で、この実体は
その文書型宣言部分集合の最後に参照してその一部 (又は全部) とする
とされています。
[8] >>4 より、 >>2 の例は次の例と実質的に等価です。
<!DOCTYPE doctype [ <!-- 内部部分集合 --> <!ENTITY % 外部部分集合 PUBLIC "-//example//DOCTYPE doctype//en" "http://www.example.com/doctype"> %外部部分集合; ]>
[5] >>4 の規定により、 内部部分集合が外部部分集合に先立って解釈されます。ですから、 実体宣言や属性並び宣言が両者にあれば内部部分集合の側のものが優先されます。 また、外部部分集合で定義した引数実体を内部部分集合で参照することは出来ません。 (内部部分集合を解釈する時点でまだ読まれていませんから。)
[6] Web SGML の外部部分集合
の定義は文書型宣言だけで連結型宣言は無視されていますが、
本当は連結型宣言の外部識別子引数で参照される実体も外部部分集合実体と呼んでも良いですよね。
[17] XML の外部部分集合実体の MIME型は、 application/xml-dtd
を使うべきです >>24, >>19。