外部解析対象実体

外部解析対象実体 (XML)

[9] 解析対象実体のうち外部実体であるものを、 外部解析対象実体 (external parsed entity) といいます。

[16] 最も広い意味では、非解析対象実体以外の外部実体 (XML構文解析器が処理対象とする外部実体) をすべて外部解析対象実体といいます。より狭い意味では、 XML構文解析器の大元の処理対象である文書実体実体参照ではなく文書型宣言本体によって参照する外部部分集合実体DTD 内でのみ参照される外部引数実体を含まないことがあります。

実体の分類の一例

代替

[13] 外部解析対象実体は、XML の必須の機能ではありません。 実装していない環境も少なくありません。つまり相互運用性に乏しく、 使うべきではありません。

[37] いつでも使える標準的な代替手段はありません。 Web であれば JavaScriptXHR を使う、 XSLT であれば xslt:include を使う、 など応用依存の方法を検討する必要があります。

仕様書

定義

[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 2376RFC 3023外部一般解析対象実体の意味で使っています。

処理モデル

[33] 外部解析対象実体は、他の実体から実体宣言および実体参照を介して参照されることで文書の一部を構成しています。 XML処理器の動作は、 XML 本体の仕様書で規定されています。

[31] 文字コードの取り扱いについては、XMLにおける文字コードを参照してください。

[34] >>8 の通り、外部解析対象実体には専用の MIME型が用意されています。 XPointer もそれらに関する素片識別子を定義しています。 しかし、他の文書が介在しない単独の外部解析対象実体をどう処理するかはどの仕様書でも明確には定義されていません。

MIME 型

[8] 外部解析対象実体MIME型としては、 application/xml-external-parsed-entitytext/xml-external-parsed-entity を使うべきです >>28。後者よりは前者を使うべきです >>28

[35] 歴史的事情は、 application/xmltext/xml の場合と同様です。

[14] 文書実体外部部分集合実体外部引数実体外部解析対象実体に含まれることがありますが、 RFC 3023/RFC 7303 の定義上は別のものとされており、それぞれより適切なMIME型が用意されています。

[32] 外部解析対象実体文書実体でもある場合を除き、 application/xmlapplication/xml を使ってはなりません >>28

[30] XML MIME型の項も参照してください。

text/xml-external-parsed-entity

  • [1] W3C のサーバーでも外部引数実体text/xml-external-parsed-entity で供給していたりします。
  • [2] RFC3023 によれば、 XML 実体には文書実体, 外部解析実体, 外部部分集合, 外部引数実体があるそうです。 SGML 的には外部解析実体は全部を含む気がしますが、 XML 的にはその辺はいい加減です。 RFC 3023 的にはこれら4つは排他的に読めます。
  • [3] >>2 の読みが正しいなら、 >>1 は間違いになります。
  • [4] どの道 SGML/XML では文書実体以外の外部解析実体は単独では意味を持たない (文書実体中での参照によって初めて文脈を得、解析可能となる) のですから、変な媒体型をいっぱい作らずに、 application/xml と「外部解析実体 (文書実体をのぞく。)」の2つでよかったのに。
  • [5] >>2 いくら XML がいい加減だからといって、外部引数実体 ⊂ 外部解析実体は仕様書を読めば明らかなのであって。
  • [6] >>5 じゃあ両者を排他的に扱う RFC 3023 は DQN という結論で?

引数

[26] text/xml-external-parsed-entity には次の引数があります。

[27] application/xml-external-parsed-entity には次の引数があります。

拡張子

[7] ファイル名接尾辞 (拡張子) を使うときには、 .xml.ext が使われます。

歴史

MIME 型の変遷

[10] RFC 2376 時代は text/xmlapplication/xml を使うことになっていましたが、 RFC 3023 によって分離されて text/xml-external-parsed-entityapplication/xml-external-parsed-entity が新設されました >>11

text/xml の歴史の項も参照。

[12] 外部解析対象実体は、文書実体としても使われる場合を除き、 text/xmlapplication/xml を使ってはならないとされました >>11

[15] charset の取り扱いや text/*application/* の違いについては text/xml の項を参照してください。

[29] RFC 3023 の改訂である RFC 7303 も、基本的な定義は変わっていません。 ただし文字コードの決定方法は変更されています (XMLにおける文字コードを参照)。 それにともない application/xml-external-parsed-entity を使うべき >>28 となりました。

[38] XPath and XQuery Functions and Operators 3.1 () <https://www.w3.org/TR/2017/REC-xpath-functions-31-20170321/#func-parse-xml-fragment>