使用 Java 加载 XML 架构时出错

Error loading XML schema with Java

我正在尝试解析使用 this schema,但我收到以下错误:

org.xml.sax.SAXParseException; systemId: http://www.khronos.org/files/collada_schema_1_4.xsd; lineNumber: 1; columnNumber: 50; White spaces are required between publicId and systemId.
    at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(ErrorHandlerWrapper.java:198)
    at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.fatalError(ErrorHandlerWrapper.java:177)
    at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:441)
    ...

这是我的代码的相关部分:

DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();

dbFactory.setValidating(true);

SchemaFactory sf = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
URL schemaURL = new URL("http://www.khronos.org/files/collada_schema_1_4.xsd");
Schema schema = sf.newSchema(schemaURL); //Line causing error
dbFactory.setSchema(schema);

DocumentBuilder docBuilder = dbFactory.newDocumentBuilder();
Document doc = docBuilder.parse(file);

doc.getDocumentElement().normalize();

This question 说所有 xsi:schemaLocation 之间应该有空格,但它们之间已经有空格了。一些评论暗示这可能是 Eclipse 的问题,这绝对是可能的。

This question 说这是 doctype 声明的问题,但我不知道我的文档中代码的可比较部分在哪里。

当您试图从 URI 为 http://www.khronos.org/files/collada_schema_1_4.xsd.

的文档创建新模式对象时,会出现错误消息

错误消息所抱怨的数据似乎很可能是从该 URI 检索到的数据。您是否尝试取消引用 URI?你得到了什么?

我得到的是一个 404 伴随着一个 HTML 错误页面,它开始于:

<!DOCTYPE html>

这不是合法的 XML 文档类型声明,因此不可能是合法的 XSD 模式文档的开头。错误消息没有提供很好的问题诊断(它表明输入确实有一个 public 标识符和一个系统标识符,但它们缺少分隔空格,而基本问题是两者都不存在完全没有),但修复与错误消息的详细信息无关。解决方法是为要加载的架构文档找到正确的 URI:http://www.khronos.org/files/collada_schema_1_4 而不是 http://www.khronos.org/files/collada_schema_1_4.xsd.