我正在尝试为我们公司的XSD设置一个产品,用于验证针对这些XSD的大量XML文件。
我们的项目基于maven,我使用ant脚本生成目录文件(这样可以更容易地将所有这些模式添加到eclipse实例中)。
我遇到的问题是我无法设置maven或ant任务,通过使用XML目录来验证针对这些模式的大量示例xml文件。我不想为所有这些模式明确定义URN到XSD规则(这就是我拥有的XML Catalg)。
我尝试过以下设置:
的Maven
<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。 base 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不会将通过目录加载的模式与验证器链接。使用-X,我确实看到它处理目录并查看模式及其名称空间。
ANT
使用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脚本以直接使用它可以使用的模式文件时,但这不是我想要的设置。
答案 0 :(得分:0)
我最终在maven项目中为每个XSD创建了一个validationSet,并在单独的文件夹中对要测试的文件进行了创建。
<validationSet>
<dir>src/test/xml/foo</dir>
<validating>true</validating>
<systemId>http://example.org/schema/foo.xsd</systemId>
</validationSet>
<validationSet>
<dir>src/test/xml/bar</dir>
<validating>true</validating>
<systemId>http://example.org/schema/bar.xsd</systemId>
</validationSet>
显然可以正确读取第二个catalog.xml。