model->[project]->[containedPackages]->[classes]->[operation]
このパスは、3 つの関連について単純な線形トラバーサルを示します。 このパスは、オブジェクト「model」から始まり、関連「project」、「containedPackages」、 「classes」、「operation」の順に進むことを示します。このパスをアンカー・モデルに適用すると、 結果は、メタクラス Operation の全インスタンスのコレクションとなります。 これらのインスタンスは関連「project」の終点にあるパッケージ内のクラスに属しています。 以下の図は、このパスがトラバースするメタモデルの部分を示したものです。
例えば、Project は、Model との関連において 「project」の役割を持ち、Class は、Package との関連において「classes」の役割を 持ちます。
以下の図は、このパスを適用できるオブジェクト構造を 示したものです。この場合、パスはオブジェクト opA1、opA2、opA3、および opC1 のコレクションと評価します。

したがって、 パスの構文では、ノード ([project] など) はトラバースする 関連を表し、2 つのノード間にある端 (->) はトラバーサルの順序を 示します。さらに、この構文では、-> 記号は実際のパスからアンカーを切り離すため、 アンカーはオプションとなります。 アンカーが省略されると、変数 current に現在バインドされているオブジェクトが暗黙のアンカーとなります。したがって、 パス [project] は、current->[project] を省略したものです。
model->[project]->[containedPackages]->top:^[nestedPackages]->@top
この例では、3 つの新規構文要素が 入っています。 これらは、ノード・ラベル (top:)、結果への追加用の注釈 (^)、および参照ノード (@top) です。 ラベルと参照ノードは、複雑なパスについて、二次元の循環構造とその他の非線形構造をエンコードする手段を提供します。 この例では、「top」というラベルのノードからそれ自身への循環があります。 この循環は、再帰関連 Package の nestedPackages に対応します。 これは、Package の直接ネストされたすべてのパッケージに対する関連です。
この循環の目的は、 パッケージのすべてのネスト・パッケージをトラバースすることに あります (パッケージの nestedPackages 内にあるパッケージを含む)。このパスを model に適用すると、 結果は、Package の全インスタンスのコレクションとなります。 これらのインスタンスは、model 内の project の 関連 containedPackages の終点にあるパッケージについて直接および間接的にネストされたパッケージです。 ただし、このパスをこのように動作させるには、結果への追加用の注釈 ^ を使用する 必要があります。ノード [nestedPackages] のこの注釈は、 関連 nestedPackages の終点で検出されたすべてのオブジェクトが 結果セットに追加されることを意味します。出力端を持っていないノードはすべて、暗黙的に 結果への追加用の注釈を持っています。つまり、最初の例では、ノード [operation] は 暗黙的に結果への追加用の注釈を持っています。 ただし、2 番目の例の場合は循環であるため、すべてのノードは出力端を持っています。 したがって、どのノードも暗黙的に結果への追加用の注釈を持っていません。
[Project]->containedPackages]->top:^
[nestedPackages]->@top

model->[project]->[containedPackages]->top:[]->([classes]; [nestedPackages]->@top)
この例で、「top」という ラベルのノードには 2 つの継承ノード ([classes] と [nestedPackages]) があります。この場合、 「top」ノードは、空の関連 ([]) でもあります。したがって、「top」は、 パス内の各種ノードを構造化する役割のみを果たします。[classes] ノードは出力端を持っていません (複数の出力端を持つノード内の結果を指し示す矢印が パスの構造に関連していません)。つまり、このノードは、暗黙的に結果への追加用の注釈を 持っています。
top:[ ]->([classes]); [nestedPackages]->@top

したがって、 このパスをモデルに適用すると、結果は、Class の全インスタンスのコレクションとなります。 これらのインスタンスは、モデル内の project の関連 containedPackage の終点にある パッケージか、またはそのパッケージのネスト・パッケージに属しています。
aPackage->[nestedPackages]{$name="PkgA"}->[classes]{$name~="*Impl"}
パスのノードには条件が付いている場合があります。 条件は、関連名の後に中括弧で示されます。これは、ある関連のオブジェクトが ノードの通過を許可される前にそのオブジェクトが満たす必要のある述部を示します。 この例では、条件 {$name="PkgA"} は、"PkgA" という名前の オブジェクトのみが [classes] ノードに到達できるようにし、 さらに、条件 {$name~="*Impl"} は、 正規表現 "*Impl" と一致する名前のオブジェクトのみを結果セットに表示できるようにします。[nestedPackages]{$name="PkgA"} の 結果は、filter {$name="PkgA"} over [nestedPackages] の結果と厳密に同じです。条件式の評価方法について詳しくは、filter の資料を 参照してください。
パスは、オブジェクト からオブジェクト・コレクション への関数です。 これらは、一連の関連に従って到達できるオブジェクトを取得します。 パスは、自身のグラフ構造の中でこの計算をエンコードします。要するに、 この構造は計算に相当 します。具体的には、パスは、データ・フロー・グラフであり、 実行時のデータ・フローに似ています。 つまり、データ・フロー・ビューでは、パスは現時点でデータ・リンクおよび操作で構成されています。 データ・リンクは端に対応し、操作はノードに対応しています。 データ・リンクはオブジェクトと共に流れるコンジットであり、操作は、 着信データ・リンクからオブジェクトを受け取り、発信データ・リンクでオブジェクトを 生成する基本的な計算です。
model->[project]->[containedPackages]->[classes]->[operation]
このパスは、共に直線的にリンクされた 操作 [project]、[containedPackages]、[classes]、 および [operation] で構成されます。オブジェクト「model」が [project] 内に 入ると、「model」の関連「project」内のすべてのオブジェクトが出力されます。次に、これらの オブジェクトは [containedPackages] 内に入り、これにより、 関連 containedPackages 内のオブジェクトが出力されます。 次に、これらのオブジェクトは [classes] 内に入り、 関連「classes」内のオブジェクトが出力されます。そしてこれらすべての オブジェクトは [operation] 内に入り、関連「operation」内の オブジェクトが出力されます。最終的に、これらのオブジェクトは、 完全パスの (暗黙的な) 結果ノード内に入ります。 リーフ・ノードで生成されたすべてのオブジェクトは暗黙的に結果ノード内に 入ります。結果ノードには、完全パスによって生成されたオブジェクトが 収集されます。
パスの評価は、オブジェクトのフローが 停止したときに終了します。そこで、パスが終了したことを確認する際に注意が必要です。 厳密に言えば、あるオブジェクトが操作に再度アクセスした場合、かつその場合に限り、 パスは終了しません。これは、そのオブジェクトそのものが循環を完了するか、 あるいは一連のオブジェクトが循環を完了するためです。
操作の振る舞いには、いくつかの境界事例があります。 第 1 に、操作 [] は恒等操作です。 すべてのオブジェクトは単に流れるのみです。第 2 に、入力オブジェクトが関連 α 内に オブジェクトを保持していない場合、操作 [α] は出力を生成しません。 第 3 に、入力オブジェクトのメタクラスが関連 α を保持していない場合、 操作 [α] も出力を生成しません。したがって、例えば、入力オブジェクト が Package ではなく Class のインスタンスである 場合、操作 [nestedPackages] は出力を生成しません。