XML DTD / проверка схемы в Maven - PullRequest
       48

XML DTD / проверка схемы в Maven

6 голосов
/ 07 октября 2009

Как проверить документы XML во время сборки Maven по DTD или схеме XSD?

Ответы [ 3 ]

4 голосов
/ 07 октября 2009

Цель проверки плагина xml-maven-plugin проверит правильность формы и при необходимости подтвердит соответствие схеме. Сборка не удастся, если проверка не удалась.

Плагин не создает никакого отчета, что бы вы хотели в отчете из интереса? информация о недействительных файлах?

Вот пример использования:

  <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/xsd</dir>
          <systemId>src/main/xmlschema.xml</systemId>
        </validationSet>
      </validationSets>
    </configuration>
  </plugin>
3 голосов
/ 07 октября 2009

Существует xml-maven-plugin , который может проверить, соответствуют ли XML-файлы схеме XML , но я не думаю, что он может генерировать отчеты.

0 голосов
/ 02 февраля 2016

Я какое-то время использовал xml-maven-plugin (спасибо Pascal Thivent и Rick 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, но это сработало для меня, и, возможно, кому-то другому поможет эта опция.

...