QXmlSchema и QXmlSchemaValidator выдают ошибку при проверке XSD и XML

Я пытаюсь проверить XML с помощью схемы XSD в Qt.

Согласно валидатору схемы W3C, XML и XSD являются действительными.

Это код, где я выполняю проверки:

bool XMLFOMParser::isWellFormed(const std::string& text) const {
  QXmlSchema schema;
  bool ok = schema.load(QByteArray(SOMSchema_xsd));
  std::cout<< SOMSchema_xsd << std::endl << "--------------" << std::endl;
  std::cout << text << std::endl << "---------------" << std::endl;
  QXmlSchemaValidator validator(schema);
  bool result = validator.validate(QByteArray(text.data()));
  return result;
}

text содержит текст XML, который должен быть проверен SOMSchema_xsd содержит текст схемы xsd.

Когда я загружаю схему в QXmlSchema переменная ok верно, и с cout Я вижу, что и схема, и XML загружены правильно. Я вижу их полностью.

Когда я выполняю проверку, result ложно, и в консоли я вижу следующие сообщения:

Error XSDError in http://standards.ieee.org/downloads/1516/1516.2-2010/IEEE1516-DIF-2010.xsd, at line 1, column 0: Premature end of document.
Error XSDError in file:///my/program.exe, at line 2, column 251: Loaded schema file is invalid.

Я не знаю, почему я получаю эти ошибки, так как:

  • Файлы загружаются правильно в классы (я вижу их с cout);
  • QXmlSchema не дает мне ошибок при загрузке xsd
  • Сайт W3C говорит мне, что XML проверен без проблем.

Что я делаю не так?

1 ответ

Решение

Похоже, ваша схема ссылается на другую схему, а именно http://standards.ieee.org/downloads/1516/1516.2-2010/IEEE1516-DIF-2010.xsd, Но, как вы можете убедиться сами, это недействительная ссылка на XSD.

Однако для проверки валидатор должен знать ссылочные элементы этой схемы. Когда он пытается загрузить его, вы получаете свою ошибку.

Вы должны установить QAbstractUriResolver, который может обслуживать этот запрос, например, из локального файла

Другие вопросы по тегам