3

HTML または XML ファイルを解析した後、DOM ツリーを取得できます。

C、C++、または JavaScript を解析した後、構文ツリーを取得できます。

構文ツリーは、有効な C/C++/JS プログラムを指定する文脈自由文法に基づいて構築されていることに注意してください。

しかし、DOM ツリーは、HTML/XML ファイルによってのみ指定された純粋な階層構造にすぎないようです。本当?解析後にスキーマ検証が行われたのはそのためですか? これら 2 種類の解析ツリーの根本的な違いは何ですか?

4

2 に答える 2

1

Ira Baxter と Guy Coder の関心に感謝します。

しばらく再検索して、この 2 つのケースを比較しました。私の感想はこんな感じです。

XMLの「構文解析」は、「検証構文解析」または「検証構文解析」のいずれかです。後者の場合、パーサーは文書型定義(DTD) ファイルに対して構文をチェックしません。このパーサーは、XML ファイル内の要素の階層のみを生成します。したがって、「検証解析」よりも軽量です。

C/C++/Javaの「解析」は、文脈自由文法に基づいて構文ツリーを生成します。したがって、非公式に言えば、「解析の検証」に似ています。

PS: 私は専門家ではないので、私の理解が正しくない場合はコメントを歓迎します。

于 2012-05-24T20:20:00.447 に答える
1

他の言語と同様に、XML は文法によって記述されます。XML の文法はかなり単純です (開始タグ、終了タグ、正しいネスト)。そのため、構文ツリーも単純に見えるかもしれません (単なる要素の階層)。XML スキーマは、XML ファイルのコンテンツを記述するもう 1 つの文法です。

したがって、基本的には、2 つのパーサーが次々に呼び出されます。最初のものは、すべての開始タグに終了タグがあり、ネストが正しいことを確認します。

2 番目のパーサーは、XML ファイルのコンテンツがスキーマ (文法) に従って構造化されていることを検証します。たとえば、"B" という名前の要素は "A" という名前の要素内にのみ含めることができます。

プログラミング言語の構文は変更できないため、これを C などのプログラミング言語の解析と比較するべきではありません。If ステートメントは関数本体内にのみ表示でき、外部には表示できず、それを変更することはできません。ただし、XML では、"B" 要素が "A" 要素内にのみ表示されること、または "A" 要素が "B" 要素内にのみ表示されることを指定できます。すべて、XML ファイルのコンテンツの文法を指定することによって行います。スキーマの形式で。

于 2012-05-24T22:49:32.683 に答える