如何更改“级别” Ant 的 XMLValidate 任务提供的验证功能是什么?

发布于 2024-07-06 21:22:49 字数 929 浏览 11 评论 0原文

我正在尝试使用 Ant 的 XMLValidate 任务根据 DTD 验证 XML 文档。 问题不是它不起作用,而是它太好用了。 我的 DTD 包含一个外部参照元素,该元素具有 IDREF 类型的“@linkend”属性。 大多数参考 ID 都位于当前文档之外。 因此,我的构建失败,因为解析器抱怨 IDREF 引用的 ID 不存在。 那么,有没有什么方法可以根据 DTD 验证我的 XML 文档,同时忽略此类错误?

我尝试过的一些事情: 在 XMLValidate 上设置“宽松”选项使任务仅检查文档的格式良好性,而不是检查 DTD 的有效性。 Ant 手册中的 XMLValidate 任务列出了一些您可以设置的 JAXP 和 SAX 选项,但似乎没有一个适用。

这是我的代码:

 <target name="validate">
        <echo message="Validating ${input}"/>
        <xmlvalidate file="${input}" failonerror="yes"
            classname="org.apache.xml.resolver.tools.ResolvingXMLReader">
            <classpath refid="xslt.processor.classpath"/>
        </xmlvalidate>
 </target>

如您所见,我正在使用 ResolvingXMLReader 根据公共标识符目录解析 DTD。 但是,如果我直接使用嵌套的 xmlcatalog 元素指定 DTD,则会得到相同的行为。

I am attempting to use Ant's XMLValidate task to validate an XML document against a DTD. The problem is not that it doesn't work, but that it works too well. My DTD contains an xref element with an "@linkend" attribute of type IDREF. Most of these reference IDs outside of the current document. Because of this, my build fails, since the parser complains that the ID that the IDREF is referencing doesn't exist. So, is there any way that I can validate my XML document against the DTD, but ignore errors of this type?

A few things I've tried: Setting the "lenient" option on XMLValidate makes the task only check the document's well-formedness, not it's validity against a DTD. The XMLValidate task in the Ant manual lists some JAXP and SAX options you can set, but none seem applicable.

Here's my code:

 <target name="validate">
        <echo message="Validating ${input}"/>
        <xmlvalidate file="${input}" failonerror="yes"
            classname="org.apache.xml.resolver.tools.ResolvingXMLReader">
            <classpath refid="xslt.processor.classpath"/>
        </xmlvalidate>
 </target>

As you can see, I'm using ResolvingXMLReader to resolve the DTD against a catalog of public identifiers. However, I get the same behavior if I specify the DTD directly using a nested xmlcatalog element.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

乄_柒ぐ汐 2024-07-13 21:22:49

您的问题源于 DTD 的两种解释之间的差异:您的解释和 规范的< /a> :-)。 IDREF 必须引用同一文档中的 id,而您的 IDREF 则引用跨文档的元素。

我的建议是创建您自己的 DTD 版本,为该属性指定 NMTOKEN 而不是 IDREF,并使用它来执行验证。 这将确保内容是有效的 xml id 值。

Your problem derives from the difference between two interpretations of the DTD: yours, and the spec's :-). IDREFs must refer to ids in the same document, whereas yours refer to elements across documents.

My suggestion is to create your own version of the DTD that specifies NMTOKEN instead of IDREF for that attribute, and use it to perform your validation. This will ensure that the contents will be valid xml id values.

娇妻 2024-07-13 21:22:49

不确定这是否有帮助,但是您可以尝试这个解决方法吗?
创建一个临时文件,合并所有 XML,然后进行验证。

Not sure if this helps, but could you try this workaround?
Create a temporary file, merge all your XMLs, and do the validation.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文