0

我一直在尝试提高针对 XSD 模式的 XML 验证性能,特别是在 XSD 唯一约束方面,并决定尝试Woodstox。我几乎遵循这个例子,在某种程度上我改变XMLValidationSchema.SCHEMA_ID_DTDXMLValidationSchema.SCHEMA_ID_W3C_SCHEMA

但是,我遇到的问题是,即使 XML 违反了唯一约束,Woodstox 验证器也会发现 XML 有效。将我的 java 代码切换回“常规” javax.xml.validation.Schema, javax.xml.stream.XMLStreamReader,并且javax.xml.validation.Validator正确检测到唯一性约束违规。

此外,我可以确认 Woodstox 验证器做了一些事情,因为例如,如果我有一个负数,而 XML 中的 XSD 预期为正数,我可以看到它说“XML 无效”。

这可能是因为我到目前为止一直使用的工具在对不合格元素的唯一性检查方面很好,而 Woodstox 不是吗?这是我脑海中唯一的想法...

此外,是否有人能够确认 Woodstox 会比基于 Xerces 的工具(Java 中存在的几乎所有东西?)更好地验证独特的约束?

非常感谢任何帮助!

4

1 回答 1

1

不确定这是否有帮助,但 Woodstox 使用 Multi-Schema Validator ( https://github.com/kohsuke/msv ) 进行 XML Schema 和 Relax NG 验证。因此,如果 MSV 支持唯一性验证,那么 Woodstox 也应该支持。

如果是这种情况,我不记得了,但是我记得的 MSV 的唯一限制是它不支持默认值的分配(因为 MSV 的立场是它不进行文档修改而只是验证),所以它看起来这应该可行。

至于性能:由于 Woodstox 是完全流式传输并且从不构建树模型(如 DOM),因此它将对任何大小的文档线性执行,因此对于较大的文档可能更有效。但由于验证是通过 MSV 进行的,因此很难确定。最大的问题是 Xerces 是否基于 DOM 树进行验证(其中构建树是昂贵的部分),或者它是否能够仅使用 SAX 解析器。

我建议的一件事是针对 Woodstox 提交一个错误,网址为:

https://github.com/FasterXML/woodstox

(版本 5 正在迁移到 github;您也可以在http://woodstox.codehaus.org提交 Jira 问题)

因为从理论上讲,MSV 集成中的某些东西可能没有完全发挥作用。如果是这样,欢迎提供一个小示例/测试用例。

于 2014-10-09T17:22:54.500 回答