[9] [[解析対象実体]]のうち[[外部実体]]であるものを、
[DFN[[RUBYB[[[外部解析対象実体]]]@en[external parsed entity]]]]といいます。

[16] 最も広い意味では、[[非解析対象実体]]以外の[[外部実体]]
[WEAK[([[XML構文解析器]]が処理対象とする[[外部実体]])]]
をすべて[[外部解析対象実体]]といいます。より狭い意味では、
[[XML構文解析器]]の大元の処理対象である[[文書実体]]、
[[実体参照]]ではなく[[文書型宣言]]本体によって[[参照]]する[[外部部分集合実体]]、
[[DTD]] 内でのみ[[参照]]される[[外部引数実体]]を含まないことがあります。

[FIG[
- [[外部実体]]
-- [[外部非解析対象実体]]
-- '''[[外部解析対象実体]]''' (最広義)
--- [[文書実体]]
--- [[DTD実体]]
---- [[外部部分集合実体]]
---- [[外部引数実体]]
--- [[外部一般解析対象実体]] (最狭義の'''[[外部解析対象実体]]''')
- [[内部実体]]

[FIGCAPTION[
[[実体]]の分類の一例
]FIGCAPTION]
]FIG]

* 代替

[13] [[外部解析対象実体]]は、[[XML]] の必須の機能ではありません。
実装していない環境も少なくありません。つまり[[相互運用性]]に乏しく、
使うべきではありません。

[37] いつでも使える標準的な代替手段はありません。 [[Web]] であれば [[JavaScript]]
と [[XHR]] を使う、 [[XSLT]] であれば [CODE(XMLe)@en[xslt:include]] を使う、
など[[応用]]依存の方法を検討する必要があります。

* 仕様書

[REFS[
- [28] [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>
- [36] [CITE@en[RFC 7303 - XML Media Types]] ([TIME[2014-07-07 20:56:43 +09:00]] 版) <http://tools.ietf.org/html/rfc7303#section-9.3>
]REFS]

* 定義

[17] [[XML]] 仕様書は「[[外部解析対象実体]]」の定義を明確に示してはいません。

[18] <http://www.w3.org/TR/xml/#sec-line-ends> では「external parsed entities (including the document entity)」と注釈付きながら、最も広い意味で使っています。

[21] <http://www.w3.org/TR/xml/#charencoding> は注釈なしで最も広い意味で使っています。

[19] <http://www.w3.org/TR/xml/#sec-TextDecl> では[[文書実体]]以外の[[外部実体]]かつ[[非解析対象実体]]でないものすべてを指しています。

[20] <http://www.w3.org/TR/xml/#wf-entities> の「Well-Formed External Parsed Entity」
は[[外部一般解析対象実体]]のことを指しています。「external general parsed entity」
とも言っています。

[22] <http://www.w3.org/TR/xml/#include-if-valid> の
「external parsed entity reference」は[[外部一般解析対象実体]]の[[参照]]を指しています。

[23] <http://www.w3.org/TR/xml/#as-PE> も[[外部一般解析対象実体]]を指しています。

[24] <http://www.w3.org/TR/xml/#dt-validating> もおそらく[[外部一般解析対象実体]]を指しています。

[25] [[RFC 2376]] や [[RFC 3023]] は[[外部一般解析対象実体]]の意味で使っています。

* 処理モデル

[33] [[外部解析対象実体]]は、他の[[実体]]から[[実体宣言]]および[[実体参照]]を介して参照されることで[[文書]]の一部を構成しています。
[[XML処理器]]の動作は、 [[XML]] 本体の仕様書で規定されています。

[31] [[文字コード]]の取り扱いについては、[[XMLにおける文字コード]]を参照してください。

[34] >>8 の通り、[[外部解析対象実体]]には専用の [[MIME型]]が用意されています。
[[XPointer]] もそれらに関する[[素片識別子]]を定義しています。
しかし、他の[[文書]]が介在しない単独の[[外部解析対象実体]]をどう処理するかはどの仕様書でも明確には定義されていません。

* MIME 型

[8] [[外部解析対象実体]]の [[MIME型]]としては、
[DFN[[CODE(MIME)@en[[[application/xml-external-parsed-entity]]]]]] か
[DFN[[CODE(MIME)@en[[[text/xml-external-parsed-entity]]]]]] を使う[['''べき''']]です
[SRC[>>28]]。後者よりは前者を使うべきです [SRC[>>28]]。

;; [35] 歴史的事情は、 [CODE(MIME)@en[[[application/xml]]]]
と [CODE(MIME)@en[[[text/xml]]]] の場合と同様です。

[14] [[文書実体]]、[[外部部分集合実体]]、[[外部引数実体]]も[[外部解析対象実体]]に含まれることがありますが、
[[RFC 3023]]/[[RFC 7303]] の定義上は別のものとされており、それぞれより適切な[[MIME型]]が用意されています。

[32] [[外部解析対象実体]]が[[文書実体]]でもある場合を除き、
[CODE(MIME)@en[[[application/xml]]]] や [CODE(MIME)@en[[[application/xml]]]]
を使っては[['''なりません''']] [SRC[>>28]]。

;; [30] [[XML MIME型]]の項も参照してください。

** [CODE(MIME)@en[text/xml-external-parsed-entity]]

- [1] [[W3C]] のサーバーでも[[外部引数実体]]を [CODE[text/xml-external-parsed-entity]] で供給していたりします。
- [2] [[RFC3023]] によれば、 XML 実体には[[文書実体]], [[外部解析実体]], [[外部部分集合]], [[外部引数実体]]があるそうです。 [[SGML]] 的には外部解析実体は全部を含む気がしますが、 [[XML]] 的にはその辺はいい加減です。 RFC 3023 的にはこれら4つは排他的に読めます。
- [3] >>2 の読みが正しいなら、 >>1 は間違いになります。
- [4] どの道 SGML/XML では文書実体以外の外部解析実体は単独では意味を持たない (文書実体中での参照によって初めて文脈を得、解析可能となる) のですから、変な媒体型をいっぱい作らずに、 [CODE[[[application/xml]]]] と「外部解析実体 (文書実体をのぞく。)」の2つでよかったのに。
- [5] >>2 いくら XML がいい加減だからといって、[CODE(math)[外部引数実体 ⊂ 外部解析実体]]は仕様書を読めば明らかなのであって。
- [6] >>5 じゃあ両者を排他的に扱う RFC 3023 は DQN という結論で?

** 引数

[26] [CODE(MIME)@en[[[text/xml-external-parsed-entity]]]] には次の[[引数]]があります。

[FIG(list short)[
- [CODE(MIME)@en[[[charset]]]]
]FIG]

[27] [CODE(MIME)@en[[[application/xml-external-parsed-entity]]]] には次の[[引数]]があります。

[FIG(list short)[
- [CODE(MIME)@en[[[charset]]]]
]FIG]

* 拡張子

[7] [[ファイル名]]で'''接尾辞''' ([[拡張子]])
を使うときには、 [CODE(file)[.xml]]
や [CODE(file)[.ext]] が使われます。

* 歴史

** MIME 型の変遷

[10] [[RFC 2376]] 時代は [CODE(MIME)@en[[[text/xml]]]]、[CODE(MIME)@en[[[application/xml]]]]
を使うことになっていましたが、 [[RFC 3023]] によって分離されて
[CODE(MIME)@en[[[text/xml-external-parsed-entity]]]] と
[CODE(MIME)@en[[[application/xml-external-parsed-entity]]]]
が新設されました [SRC[>>11]]。

;; [CODE(MIME)@en[[[text/xml]]]] の歴史の項も参照。

[12] [[外部解析対象実体]]は、[[文書実体]]としても使われる場合を除き、
[CODE(MIME)@en[[[text/xml]]]] や [CODE(MIME)@en[[[application/xml]]]]
を使っては[['''ならない''']]とされました [SRC[>>11]]。

[REFS[
- [11] [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]

[15] [CODE(MIME)@en[[[charset]]]] の取り扱いや
[CODE(MIME)@en[[[text/*]]]] と [CODE(MIME)@en[[[application/*]]]]
の違いについては [CODE(MIME)@en[[[text/xml]]]] の項を参照してください。

[29] [[RFC 3023]] の改訂である [[RFC 7303]] も、基本的な定義は変わっていません。
ただし[[文字コード]]の決定方法は変更されています ([[XMLにおける文字コード]]を参照)。
それにともない [CODE(MIME)@en[[[application/xml-external-parsed-entity]]]]
を使う[['''べき''']] [SRC[>>28]] となりました。

[38] [CITE@EN[XPath and XQuery Functions and Operators 3.1]]
([TIME[2017-03-21 16:02:06 +09:00]])
<https://www.w3.org/TR/2017/REC-xpath-functions-31-20170321/#func-parse-xml-fragment>