0

一連のXMLファイルをそれらのXSDに対して検証する当社のXSD用の製品をセットアップしようとしています。

私たちのプロジェクトはMavenベースであり、antスクリプトを使用してカタログファイルを生成します(これにより、これらすべてのスキーマをEclipseインスタンスに簡単に追加できます)。

私が抱えている問題は、XMLカタログを使用して、これらのスキーマに対して一連のサンプルxmlファイルを検証するMavenまたはAntタスクをセットアップできないことです。これらすべてのスキーマに対して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はカタログを介してロードされたスキーマをバリデーターにリンクしていないようです。-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スクリプトを変更すると、機能しますが、それは私が望む設定ではありません。

4

1 に答える 1

0

最終的に、各XSDのMavenプロジェクトに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>

2番目のcatalog.xmlは明らかに正しく読み取られています。

于 2013-01-14T10:56:30.223 に答える