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