当前位置: 首页 > 知识库问答 >
问题:

Woodstox Stax2 XML W3C架构验证-唯一约束问题

柏正平
2023-03-14

我一直在尝试改进针对XSD模式的XML验证性能,特别是关于XSD唯一约束的性能,并决定尝试一下Woodstox。我基本上遵循了这个示例,将XMLValidationSchema.schema_id_dtd更改为XMLValidationSchema.schema_id_w3c_schema

不过,我遇到的问题是,Woodstox验证器会发现XML有效,即使XML违反了唯一约束。将我的java代码切换回“常规”javax.xml.validation.schemajavax.xml.stream.xmlStreamReaderjavax.xml.validation.validator时,会正确检测到唯一性约束冲突。

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

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

此外,有没有人能够证实Woodstox的性能会比基于Xerces的工具(几乎是Java中存在的所有工具)更好是否验证唯一约束?

非常感谢任何帮助!

共有1个答案

孔棋
2023-03-14

不确定这是否有帮助,但Woodstox使用多模式验证器(https://github.com/kohsuke/msv)对其XML模式和Relax NG验证。因此,如果MSV支持唯一性验证,那么Woodstox也应该支持。

我不记得当时是不是这样,但我记得的MSV唯一的限制是它不支持默认值的分配(因为MSV的位置是它不做文档修改,而只做验证),所以看起来这应该是可行的。

至于性能:由于Woodstox是完全流式的,并且从不构建树模型(像DOM那样),所以它对于任何大小的文档都将是线性的,因此对于较大的文档可能会更有效率。但由于验证是通过MSV进行的,所以很难确定。一个很大的问题是Xerces是基于DOM树进行验证(在DOM树的构建是一个很昂贵的部分),还是仅仅能够使用SAX解析器。

我推荐的一件事是针对Woodstox建立一个bug,网址是:

https://github.com/FasterXML/woodstox

(第5版将转移到GitHub;您也可以在http://woodstox.codehaus.org上提交一个Jira问题)

因为理论上可能是MSV集成中的某些部分没有完全工作。如果是这样,一个小的例子/测试用例将是受欢迎的。

 类似资料:
  • 我已经单独测试了neo4j密码查询,目前遇到了两个问题(我将在另一篇文章中发布第二个py2neo问题)。 我一直在通过手动添加行来更改csv文件,如下所示: 我的关键字csv文件如下所示: 但是,当我试图通过向csv文件追加新数据来创建一个新的title节点时,我遇到了一个约束错误,告诉我节点我刚刚已经存在。 我已经尝试遵循这里找到的答案: Neo4j仅在唯一时加载CSV 我在浏览器环境中测试的当

  • 问题内容: 我想对Bean验证有一个限制,但这不是标准提供的。如果我要使用JPA ,则不会有独特的验证和错误报告机制。 有没有一种方法可以定义为Bean验证约束并将其与JPA结合使用,例如,JPA创建具有唯一约束的列并检查值是否唯一? 问题答案: 除非获得整个表的锁 ,否则基本上不可能使用SQL查询来检查唯一性(任何并发事务都可以在手动检查之后但在提交正在进行的事务之前修改数据)。换句话说,不可能

  • 问题内容: 如何在Visual Studio中直观地在varchar(max)字段上创建唯一约束。 问题是当我尝试时: 管理索引和键 >添加>列 我只能选择bigint列,而不能选择任何varchar(max)列。 我是否可能必须使用 检查约束 ? 如果是,请在表达式中添加什么? Thnx的信息 问题答案: 您不能在列上设置唯一约束(最多2 GB的文本!)。您根本无法。 唯一性约束由后台中的唯一索

  • 主要内容:在创建表时设置唯一约束,在修改表时添加唯一约束,删除唯一约束MySQL 唯一约束(Unique Key)是指所有记录中字段的值不能重复出现。例如,为 id 字段加上唯一性约束后,每条记录的 id 值都是唯一的,不能出现重复的情况。如果其中一条记录的 id 值为‘0001’,那么该表中就不能出现另一条记录的 id 值也为‘0001’。 唯一约束与主键约束相似的是它们都可以确保列的唯一性。不同的是,唯一约束在一个表中可有多个,并且设置唯一约束的列允许有空值,但

  • 主要内容:Oracle唯一约束语法,Oracle唯一约束例子在本教程中,您将学习如何使用Oracle唯一约束来确保包含在一列或几列中的数据在表中的行之间是唯一的。 Oracle唯一约束语法 一个唯一的约束是一个完整性约束,它确保存储在一列或一组列中的数据在表中的行之间是唯一的。 通常,在使用内联约束语法创建表时,将唯一约束应用于列,如下所示: 此唯一约束指定中的值在整个表中是唯一的。也可以使用外线()约束语法来定义一个唯一的约束: 可以通过使用子句和约束名

  • 当我试图创建第二个表时,我遇到了以下错误,但我不知道为什么。对于表patente,我希望能够将(idfunconario,titulo)作为主键。正如其他主题中所建议的,我已经尝试将唯一约束设置为“唯一(IDFunconario,titulo)”。 消息错误: 错误:没有唯一的约束匹配引用表"public acao"的给定键SQL状态:42830 我在64位的Windows 8.1上使用Postg