[14] [[SGML]] および [[XML]] で[[文書型宣言]]や[[連結型宣言]]によって直接[[参照]]される[[外部実体]]を[DFN[[RUBYB[[[外部部分集合実体]]]@en[external subset entity]]]]といい、
[[外部部分集合実体]]に含まれるもの全体を[DFN[[RUBYB[[[外部部分集合]]]@en[external subset]]]]といいます。

[15] [[外部部分集合実体]]のことをしばしば [[DTD]] と呼びますが、
本来 [[DTD]] は[[文書型宣言]]の[[外部部分集合]]と[[内部部分集合]]に含まれる
[[DTD宣言]]の集合のことを指しています。これには[[外部部分集合実体]]の他に[[内部部分集合]]や[[引数実体]]も含まれています。

[16] [[外部部分集合実体]]から直接又は間接に[[参照]]される[[引数実体]]も[[外部部分集合]]の一部であるのかどうかは定かではありません。

* 仕様書

[REFS[
- [21] [CITE@EN[Extensible Markup Language (XML) 1.0 (Fifth Edition)]] ([TIME[2013-05-28 20:49:56 +09:00]] 版) <http://www.w3.org/TR/xml/#ext-Subset>
- [20] [[Web SGML]]
- [24] [CITE@en[RFC 7303 - XML Media Types]] ([TIME[2014-07-07 20:56:43 +09:00]] 版) <http://tools.ietf.org/html/rfc7303#section-4.1>
-- [19] 旧版 [CITE@en[RFC 3023 - XML Media Types]] ([TIME[2014-07-11 12:46:44 +09:00]] 版) <http://tools.ietf.org/html/rfc3023#section-3>
]REFS]

* 外部部分集合

[9] [DFN[[RUBYB[[[外部部分集合]]]@en[external subset]]]]は、
[[文書型宣言部分集合]]のうち、[[外部宣言実体]]中に存在する部分です
[SRC[[[WebSGML]] K.2.1.2]]。

[10] [[規格参照具象構文]]で表現した時に、
[SAMP(SGML)[<!DOCTYPE doctype PUBLIC "foo" [<!>]>]]
の [SAMP(SGML)[PUBLIC "foo"]] で指定した[[外部解析実体]]のことを、
[DFN[外部 DTD サブセット]]と呼ぶのです。

これに対して、 [SAMP(SGML)[<!>]] の部分を、[[内部部分集合]]と呼びます。
文書型宣言はこの両者から構成されます。
(一方又は両者が[[空]]であることもあります。)

[11] Web SGML は >>9 のようにきてしていますけど、ここはあえて、[[連結型宣言]]にも外部部分集合はあるのだ! と主張したい。

[12] [[SGML宣言]]も文書型宣言や連結型宣言と似た構文のマーク宣言が使われますが、外部参照の SGML 宣言を「外部部分集合」とは言いません。 SGML 宣言には[[宣言部分集合]] ([[内部部分集合]]) が存在しないからです。

[13] [CITE[誤り訂正日記 - d:id:quaa]] ([TIME[2007-11-11 11:17:03 +09:00]] 版) <http://d.hatena.ne.jp/quaa/20071108#p1>

* 外部部分集合実体

[1] 
>
: 外部部分集合実体 (external subset entity): 
[[文書型宣言]]の[[外部識別子]][[パラメタ]]によって[[宣言]]され、
[[内部部分集合]]の末尾で (暗黙的に) [[参照]]される[[実体]]。
[INS[([[Web SGML]] K.2.1.1)]]

[2] つまりは、[[外部部分集合]]となる実体のことです。

文書型宣言の外部識別子引数は、
たとえば[[規格参照具象構文]]では、次のように表されます。
[PRE(SGML)[
  <!DOCTYPE doctype PUBLIC "-//example//DOCTYPE doctype//en"
                    "http://www.example.com/doctype" [
    <!-- 内部部分集合 -->
  ]>
]PRE]

([SAMP(SGML)[PUBLIC]] 以下の部分です。)

この外部識別子引数で参照される実体が外部部分集合実体です。

[3] [[素のSGML]] では
[Q[文書型宣言に指定する外部識別子が表す実体]]と呼ばれています。

[4] [[JIS X 4151]]‐1992 10.1 で、この実体は
[Q[その[[文書型宣言部分集合]]の最後に参照してその一部 (又は全部) とする]]
とされています。

[8] >>4 より、 >>2 の例は次の例と実質的に等価です。

[PRE(SGML)[
  <!DOCTYPE doctype [
    <!-- 内部部分集合 -->
    
    <!ENTITY % [VAR[外部部分集合]]
                    PUBLIC "-//example//DOCTYPE doctype//en"
                    "http://www.example.com/doctype">
    %[VAR[外部部分集合]];
  ]>
]PRE]

[5] >>4 の規定により、
内部部分集合が外部部分集合に先立って解釈されます。ですから、
[[実体宣言]]や[[属性並び宣言]]が両者にあれば内部部分集合の側のものが優先されます。
また、外部部分集合で定義した[[引数実体]]を内部部分集合で参照することは出来ません。
[WEAK[(内部部分集合を解釈する時点でまだ読まれていませんから。)]]

[6] Web SGML の[Q[外部部分集合]]の定義は文書型宣言だけで[[連結型宣言]]は無視されていますが、
本当は連結型宣言の外部識別子引数で参照される実体も外部部分集合実体と呼んでも良いですよね。

[7]
外部部分集合実体は定義上[[引数実体]]の一種です。

;; [22] 「[[外部部分集合実体]]」は [[Web SGML]] の用語で、 [[XML]]
では[[外部部分集合]]と区別せず使われます。

* MIME 型

[17] [[XML]] の[[外部部分集合実体]]の [[MIME型]]は、 [CODE(MIME)@en[[[application/xml-dtd]]]]
を使う[['''べき''']]です [SRC[>>24, >>19]]。

;; [18] この[[MIME型]]は[[外部部分集合実体]]の他、[[外部引数実体]]にも使われます [SRC[>>19]]。

;; [23] [[RFC 2376]] 時代は [CODE(MIME)@en[[[text/xml]]]] と
[CODE(MIME)@en[[[application/xml]]]] を使うことになっていましたが、
[[RFC 3023]] 以後禁止 [SRC[>>24, >>19]] されています。