[3] 実体が宣言されていることは、実体参照によって参照されている実体が存在することを要求する XML の整形式制約・妥当性制約です。
[5] DTD のない文書、引数実体参照のない内部DTD部分集合のみの文書、
standalone="yes"
のある文書にあっては、 外部部分集合内や引数実体内以外に現れる実体参照について、 実体参照内のName
は外部部分集合内や引数実体内以外に現れる実体宣言のName
に一致しなければなりません。 ただし、整形式文書は実体amp
,lt
,gt
,apos
,quot
を宣言する必要はありません。 一般実体の宣言は、属性並び宣言中の既定値に現れるその実体への参照より前になければなりません。なお、妥当性を検証しない処理器は引数実体や外部部分集合に現れる実体宣言を読み、 処理する義務はありません。そのような文書にあっては、実体が宣言されなければならないとの規則は
standalone="yes"
の時のみ整形式制約となります。 >>4
[6] 外部部分集合や引数実体参照のある文書では、 文書が単独である (
standalone="no"
が指定されているか、 単独宣言がない) 場合には、実体参照のName
は実体宣言のName
に一致しなければなりません。 相互運用性のために、妥当な文書は 4.6 定義済み実体に定義する通りの形で実体amp
,lt
,gt
,apos
,quot
を宣言するべきです。引数実体の宣言はその実体への参照より前になければなりません。 同様に一般実体の宣言は、属性並び宣言中の既定値に現れるその実体への直接または間接の参照より前になければなりません。 >>4
[7] 整形式制約と妥当性制約により、妥当な XML文書はすべての実体参照について実体宣言が含まれていることが要求されています。 ただし定義済み実体については MUST ではなく SHOULD となっています。
[9] XML処理器は次のように文書を処理しながら状態を管理することで、ある実体参照についてどちらの制約が適用されるか決定できます。
[14] ただし最初の引数実体参照より前に属性定義並び宣言があり、既定値に一般実体参照がある場合、 遡って (または先読みして) 妥当性制約とする必要があります。従って上から下へと1パスで処理しながらどちらか決定することはできません。
[17] 逆に文書の構文解析が完了した段階で「実体が宣言されていること」がいくつか検出されていた場合に、 整形式制約違反か妥当性制約違反かは次の手順により決定できます。
[15] Webブラウザーは (文字実体参照が含まれる特別なものを除き) 外部部分集合や引数実体参照を展開しないので、 引数実体参照に関する実体が宣言されていること制約違反は無視されます。
[16] Webブラウザーは定義済み実体以外の一般実体参照について一般実体が参照されていなければ、 DTD や単独文書宣言の有無に関わらず、致死的誤りとみなします。
[1] <http://suika.fam.cx/~wakaba/-temp/test/xml/entity/ref-declared/param-in-internal-subset/pini-1.xml>:
<!DOCTYPE root [%a;]><root/>
(名無しさん)
実体が宣言されていること整形式制約違反でエラー画面表示
(名無しさん)