/
985.txt
157 lines (111 loc) · 8.28 KB
/
985.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
[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>