【问题标题】:XML Schema validation with SAX - how does it work?使用 SAX 进行 XML 模式验证 - 它是如何工作的?
【发布时间】:2012-08-29 12:07:30
【问题描述】:

根据Validating a HUGE XML file 同意,但我仍然感到困惑......如何使用 SAX 解析进行 XML 模式验证。我的意思是模式验证涉及在 XML 中来回进行验证 - 键引用等。整个 XML 不应该在内存这样做? 抱歉这个愚蠢的问题:(

【问题讨论】:

    标签: java xml schema sax


    【解决方案1】:

    大多数解析器必须在开始任何验证之前在内存中构建一个 Schema/DTD 树,之后它主要是按顺序查找,有时还会进行一些推送、查看和弹出操作。

    【讨论】:

    • 所以模式被加载为 DOM,但实际的 XML 不是,并且解析不断地来回加载,对吗?
    【解决方案2】:

    可以使用几乎为零的内存来对架构进行验证。 UPA 约束确保针对内容模型的验证永远不需要回溯。当然,您确实需要在内容模型的 FSM 中跟踪堆栈中每个元素的状态,即内存与文档的最大嵌套深度成正比。

    ID/IDREF 验证是一个例外:为此,处理器需要与遇到的 ID 和 IDREF 值的数量成比例的内存。粗略地说,处理器会记住找到的所有 ID 和 IDREF 值,当它到达文档末尾时,检查是否没有 ID 出现两次,并且每个 IDREF 都出现在这些 ID 中。类似地,为了检查 unique/key/keyref,处理器需要记住已找到哪些键值。但这所需的内存比“将整个 XML 保存在内存中”要少得多。

    【讨论】:

    • 感谢您的出色回答。什么是UPA?我相信 FSM 是有限状态机。
    • UPA = 唯一粒子属性,XSD 中的一个约束,可确保内容模型明确无误。 FSM = 有限状态机。
    猜你喜欢
    • 2010-12-05
    • 2015-08-08
    • 1970-01-01
    • 2013-05-26
    • 1970-01-01
    • 2015-06-28
    • 1970-01-01
    • 2021-03-12
    • 1970-01-01
    相关资源
    最近更新 更多