ページの先頭行へ戻る
 Apcoordinatorユーザーズガイド

11.2.1 項目仕様の記述

本項では、XMLデータ仕様記述での項目仕様の記述方法を説明します。項目仕様は、XMLデータ仕様記述のsectionタグ内に記述します。

XMLデータ仕様記述の例

<?xml version="1.0" encoding="Shift_JIS" ?>
<eSpec
    xmlns=http://interstage.fujitsu.com/schemas/uji/eSpec
    xmlns:xsi=http://www.w3.org/2001/XMLSchema-instance
    xsi:schemaLocation="http://interstage.fujitsu.com/schemas/uji/eSpec
                        http://interstage.fujitsu.com/schemas/uji/espec.xsd">
  <config>
    <version>6.0</version>
  </config>
  <specification name="sampleCheck" >
    <section name="sect1" >
      <verify property="sampleNumber" op="GE" operand="#0" exception="#ERR01" info="#0以上" />
      <verify property="sampleNumber" op="LE" operand="#10" exception="#ERR01" info="#10以下" />
    </section>
  </specification>
</eSpec>

上記の例では、sectionタグ内に2つのverifyタグがあり、それぞれがプロパティsampleNumberに対する項目仕様となっています。

項目の値をチェックする

項目の値をチェックするためには、verifyタグを利用します。

      <verify property="sampleNumber" op="GE" operand="#0" exception="#ERR01" info="#0以上" />

property
データBeanのプロパティ名を指定します。

op
判定のための関係演算を指定します。GT(より大)、GE(以上)、LT(より小)、LE(以下)、EQ(等しい)、NE(等しくない)を指定します。

operand
演算対象を指定します。定数の場合は、先頭に#を記述します。%nullや%emptyなどの予約オブジェクトを利用することもできます。

exception
エラーコードを記述します。文字列定数の場合は、先頭に#を記述します。exceptionアトリビュートを記述した場合は、エラーを検出した時点でESpecResultExceptionがスローされます。

info
エラーの補足情報を記述します。文字列定数の場合は、先頭に#を記述します。

複数項目のエラーを同時にチェックする

errorアトリビュートを利用することで、複数項目のチェックを行うことができます。exceptionアトリビュートを用いた場合は、チェックがエラーになった場合にすぐ例外を発生しますが、errorアトリビュートは継続してチェックを行います。

      <verify property="sampleNumber" op="GE" operand="#0" error="#ERR01" info="#0以上" />

error
エラーコードを記述します。文字列定数の場合は、先頭に#を記述します。errorアトリビュートを記述した場合は、エラー情報は蓄積されるのみで、継続してXMLデータ仕様記述を実行します。

ビルトインメソッドを利用して項目をチェックする

項目値のチェックを支援するために、文字列長、文字パターンなどをチェックするビルトインメソッドが準備されています。

      <verify property="numberString" function="pattern([0-9]+)" op="EQ" operand="#true"
                 error="#ERR02" info="#数値チェック" />
      <verify function="errorcount" op="EQ" operand="#0"
                 exception="#ERR99" info="#例外あり" />

function
適用するメソッドを指定します。

利用者定義メソッドで項目をチェックする

項目値のチェックや変換に、利用者定義メソッドを利用することができます。利用者定義メソッドには、static形式と継承形式があります。

      <verify property="prop" function="?mypackage.MyClass.myCheck"
                 op="EQ" operand="#true" error="#ERR11" info="#myCheck" />
      <verify property="prop1,prop2,prop3,#1" function="?localCheck" op="EQ" operand="#0"
                 error="#ERR12" info="#localCheck" />

function
利用者定義メソッドを指定する場合は、メソッド名の先頭に"?"を付加した文字列を指定します。

以下は利用者定義メソッドの記述例です。

package mypackage;
public class MyClass {
    public static boolean myCheck(String prop) {
       ....
       return true;
    }
}
import com.fujitsu.uji.xscript.ESpecValidator;
public class CheckClass extends ESpecValidator {
    public CheckClass() {}
    public int localCheck(String prop1, int prop2, String prop3, int param) {
    // int localCheck(Object[] props) でも可
       ....
       return 0;
    }
}

データ項目に値を代入する

データ項目に値を代入する場合は、termタグを利用します。

      <!-- sample1を無条件にtargetProp1に代入 -->
      <term property="sample1" target="targetProp1" />
      <!-- sample2の文字列長が0の場合に文字列"none"をtargetProp2に代入 -->
      <term property="sample2" function="stringLength" op="EQ" operand="#0"
                        value="#none" target="targetProp2" />
      <!-- sample3に1を足してtargetProp3に代入 -->
      <term property="sample3" op="ADD" operand="#1" target="targetProp3" />
      <!-- sample4にmyFormatを適用した結果をtargetProp4に代入 -->
      <term property="sample4" valueFunction="?myFormat" target="targetProp4" />

property
データBeanのプロパティ名を指定します。

target
代入先のデータBeanのプロパティ名を指定します。

value
代入する値が演算結果と異なる場合、valueアトリビュートで指定します。

op(関係演算)
opアトリビュートに関係演算を指定した場合は、関係演算の結果が真の場合にのみ代入が実行されます。

op(算術演算)
ADD(加算)、SUB(減算)、MUL(乗算)、DIV(除算)、REM(剰余)をopアトリビュートに指定することで、operandとの演算結果をtargetに設定します。算術演算の場合はvalueアトリビュートは記述せず、演算結果が代入対象となります。

valueFunction
valueFunctionで指定した利用者定義メソッドで変換などの操作を行った結果をtargetに設定します。利用者定義メソッドの指定方法は、functionアトリビュートと同じです。

処理の中間結果を一時的に保持する

targetやpropertyで、中間変数を指定することができます。変数名の先頭に"^"を付加して指定します。

      <term property="sampleValue" op="ADD" operand="#1" target="^tempValue" />
      <term property="^tempValue" op="DIV" operand="#4" target="targetProp" />