倭マン's BLOG

くだらない日々の日記書いてます。 たまにプログラミング関連の記事書いてます。 書いてます。

RELAX NG で妥当性検証 by Jing

今回は Jing を使って、RELAX NG による XML 文書の妥当性検証を行う方法を見ていきます。 Jing の JAR ファイル等はこちらからダウンロードできます。 また、Maven2 で依存性に付加したい場合は、次のような <dependency> 要素を設定してください:

<dependency>
  <groupId>thaiopensource</groupId>
  <artifactId>jing</artifactId>
  <version>20030619</version>
</dependency>

妥当検証の方法は、概ね以下のような方法があります:

  • コマンド・プロンプトから実行
  • Java プログラムを実行
  • Ant タスクを実行

以下では、RELAX NG スキーマは "schema.rng"、検証対象となる XML ファイルは "target.xml" とします。

コマンド・プロンプトから実行


jing.jar は「実行可能な JAR ファイル」なので、通常の JAR ファイルの実行方法で実行が行えます:

java -jar jing.jar schema.rng target.xml

この例では、「jing.jar」はカレント・フォルダ上にあるとしています。 うまくいかない場合は、環境変数 JAVA_HOME, CLASSPATH, PATH などの設定を確認してください(詳細は省略)。

Java プログラムを実行


以前、javax.xml.validation パッケージ内のクラスを使って妥当性検証を行う方法を見ましたが、今回は Jing の Native API を用いる方法を紹介:

import org.xml.sax.InputSource;
import com.thaiopensource.validate.SchemaReader;
import com.thaiopensource.validate.ValidationDriver;
import com.thaiopensource.validate.rng.SAXSchemaReader;

class Main{

    public void main(String... args)throws Exception{
        SchemaReader reader = SAXSchemaReader.getInstance();
        ValidationDriver driver = new ValidationDriver(reader);
        driver.loadSchema(new InputSource("schema.rng"));
        System.out.println(driver.validate(new InputSource("target.xml")));
    }
}

検証対象の XML 文書が妥当なら "true" が、そうでないなら "false" が表示されます。

Ant タスクを実行


Jing の JAR ファイル内に、すでに Ant タスクを実装したクラスが定義されています。 したがって、Ant のビルドファイル (build.xml) 内では、タスクの定義(<taskdef> 要素)を書けば、後は通常のタスクを書くように妥当性検証を行えます:

<?xml version="1.0"?>
<project name="RelaxNG" default="validation" basedir=".">
  
  <!-- 妥当性検証のタスクを定義 -->
  <taskdef name="jing" classpath="jing.jar"
           classname="com.thaiopensource.relaxng.util.JingTask"/>

  <target name="validation">
    <!-- 妥当性検証タスクを実行 -->
    <jing rngfile="schema.rng" file="target.xml"/>
  </target>
</project>

あとは、コマンド・プロンプト上(ビルドファイルがある場所)で「ant」コマンドを実行するだけです:

ant

妥当性検証が成功すれば、「BUILD SUCCESSFUL」と表示されます。