走査

<< 目次を表示 >>

ページ位置:  Enterprise Architectの拡張(SDK) > コード分析 フレームワーク > コード分析のクエリ > コード分析のクエリ言語 (mFQL) >

走査

ancestor

ancestor(count: number, source: set)

ancestor(value: string, source: set)

ancestor(count: number, value: string, source: set)

 

ancestor関数は、指定された条件でノードを走査し取得します。走査に失敗したノードは無視します。パラメータとして、走査する親ノードの数・走査対象のノード名か、その両方かを指定します。条件を満たす結果をセットとして返します。

 

  • ノードの数が指定され名前が指定されない場合には、指定された数だけ親ノードを走査し、結果セットに含めます。対象とならなかった親ノードは結果セットに含めません。
  • 名前のみが指定された場合には、その名前に一致する親ノードを再帰的に走査します。一致する親ノードが見つかれば、その内容を結果セットに含めます。見つからない場合には結果セットに含めません。
  • ノードの数と名前の両方が指定された場合には、指定された数だけ親ノードを走査し、一致する名前がある場合に結果セットに含めます。条件に合わないノードは結果セットに含めません。

 

結果セットには同じノードが重複する場合があります。この重複する可能性がある動作は現時点での仕様です。distinct関数を利用することで、重複するノードを排除することができます。

 

次の例は、ノードの名前が “OPERATION” のセットを対象に、1レベル上の親ノードを含めたものを結果セットとして返します。 “OPERATION”のノードで、親ノードがないものは対象外となります。

 

ancestor(1, getByNode("OPERATION"))

 

次の例は、ノードの名前が “OPERATION” のセットを対象に、親ノードを再帰的に探索し、名前が “CLASS” の親ノードがあるものが結果セットに含まれます。

 

ancestor("CLASS", getByNode("OPERATION"))

 

最後の例は、ノードの名前が “OPERATION” のセットを対象に、親ノードを1レベルのみ、つまり直上のノードの名前が “CLASS” の親ノードがあるものが結果セットに含まれます。

 

ancestor(1, "CLASS", getByNode("OPERATION"))

Filter

filter(count: number, source: set)

filter(value: string, source: set)

filter(count: number, value: string, source: set)

 

filter関数は ancestor関数と動作は同じですが、ノードの内容を編集することがありません。条件に合わないノードは返却セットに含まれませんが、条件に合うノードは引数として渡されるセットと同じになります。

 

filter関数は、セットの内容の確認のためにも利用できます。例えば、getByNameやgetByValueで得られるセットについてその種類が適切であることを保証するために利用できます。次の例は、値“CFoo”を持つノードの属性が“TYPE”であるものが結果セットになります。

 

filter(0, “TYPE”, find(“CFoo”))

 

理論上、TYPEノードしかCFooの値を持たない場合において、この処理を行うことで結果が適切であることが保証されます。