* 読む (XML)

[1] ['''XML処理器の定義''']
[[XML処理器]]とは[[XML文書]]を飛んでその[[内容]]と[[構造]]へのアクセスを提供する[[ソフトウェア]]です。
[[XML]]仕様書は[[XML]][[データ]]をどう読まなければならないかを規定します。

;; <IW:XML1:"#dt-xml-proc">

[2] ['''内部引数実体中のマーク宣言''']
[[外部マーク宣言]]とは[[外部部分集合]]か[[引数実体]]に現れる[[マーク宣言]]です。ここで、[[引数実体]]には[[外部実体]]も[[内部実体]]も含まれます。[[非検証処理器]]は[[内部引数実体]]を読む必要もありません。

;; <IW:XML1:"#dt-extmkpdecl">

[3] ['''符号化宣言と改行'''] ([[XML 1.1]])
[[非ASCII文字]]の[[改行]]は[[符号化宣言]]を読むまでは確実に認識することができませんから、[[XML宣言]]や[[テキスト宣言]]で使うのは[[致命的誤り]]です。

;; <IW:XML1:"#sec-line-ends">

[4] ['''未読実体と取込み正規化性'''] ([[XML 1.1]])
[[非検証処理器]]は読んでいない[[外部実体]]の[[取込み]]によって起こり得る[[正規化]]の崩れを無視しなければ'''なりません'''。

;; <IW:XML1:"#sec-normalization-checking">

;; 未読の[[内部実体]]は? 読んでいないから[[内部実体]]か[[外部実体]]かなどわからないのだが。

[5] ['''既読属性既定値の報告''']
[[XML処理器]]が[[既定値]]の[[宣言]]を読んでいて[[属性指定]]がない[[属性]]がある[[要素]]に遭遇したときは、その[[既定値]]を持つ[[属性]]を[[応用]]に報告しなければ'''なりません'''。

;; <IW:XML1:"#IDAR4CU">

[6] ['''宣言未読属性の属性型''']
[[非検証処理器]]は、[[宣言]]を読んでいない[[属性][]を[CODE(XML)@en[[[CDATA]]]]のように扱う'''べきです'''。

;; <IW:XML1:"#AVNormalize">

[7] ['''属性値指定中の宣言未読実体参照''']
[[属性値指定]]に[[宣言]]を読んでいない[[実体]]への[[参照]]が含まれるのは[[誤り]]です。

;; <IW:XML1:"#AVNormalize">

[8] ['''外部マーク宣言 (実体宣言)''']
[[非検証処理器]]には[[引数実体]]や[[外部部分集合]]に現れる[[実体宣言]]を読んで[[処理]]する義務はありません。

;; <IW:XML1:"#wf-entdeclared">

[9] ['''UTF-8とUTF-16''']
[[XML処理器]]は[[UTF-8]]や[[UTF-16]]の[[実体]]を読めなければ'''なりません'''。読める必要があるのは[[UTF-8]]と[[UTF-16]]の[[実体]]だけです。

;; <IW:XML1:"#charencoding">

[10] ['''その他の文字符号化方式''']
[[XML処理器]]は[[UTF-8]]や[[UTF-16]]以外の[[文字符号化方式]]の[[実体]]も読める方が望ましいかもしれません。

;; <IW:XML1:"#charencoding">

[11] ['''妥当性検証するなら取込む実体参照''']
表に[Q[妥当性検証するなら取込む]]の印がついている場合、[[XML処理器]]は、[[文書]]を[[妥当性検証]]するために、[[解析対象実体]]への[[参照]]を認識したら[[置換文]]を取込まなければ'''なりません'''。[[参照]]されているのが[[外部実体]]であって、[[処理器]]が[[妥当性検証]]を''しない''のであれば、その[[実体]]の[[置換文]]を取込んでも'''構いません'''が、必要ではありません。[[非検証処理器]]が[[置換文]]を取込まない場合には、[[応用]]に[[実体]]を認識したけど読まないと通知しなければ'''なりません'''。

;; <IW:XML1:"#include-if-valid">

[12] ['''既読実体の整形式制約違反の報告''']
[[XML処理器]]は[[文書実体]]および読んだ[[解析対象実体]]の[[整形式制約]]違反を報告しなければ'''なりません'''。

;; <IW:XML1:"#proc-types">

[13] ['''検証処理器は全部読む''']
[[検証処理器]]は[[文書]]から[[参照]]されている[[DTD]]全体とすべての[[外部解析対象実体]]を読んで[[処理]]しなければ'''なりません'''。

;; <IW:XML1:"#dt-validating">

[14] ['''マーク宣言の処理''']
[[非検証処理器]]は[[妥当性]]を検査する必要はありませんが、[[DTD]][[内部部分集合]]と読んだ[[引数実体]]の中にある、最初の読んでいない[[引数実体]]への[[参照]]までのすべての[[宣言]]を[[処理]]する'''必要があります'''。すなわち、[[属性値]]の[[正規化]]、[[内部実体]]の[[置換文]]の[[取込み]]、[[属性]]の[[既定値]]の供給のためにそのような[[宣言]]に含まれる情報を使わなければ'''なりません'''。[CODE(XML)@en[[CODE(XMLa)@en[[[standalone]]]]="[[yes]]"]]の場合を除き、最初の未読[[引数実体]]への[[参照]]以後の[[実体宣言]]と[[属性定義並び宣言]]を[[処理]]しては'''なりません'''。[CODE(XML)@en[[CODE(XMLa)@en[[[standalone]]]]="[[yes]]"]]の場合は、そのような[[宣言]]を[[処理]]しなければ'''なりません'''。

;; <IW:XML1:"#dt-use-mdecl">

[15] ['''応用の安全な動作''']
[[検証処理器]]はすべての[[実体]]を読んで[[整形式制約]]と[[妥当性制約]]の違反を報告しなければなりませんが、[[非検証処理器]]は[[文書実体]]以外読む必要がありません。従って、
- [[非検証処理器]]では[[外部実体]]を読む必要がある[[整形式制約]]違反を検出できないかもしれません。
- [[応用]]が受取る情報は[[引数実体]]と[[外部実体]]を読むか否かによって色々に変わり得ます。
例えば[[属性値]]の[[正規化]]、[[内部実体]]の[[置換文]]の[[取込み]]、[[属性値]]の[[既定値]]の供給などは、行われるかどうかが[[外部実体]]や[[引数実体]]に含まれる[[宣言]]を読んだかどうかに依存します。

;; <IW:XML1:"#safe-behavior">

[16] ['''箱の中の鍵''']
外部情報がないと、[[XML処理器]]は内部にある名札を読むまで[[文字符号化方式]]がわかりません。

<IW:XML1:"#sec-guessing">

[17] ['''文字符号化方式の判別''']
いくつかの[[バイト列]]を発見した場合は、それに従って[[符号化宣言]]を読んで[[文字符号化方式]]を確定しなければなりません。

<IW:XML1:"#sec-guessing-no-ext-info">

[[#comment]]

* メモ