BranchStart - ブランチ開始

条件式の判定結果によって分岐します。
入力ストリームや各種変数を条件式で判定した結果、一致した場合は右方向、一致しなかった場合は下方向にストリームを出力します。

■ストリーム情報

入力フォーマットすべて
接続数1
説明 すべてのストリームを入力できます。
出力フォーマットすべて
説明 入力ストリームをそのまま出力します。

■コンポーネントプロパティ

名前プロパティ型マッピング説明
条件式condition入力&出力 フローを分岐するための条件式を指定します。
条件式の記述方法は下記トピック「条件式について」を参照してください。
判定方法choice- 入力ストリームが複数レコードの場合の判定方法を指定します。
1つ以上一致 [Any one] - 1つ以上のレコードが式に一致した場合に右方向に分岐します。
すべて一致 [All] - すべてのレコードが式に一致した場合に右方向に分岐します。

■トランザクション処理

コミット何もしません。
ロールバック何もしません。

■エラー処理

タイプパラメーターエラー処理フロー
へのストリーム
エラー
コード
説明
汎用「汎用のパラメーター 」
を参照してください。
コンポーネントの入力ストリーム なし 条件式が不正な場合

■「汎用」のパラメーター

No.名前説明
1Conditionエラー発生時の条件式 の値

■条件式について

条件式を使って、入力ストリームや各種変数を判定することができます。

各種変数の判定

フロー変数やセッション変数などの変数を判定する場合、以下のようなリファレンス表記で変数やプロパティを参照することができます。

変数の種類リファレンス表記
フロー変数$flow.<フロー変数名>
外部変数セット$exvar.<外部変数セット名>.<変数名>
システム変数$system.<システム変数名>(英語名)
ストリーム変数$stream.<ストリーム変数名>(英語名)
直前のコンポーネントのプロパティ$prev.<プロパティ名>(英語名)

ストリーム変数ではストリームに明示的に設定された変数だけでなく、レコード件数とレコード番号も参照できます。
(レコード番号はマッパーの条件式で使用する場合は有用ですが、このコンポーネントではほとんど使用されることはありません。)

コンポーネントプロパティは表示名(インスペクタ上に表示される名前)ではなく実名(xfpファイルに保存される名前)で参照されます。入力時には直接タイプするのではなくコード補完を利用してください。

入力ストリーム型がXMLのときに条件式でbool値(true/false)と比較する場合は、下記「XPath」の「bool値との比較」を参照してください。

入力ストリーム型がJSONのときには注意が必要です。詳しくは、下記「JsonPath」の「JSONストリームでの変数と値の比較」を参照してください。

使用例

フロー変数の場合

$flow.var1 > 5

外部変数セットの場合

$exvar.exvar1.var1 = "MATCH"

入力ストリームの判定

条件式による比較は、ストリーム全体または1レコードに対して行います。

ストリームを判定する条件式の記述には、以下の4種類の記述方法のいずれかを使用します。このうち、MQLとRQLは本製品独自の記述方法です。XPathはW3C勧告のXPath仕様に準拠しています。JsonPathはJsonPath仕様に準拠しています。式の種類を特定するためのプレフィクスを式の前に記述します。プレフィクスは省略可能で、省略した場合はストリーム型がMIMEの場合はMQL、XMLの場合はXPath、JSONの場合はJsonPath、それ以外の場合はRQLで記述されたものとします。

条件式の種類説明プレフィクス評価対象のストリーム型
RQLレコード形式を評価record:すべてのストリーム型
MQLMIME形式を評価mql:MIME
XPathXML形式を評価xpath:XML
JsonPathJSON形式を評価json:JSON

Binaryデータについて

Binary形式の以下のデータは、これらの条件式で判定できません。

Binary型の比較を行う場合はマッパー関数の論理タブの関数群を使用してください。

変数の使用

変数自身を判定する以外に、入力ストリームを判定する条件式の中でも変数を参照できます。ただし、MIME形式の判定には使用できません。

RQLの場合

$record.field1 != $flow.var1

XPathの場合

/root/element1[@attr1=$exvar.exvar1.var1]

条件式の結果

結果はtrueまたはfalseのどちらかになります。条件式に誤りがある場合はエラーとなります。また、式でなく「True」「False」の文字列を直接記述して分岐することもできます。マッパーの中で論理タブの関数を使用して演算した結果を条件式 にマッピングして、その結果で分岐することができます。

RQL

RQLはレコードに対して条件式を記述するための言語です。レコードは「$record」というキーワードで参照されレコードの各フィールドにはフィールド名またはフィールドインデックスによってアクセスします。

フィールド名による指定の例

$record.field1 = "aaa"
$record.field2 < 3

フィールドインデックスによる指定の例

$record[0] = "aaa"
$record[1]< 3
$record[*] = "bbb"

比較演算子、値

比較演算子としては以下のものが使用できます。右辺には文字列、数値、bool値(true/false)、変数のいずれかが指定できます。また、比較演算子の両側には空白文字を入れてください。

=等価
!=等価ではない
>より大きい
<より小さい
>=以上
<=以下
~=を含む (※右辺が文字列の場合のみ)
!~を含まない (※右辺が文字列の場合のみ)

ストリーム型がText、HTML、MIMEに対するRQLの適用

これらのストリームは「Object」という名前の単一フィールドをもつ単一レコードとして扱われます。つまり、以下のような式を記述できます。

$record.Object="aaa"

MQL

MQLはMIMEヘッダーに対して条件式を記述するための言語です。MQLの書式の構成は以下のようになっています。

part[0].header[xxx].attribute[yyy] = "zzz"

<パート句>.<ヘッダー句>.<属性句><比較演算子><値>

以下にそれぞれの構成要素について説明します。

パート句

条件の対象とするMIMEのパートを指定します。

条件の対象とするMIMEのヘッダーを指定します。

属性句

条件の対象とするMIMEのパラメーターを指定します。

ヘッダー句と属性句は評価の対象範囲が異なります。属性句は必要に応じて使用します。
例:以下のようなMIMEヘッダーの場合

Content-Disposition: attachment; filename="TEST.txt"

ファイル名に「TEST」という文字列が含まれているかどうかを判定するには、次のように記述します。

header[Content-Disposition].attribute[filename] ~= "TEST"

ヘッダーの評価として、次のように記述すると結果はfalseになるため、注意が必要です。

header[Content-Disposition] ~= "TEST"

ヘッダー句の評価対象にパラメーターは含まれないので、ヘッダー句の対照範囲は「attachment」という文字列に限られます。

比較演算子、値

比較演算子は、「=(等しい)」「!=(等しくない)」「~=(値を含む)」「!~(値を含まない)」が使用できます。
値は、文字列、変数、ワイルドカード(*) が使用できます。ワイルドカードが指定された場合は値のチェックは行われず指定のヘッダー(またはパラメーター)の存在のみがチェックされます。

MQLの省略記法

MQLにパート句のみを指定した場合、header[*] = *が補われて評価されます。
例えば、

part[0]

という記述は、

part[0].header[*]=*

と同じです。

XPath

XPathはW3C勧告のXPath仕様に準拠しています。

bool値との比較

入力ストリーム型がXMLの場合に条件式でbool値(true/false)と比較したいときは、明示的にRQLで比較するようにプレフィクスを記述します。例えば、条件式が「$flow.var1 = true」の場合、「record:$flow.var1 = true」のように記述します。 これは、評価対象のストリーム型がXMLの場合は条件式の種類をXPathとして処理しますが、「$flow.var1 = true」のような条件式もXPathとして処理され、コンテキストノードに「true」という要素があるかないかの結果を$flow.var1と比較すると解釈されるためです。

XPathによる指定の例

/root/element[@attr='test']
/root/element >= 10
/root/element != 'test'

JsonPath

JsonPathはJsonPath仕様(正確にはそのJava実装)に準拠しています。

JsonPathと値の比較

JsonPath式では指定したPathに対応するNodeが存在する場合はtrue、存在しない場合はfalseと判定されます。

JsonPathでは指定したPathに対する「=」や「>」などの比較式を用いた値の比較はできません。

値の比較を行いたい場合は「$[?(@.key == $flow.var1)]」のように「[]」内の条件式で指定してください。

JsonPathで変数が参照できるのは[]内だけです。

JsonPathによる指定の例

$.key1.key2
$[?(@.key == 'hoge')]
$[0]

JSONストリームでの変数と値の比較

入力ストリーム型がJSONの場合に、条件式で単純に変数と値を比較したいときは、明示的にRQLで比較するようにプレフィクスを記述します。例えば、条件式が「$flow.var1 = "aaa"」の場合、「record:$flow.var1 = "aaa"」のように記述します。 これは、評価対象のストリーム型がJSONの場合は条件式の種類をJsonPathとして処理しますが、JsonPathでは「$flow.var1 = "aaa"」のような条件式はエラーになるためです。そこで条件式に「record:」を付けてRQLとして処理させる必要があります。

AND, ORの使用