【问题标题】:XML DTD/Schema validation in MavenMaven 中的 XML DTD/Schema 验证
【发布时间】:2010-12-04 09:53:48
【问题描述】:

如何在 Maven 构建期间针对 DTD 或 XSD 架构验证 XML 文档?

【问题讨论】:

    标签: xml validation maven-2 xsd maven-plugin


    【解决方案1】:

    有一个xml-maven-plugin可以检查XML文件是否为matching an XML schema但我不认为它可以生成报告。

    【讨论】:

      【解决方案2】:

      xml-maven-plugin 的validate goal 将检查格式是否正确,并可选择根据模式进行验证。如果验证失败,构建将失败。

      插件不生成任何报告,出于兴趣,您希望在报告中包含什么?有关无效文件的信息?

      这是一个示例用法:

        <plugin>
          <groupId>org.codehaus.mojo</groupId>
          <artifactId>xml-maven-plugin</artifactId>
          <executions>
            <execution>
              <goals>
                <goal>validate</goal>
              </goals>
            </execution>
          </executions>
          <configuration>
            <validationSets>
              <validationSet>
                <dir>src/main/xml</dir>
                <systemId>src/main/xmlschema.xsd</systemId>
              </validationSet>
            </validationSets>
          </configuration>
        </plugin>
      

      【讨论】:

      • 是的,验证错误报告将有助于指出 xml 文件中的可能错误,如 PMD 或 Findbug 对 java 代码所做的。我注意到许多开发人员在处理项目时会跳过 xml 或 jsp 验证错误/警告,这可能会导致潜在的运行时错误。
      • 同意。仅仅失败构建并没有那么有用,但是失败构建并打印模式验证错误......现在这是超级有用的。特别是如果您只在需要调试某些东西时使用 IDE。
      • 有人可以帮助我,了解如何包含要针对架构进行验证的文件。
      • 示例 POM sn-p 说明了用法,但对 2 个主要参数 的描述将四舍五入。 @Pascal Thivent 已经给出的答案有什么不同?
      【解决方案3】:

      我使用xml-maven-plugin 有一段时间了(感谢Pascal ThiventRick Seller 向我介绍这个),但遇到了一些问题。

      我正在验证一个 XML 文档。在某些时候,我们将 XML 文档分成两个文件,两个文件都在它们自己的子目录中。那时 xml-maven-plugin 不再验证任何东西,因为文件被移动了,但也没有抱怨它。我个人也发现配置不太直观,如果不符合您的预期,调试起来有点困难。

      所以对我来说,我很高兴重新发现 schemavalidate Ant 任务与 maven-antrun-plugin 的结合。做了我需要的一切等等。

      在下面的示例中,我检查文件是否被实际选中。当然,您可以根据您的特定需求进行定制。作为奖励(有点题外话)我如何获取作为依赖项下载的 xsd 路径的示例。

      <build>
          <plugins>
              <plugin><groupId>org.apache.maven.plugins</groupId>
                  <artifactId>maven-antrun-plugin</artifactId><version>1.8</version>
                  <executions><execution>
                      <id>validate-xml-document-files-against-schema</id>
                      <phase>test</phase>
                      <goals><goal>run</goal></goals>
                      <configuration>
                          <target>
                              <copy file="${maven.dependency.com.mycompany.some-schema.xsd.path}" tofile="${xml-validation-dir}/some-schema.xsd" />
                              <resourcecount property="xml.count">
                                  <fileset dir="${xml-validation-dir}" includes="**/*.xml" />
                              </resourcecount>
                              <fail message="fileset does not match any xml file (use same fileset for actual validation)">
                                  <condition><equals arg1="${xml.count}" arg2="0" /></condition>
                              </fail>
                              <echo message="validating ${xml.count} xml files against some-schema" />
                              <schemavalidate>
                                  <schema namespace="http://mycompany.com/some-namespace" file="${xml-validation-dir}/some-schema.xsd" />
                                  <fileset dir="${xml-validation-dir}" includes="**/*.xml" />
                              </schemavalidate>
                              <echo message="all ${xml.count} xml documents are valid" />
                          </target>
                      </configuration>
                  </execution></executions>
              </plugin>
          </plugins>
      </build>
      
      <dependencies>
          <dependency>
              <groupId>com.mycompany</groupId>
              <artifactId>some-schema-artifact</artifactId>
              <version>1.2.3</version>
              <type>xsd</type>
          </dependency>
      </dependencies>
      

      当然,这并不真正适合 maven 的工作方式,但它对我有用,也许知道这个选项会帮助其他人。

      【讨论】:

        猜你喜欢
        • 2013-06-15
        • 2010-11-22
        • 1970-01-01
        • 2016-09-18
        • 1970-01-01
        • 1970-01-01
        • 2012-08-21
        相关资源
        最近更新 更多