根据Validating a HUGE XML file 同意,但我仍然感到困惑......如何使用 SAX 解析进行 XML Schema 验证。我的意思是模式验证涉及在 XML 中来回验证以验证例如 - 键引用等。不应该整个 XML 都可以在内存中使用吗?抱歉这个愚蠢的问题:(
问问题
673 次
2 回答
4
可以使用几乎为零的内存来完成对模式的验证。UPA 约束确保针对内容模型的验证永远不需要回溯。当然,您确实需要跟踪堆栈上每个元素在内容模型的 FSM 中的状态,即内存与文档的最大嵌套深度成正比。
ID/IDREF 验证是一个例外:为此,处理器需要与遇到的 ID 和 IDREF 值的数量成比例的内存。粗略地说,处理器会记住找到的所有 ID 和 IDREF 值,当它到达文档末尾时,检查是否没有 ID 出现两次,并且每个 IDREF 都出现在这些 ID 中。类似地,为了检查 unique/key/keyref,处理器需要记住已找到哪些键值。但是这样做所需的内存比“将整个 XML 保存在内存中”要少得多。
于 2012-09-04T22:27:21.417 回答
0
大多数解析器必须在开始任何验证之前在内存中构建一个 Schema/DTD 树,之后它主要是按顺序查找,有时还会进行一些推送、查看和弹出操作。
于 2012-09-04T19:45:52.580 回答