【发布时间】:2011-04-29 16:56:12
【问题描述】:
我定义了一个 xml 文件和一个 dtd。我对 sax 解析器的理解是它处理事件而不是将整个 xml 文档(如 DOM)存储在内存中。比如说,我有一个声明像
【问题讨论】:
我定义了一个 xml 文件和一个 dtd。我对 sax 解析器的理解是它处理事件而不是将整个 xml 文档(如 DOM)存储在内存中。比如说,我有一个声明像
【问题讨论】:
DTD 通常被转换为一组有限状态自动机——在 Aho 和 Ullmann 等编译器教科书中,有一个标准算法可将 BNF 语法转换为确定性 FSA。这将为每个元素的内容模型生成一个 FSA。因此,解析/验证的当前状态由为每个打开元素保存一个 FSA(及其当前状态)的堆栈表示。当解析器遇到一个开始标记时,它会检查该开始标记是否代表最顶层 FSA 中的有效转换,并通过进行此转换来更改该 FSA 中的当前状态;它还将新的 FSA 添加到与新元素的内容模型的 FSA 对应的堆栈中。当它看到一个结束标记时,它会检查最顶层 FSA 的当前状态是否为最终状态,并将这个 FSA 弹出堆栈。
【讨论】: