我正在使用 Xerces 验证 Java 中的 XML 文档,但没有收到任何错误。
但是,XML 文档包含错误,当我使用例如 XMLSply 编辑器对其进行验证时,会正确报告错误。
我找不到我做错了什么。我想我确实包含了正确验证所需的所有 XSD 模式。
请给点建议?代码片段:
SchemaFactory factory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
factory.setErrorHandler(new ErrorHandlerDefault());
Schema schema = factory.newSchema(createSchemaSources());
validator = schema.newValidator().validate("file.xml");
我用来验证的 XSD:
private Source[] createSchemaSources() throws IOException {
Source[] sources = new Source[5];
sources[0] = createSource("http://www.nltaxonomie.nl/7.0/domein/bd/tuples/bd-bedr-tuples.xsd");
sources[1] = createSource("http://www.nltaxonomie.nl/7.0/basis/bd/items/bd-burgers.xsd");
sources[2] = createSource("http://www.nltaxonomie.nl/7.0/domein/bd/tuples/bd-burg-tuples.xsd");
sources[3] = createSource("http://www.nltaxonomie.nl/7.0/basis/sbr/types/nl-types.xsd");
sources[4] = createSource("http://www.xbrl.org/2003/xbrl-instance-2003-12-31.xsd");
return sources;
}
正在验证的 xml 文件的一小段(太大而无法全部列出):
<bd-burgers:CommutingExpensesDaysPerWeekCount unitRef="uu_513" contextRef="cc_711">2</bd-burgers:CommutingExpensesDaysPerWeekCount>
此条目包含错误,即:
Numeric item <bd-burgers:CommutingExpensesDaysPerWeekCount> has neither a 'precision' nor a 'decimals' attribute.
XMLSpy 正确报告了这一点,但我的 Java 代码却没有 :(... 那么我在这里做错了什么?我虽然忘记了 XSD 文件,但“CommutingExpensesDaysPerWeekCount”在“ http://www.nltaxonomie. nl/7.0/basis/bd/items/bd-burgers.xsd ”,包含在 xsd 的上面,对应于“ http://www.nltaxonomie.nl/7.0/basis/ ”中包含的类型“nonNegativeIntegerItemType” sbr/types/nl-types.xsd ”,也包含在上面的 xsd 中,它扩展了“monetaryItemType”,并在“ http://www.xbrl.org/2003/xbrl-instance-2003-12-31中定义.xsd ",其中 xsd 也包含在上述验证中。
知道为什么我的 Java 验证不报告任何错误吗?
顺便说一句:如果我将上面的 XML 片段更改为:
<bd-burgers:CommutingExpensesAccordingToTableTotalAmount>841.0</bd-burgers:CommutingExpensesAccordingToTableTotalAmount>
即:删除所有属性。然后我得到一个正确的验证错误,说 contextRef 丢失。