【问题标题】:Woodstox Stax2 XML W3C Schema validation - unique constraint issueWoodstox Stax2 XML W3C 模式验证 - 唯一约束问题
【发布时间】:2014-12-03 17:04:41
【问题描述】:

我一直在尝试改进针对 XSD 模式的 XML 验证性能,特别是在 XSD 唯一约束方面,并决定尝试Woodstox。我非常关注this example,以至于我将XMLValidationSchema.SCHEMA_ID_DTD 更改为XMLValidationSchema.SCHEMA_ID_W3C_SCHEMA

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

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

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

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

非常感谢任何帮助!

【问题讨论】:

  • 我现在限定了我使用的所有元素,但是 Woodstox 验证器仍然声称具有损坏的唯一约束的 XML 是有效的。同时,正如预期的那样,常规的javax.xml.validation.Validator发现它无效。

标签: java xsd xsd-validation stax woodstox


【解决方案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 集成中的某些内容可能无法完全正常工作。 如果是这样,欢迎提供一个小示例/测试用例。

【讨论】:

    猜你喜欢
    • 2016-09-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多