【问题标题】:XML Schema validation using OASIS XML Catalog (Maven or Ant)使用 OASIS XML 目录(Maven 或 Ant)的 XML Schema 验证
【发布时间】:2015-09-28 08:36:59
【问题描述】:

我正在尝试为我们公司的 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。基础 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 我尝试了以下设置(尝试了互联网上的各种建议):

<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 脚本更改为直接使用架构文件时,它可以工作,但这不是我想要的设置。

【问题讨论】:

    标签: xml ant xsd maven-3 xml-validation


    【解决方案1】:

    我最终在 maven 项目中为每个 XSD 创建了一个验证集,并将要测试的文件放在单独的文件夹中。

    <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 显然读取正确。

    【讨论】:

      猜你喜欢
      • 2010-12-04
      • 2010-10-28
      • 2018-04-10
      • 1970-01-01
      • 2016-02-03
      • 1970-01-01
      • 2013-03-22
      • 1970-01-01
      相关资源
      最近更新 更多