Apcoordinator ユーザーズガイド
目次 前ページ次ページ

第2部 Apcoordinatorコアの機能> 第10章 XMLデータ仕様記述> 10.2 XMLデータ仕様記述の作成

10.2.1 項目仕様の記述

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

XMLデータ仕様記述の例

<?xml version="1.0" encoding="iso-2022-jp" ?>
<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
適用するメソッドを指定します。
形式 動作
int, long, double, boolean, String 指定の型に変換します。
stringLength 文字列長を返します。
enum(n,m,…) 列挙された値n,m,…のいずれかに一致するかどうか判定します。
pattern(re) 正規表現に一致するかどうか判定します。
errorcount errorアトリビュートによって蓄積されているエラー情報の数を返します。このメソッドはプロパティ値を無視します(propertyアトリビュートを省略可能です)。

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

項目値のチェックや変換に、利用者定義メソッドを利用することができます。 利用者定義メソッドには、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アトリビュートと同じです。

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

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

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


目次 前ページ次ページ

All Rights Reserved, Copyright © 富士通株式会社 2000-2005