繁体   English   中英

针对XMLSchema.xsd验证XML模式

[英]validate an XML schema against XMLSchema.xsd

我正在尝试针对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获取的XMLSchema.XSD 该代码在我的类路径中与Saxon-HE-9.4.jar一起运行。

但是,此操作失败:

org.xml.sax.SAXParseException; cvc-elt.1:找不到元素'xs:schema'的声明。

它似乎与先前的消息有关(由我的自定义LSResourceResolver子类发出):

无法读取架构文档“ [...] XMLSchema.xsd”,因为1)找不到文档; 2)无法读取文件; 3)文档的根元素不是<xsd:schema>。

但是,当我注释掉XMLSchema.XSD文件中的整个DOCTYPE部分时,它就起作用了。

我想这意味着解析器无法处理XMLSchema.xsdDOCTYPEATTLIST子句。

所以我有两个问题:

  1. 为什么解析器无法处理XMLSchema.xsd XML序言? 并且有什么方法可以解决此问题而无需编辑XMLSchema.xsd文件?
  2. 如果没有办法解决#1,我该如何在没有XML序言的情况下从http://www.w3.org/2001/XMLSchema.xsd下载XMLSchema.xsd文件,所以我不必手动进行编辑。 一个简单的wget也会获取XML序言(使用浏览器访问链接时不会显示BTW)。

这确实太大了,无法提供SSCCE,但是如果有人想看看,我将提供带有测试用例的github存储库。

如果对XMLSchema.dtd的引用失败,那么一种显而易见的解决方案(除了注释掉已经找到的DOCTYPE声明之外)将是下载DTD文件(XMLSchema.dtd和datatypes.dtd)并提供它们本地也是如此。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM