3

解析 HTML 或 XML 文件后,我们可以得到 DOM 树。

在解析 C、C++ 或 JavaScript 之后,我们可以得到语法树。

请注意,语法树是基于指定有效 C/C++/JS 程序的上下文无关语法构建的。

但似乎 DOM 树只是由 HTML/XML 文件指定的纯层次结构。真的吗?这就是解析后进行Schema Validation的原因吗?这两种解析树的根本区别是什么?

4

2 回答 2

1

感谢您对 Ira Baxter 和 Guy Coder 的关注。

我重新搜索了一会儿,比较了这两种情况。我的印象是这样的:

XML的“解析”可以是“验证解析”或“非验证解析”。对于后一种,解析器不会根据文档类型定义(DTD) 文件检查其语法。此解析器仅生成 XML 文件中元素的层次结构。所以它比“验证解析”更轻。

C/C++/Java的“解析”基于其上下文无关文法生成语法树。因此,非正式地,它更像是“验证解析”。

PS:我不是专家,如果您发现我的理解不正确,欢迎提出任何意见。

于 2012-05-24T20:20:00.447 回答
1

与任何其他语言一样,XML 由语法描述。XML 的语法相当简单(开始标签、结束标签、正确的嵌套)。所以语法树看起来也很简单(只是元素的层次结构)。XML 模式是描述 XML 文件内容的另一种语法。

所以基本上是两个解析器被一个接一个地调用。第一个验证所有开始标签都有一个结束标签并且嵌套是正确的。

第二个解析器验证 XML 文件的内容是根据模式(语法)构造的。就像名为“B”的元素只能包含在名为“A”的元素中。

这不应与解析 C 等编程语言相比,因为您无法更改编程语言的语法。If 语句只能出现在函数体内,不能出现在函数体之外,而且您无法更改它。但是,在 XML 中,您可以指定“B”元素只能出现在“A”元素中,或者“A”元素只能出现在“B”元素中。所有这些都通过指定 XML 文件内容的语法来实现以模式的形式。

于 2012-05-24T22:49:32.683 回答