Validating a HUGE XML file 同意しましたが、私はまだ混乱しています...どのように XML Schema の検証が SAX 解析で可能であるか.つまり、スキーマの検証には、XML を行ったり来たりして、たとえばキー参照などを検証する必要があることを意味します。そのために、XML 全体をメモリ内で使用できるようにする必要がありますか? ばかげた質問で申し訳ありません:(
2 に答える
スキーマに対する検証は、ほぼゼロのメモリで実行できます。UPA 制約により、コンテンツ モデルに対する検証でバックトラッキングが不要になることが保証されます。もちろん、スタック上のすべての要素のコンテンツ モデルの FSM で状態を追跡する必要があります。つまり、ドキュメントのネストの深さの最大値に比例するメモリです。
ID/IDREF 検証は例外です。このため、プロセッサは、検出された ID および IDREF 値の数に比例するメモリを必要とします。大まかに言えば、プロセッサは見つかったすべての ID と IDREF 値を記憶しており、ドキュメントの最後に到達すると、ID が 2 回出現していないこと、およびすべての IDREF が ID の中に出現していることを確認します。同様に、unique/key/keyref をチェックするために、プロセッサは見つかったキー値を記憶する必要があります。しかし、これに必要なメモリは、「XML 全体をメモリに保持する」よりもはるかに少なくなります。
ほとんどのパーサーは、検証を開始する前にメモリ内にスキーマ/ DTDツリーを構築する必要があります。その後、ほとんどの場合、シーケンシャルルックアップが行われ、場合によっては少しプッシュ、ピーク、ポップが行われます。