我正在尝试针对XMLSchema.xsd验证最简单的XSD文件:
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="a" type="xs:int"/>
</xs:schema>
为此,我已下载文件XMLSchema.xsd并将其传递给我的org.w3c.dom.ls.LSResourceResolver
,以确保使用本地提供的XMLSchema.XSD
而不是通过Internet获取的文件。代码在我的类路径上以Saxon-HE-9.4.jar
运行。
然而,这失败了:
org.xml.sax.SAXParseException; cvc-elt.1:找不到元素'xs:schema'的声明。
似乎与上一条消息相关(由我的自定义LSResourceResolver
子类发出):
无法读取架构文档'[...] XMLSchema.xsd',因为1)无法找到该文档; 2)文件无法阅读; 3)文档的根元素不是&lt; xsd:schema&gt;。
但是,当我在DOCTYPE
文件中注释掉整个XMLSchema.XSD
部分时,它正在运行。
我想这意味着解析器无法处理DOCTYPE
中的ATTLIST
和XMLSchema.xsd
子句。
所以我有两个问题:
XMLSchema.xsd
XML序言?有没有办法解决这个问题,而无需编辑XMLSchema.xsd
文件?XMLSchema.xsd
文件,因此我不必手动编辑。一个简单的wget
也会获取XML序言(当使用浏览器访问链接时,BTW不会出现。)这实在是太大了,无法提供SSCCE,但如果有人想看看,我将提供一个带测试用例的github存储库。
答案 0 :(得分:1)
如果它没有引用XMLSchema.dtd,那么一个明显的解决方案(除了注释掉你已经找到的DOCTYPE声明)将是下载DTD文件(XMLSchema。 dtd和datatypes.dtd)并在本地提供它们。