Я проверяю XML-документ на Java с помощью Xerces, но не получаю никаких ошибок.
Однако документ 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, что соответствует типу "nonNegativeIntegerItemType", содержащемуся в "http://www.nltaxonomie.nl/7.0/basis/sbr/types/nl-types.xsd", также содержится в xsd выше и расширяет " moneyItemType" и определяется в "http://www.xbrl.org/2003/xbrl-instance-2003-12-31.xsd", который xsd также содержится в приведенной выше проверке.
Любая идея, почему моя проверка Java не сообщает об ошибках?
Кстати: он сообщает об ошибке, если я изменяю приведенный выше фрагмент XML в:
<bd-burgers:CommutingExpensesAccordingToTableTotalAmount>841.0</bd-burgers:CommutingExpensesAccordingToTableTotalAmount>
То есть: удаление всех атрибутов. Затем я получаю правильную ошибку проверки, говорящую о том, что contextRef отсутствует.