gpt4 book ai didi

java - 根据 XMLSchema.xsd 验证 XML 架构

转载 作者:行者123 更新时间:2023-12-01 12:35:40 26 4
gpt4 key购买 nike

我正在尝试根据 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 被使用,而不是通过互联网获取的。该代码在我的类路径上使用 Saxon-HE-9.4.jar 运行。

但是失败了:

org.xml.sax.SAXParseException; cvc-elt.1: Cannot find the declaration of element 'xs:schema'.

这似乎与之前的消息相关(由我的自定义 LSResourceResolver 子类发出):

Failed to read schema document '[...]XMLSchema.xsd', because 1) could not find the document; 2) the document could not be read; 3) the root element of the document is not <xsd:schema>.

但是,当我注释掉它正在工作的 XMLSchema.XSD 文件中的整个 DOCTYPE 部分时。

我猜这意味着解析器无法处理 XMLSchema.xsd 中的 DOCTYPEATTLIST 子句。

所以我有两个问题:

  1. 为什么解析器无法处理 XMLSchema.xsd XML prolog?有没有什么方法可以解决这个问题而无需编辑 XMLSchema.xsd 文件?
  2. 如果没有办法绕过#1,我如何从 http://www.w3.org/2001/XMLSchema.xsd 下载 XMLSchema.xsd 文件没有 XML 序言,因此我不必手动编辑。一个简单的 wget 也可以获取 XML 序言(顺便说一句,当使用浏览器访问链接时,该序言不会出现)。

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

最佳答案

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

关于java - 根据 XMLSchema.xsd 验证 XML 架构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25623126/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com