我正在尝试为我们公司的 XSD 设置一个产品,以针对这些 XSD 验证一堆 XML 文件。
我们的项目是基于 maven 的,我使用 ant 脚本来生成目录文件(这使得将所有这些模式添加到 eclipse 实例中变得更加容易)。
我遇到的问题是我无法设置一个 maven 或 ant 任务,该任务通过使用 XML 目录针对这些模式验证一堆示例 xml 文件。我不想为所有这些模式明确定义 URN 到 XSD 规则(这就是我使用 XML Catalg 的目的)。
我尝试了以下设置:
马文
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>xml-maven-plugin</artifactId>
<version>1.0</version>
<executions>
<execution>
<goals>
<goal>validate</goal>
</goals>
</execution>
</executions>
<configuration>
<catalogs>
<catalog>${project.build.outputDirectory}/catalog.xml</catalog>
</catalogs>
<validationSets>
<validationSet>
<dir>src/test/xml</dir>
<validating>true</validating>
</validationSet>
</validationSets>
</configuration>
</plugin>
这无法解析catalog.xml。基础 catalog.xml 包含未正确展开的相对 nextCatalog 条目(绝对路径错误)。当我直接将 2 个 catalog.xml 条目添加到 pom 时,只解析第一个。
但是即使只解析了第一个 catalog.xml 文件也无法验证 xml 文件:
line 4, column 191: cvc-elt.1: Cannot find the declaration of element 'mtc:SERVICE_ORDER_MSG'.
示例 XML 文件是有效的,因此显然 maven 不会将通过目录加载的模式与验证器链接起来。使用 -XI 确实可以看到它处理目录并查看模式及其名称空间。
蚂蚁
使用 ant 我尝试了以下设置(尝试了在互联网上找到的各种建议):
<target name="test">
<schemavalidate warn="true" failonerror="true" fullchecking="true">
<fileset dir="src/test/xml">
<include name="ASN_207a44e3-0aeb6cd8-551ffcc2-2ca1409a.xml" />
</fileset>
<xmlcatalog>
<classpath>
<pathelement location="resolver.jar" />
<pathelement location="ant-apache-resolver-1.8.4.jar" />
</classpath>
<xmlcatalog>
<catalogpath>
<pathelement location="target/classes/MTC/catalog.xml" />
</catalogpath>
</xmlcatalog>
</xmlcatalog>
</schemavalidate>
</target>
在这种情况下,我没有任何迹象表明目录文件已被解析。我只得到意外元素的错误。当我将 ant 脚本更改为直接使用架构文件时,它可以工作,但这不是我想要的设置。