(57)【特許請求の範囲】
【請求項１】
データフローグラフの仕様を結合するための方法であって、
コンポーネント間のデータのフローを表すリンクにより接続された２又は３以上のコンポーネントを規定する第１のデータフローグラフ仕様であって、前記コンポーネントは、第１のコンポーネント及び第２のコンポーネントを含み、少なくとも１つのコンポーネントが前記コンポーネントのポートに流入するデータに適用される計算を表し、少なくとも１つのコンポーネントが前記コンポーネントのポートから流出するデータを提供する計算を表す、第１のデータフローグラフ仕様と、
少なくとも第３のコンポーネントと少なくとも１つのサブグラフインターフェースとを規定し、前記サブグラフインターフェースが、（１）前記第３のコンポーネントのポートへの又はそこからの前記サブグラフインターフェースの外部のデータのフローと、（２）前記第１のデータフローグラフ仕様のコンポーネントのポートへの又はそこからの前記サブグラフインターフェースの内部のデータのフローとの間の接続を表す少なくとも１つのフロー接合部を含む、第２のデータフローグラフ仕様と
を含む複数のデータフローグラフ仕様を、入力デバイス又はポートを介して受信するステップと、
結合されたデータフローグラフ仕様を生成するために、少なくとも１つのプロセッサを用いて、前記第１のデータフローグラフ仕様及び前記第２のデータフローグラフ仕様を含む情報を処理するステップであって、
前記サブグラフインターフェースと前記第１のデータフローグラフ仕様との間の関連付けを識別するステップと、
前記サブグラフインターフェース上の少なくとも第１のフロー接合部に対して、データ又は計算特性の記述子の値の転送に関する方向を決定するステップと、
データ又は計算特性の記述子の値を前記第１のフロー接合部から前記第１のデータフローグラフ仕様により規定されたコンポーネント又は前記第２のデータフローグラフ仕様により規定されたコンポーネントへ、前記決定された方向に従って転送するステップと
を含む、処理するステップと
を含む、方法。
【請求項２】
第１のデータフローグラフ仕様が、第１のコンポーネントに関する記述子が第２のコンポーネントに関する記述子と同一であることを示す少なくとも１つの指示子を含む、請求項１に記載の方法。
【請求項３】
決定された方向が、サブグラフインターフェース上の第１のフロー接合部から第２のコンポーネントへのデータ又は計算特性の第１の記述子の値の内向きの転送に対応する、請求項２に記載の方法。
【請求項４】
第１の記述子が、第３のコンポーネントから第１のフロー接合部に提供される、請求項３に記載の方法。
【請求項５】
第１の記述子が、第２のコンポーネントから第１のコンポーネントに提供される、請求項３又は４に記載の方法。
【請求項６】
第２のデータフローグラフ仕様が、第３のコンポーネントに関する記述子がサブグラフインターフェースに関する記述子と同一であることを示す少なくとも１つの指示子を含む、請求項１に記載の方法。
【請求項７】
第２のデータフローグラフ仕様が、第４のコンポーネントに関する記述子が第３のコンポーネントに関する記述子と同一であることを示す少なくとも１つの指示子を含む、請求項６に記載の方法。
【請求項８】
決定された方向が、サブグラフインターフェース上の第１のフロー接合部から第３のコンポーネントへのデータ又は計算特性の第１の記述子の値の外向きの転送に対応する、請求項７に記載の方法。
【請求項９】
第１の記述子が、第１のコンポーネントから第１のフロー接合部に提供される、請求項８に記載の方法。
【請求項１０】
第１の記述子が、第３のコンポーネントから第４のコンポーネントに提供される、請求項８又は９に記載の方法。
【請求項１１】
記述子が、第１のコンポーネントのポート及び第２のコンポーネントのポートの間で転送されるデータのデータ特性を記述する、請求項１〜１０のいずれかに記載の方法。
【請求項１２】
データ特性が、転送されるデータ内のレコードのフィールドのフォーマットを含む、請求項１〜１１のいずれかに記載の方法。
【請求項１３】
記述子が、第１のデータフローグラフ仕様又は第２のデータフローグラフ仕様の少なくとも一方のコンポーネントの計算特性を記述する、請求項１〜１０のいずれかに記載の方法。
【請求項１４】
計算特性が、コンポーネントにより表される計算の実行の並列度を含む、請求項１〜１０及び１３のいずれかに記載の方法。
【請求項１５】
第１のデータフローグラフが暗号化される、請求項１〜１４のいずれかに記載の方法。
【請求項１６】
第２のデータフローグラフが暗号化される、請求項１〜１５のいずれかに記載の方法。
【請求項１７】
第１のデータフローグラフの２又は３以上のコンポーネントが、前記第１のデータフローグラフにおける第１の複数の連続的に実行されるフェーズの間で分散される、請求項１〜１６のいずれかに記載の方法。
【請求項１８】
第２のデータフローグラフが複数のコンポーネントを含み、前記複数のコンポーネント及びサブグラフインターフェースが、前記第２のデータフローグラフにおける第２の複数の連続的に実行されるフェーズの間で分散される、請求項１７に記載の方法。
【請求項１９】
実行用にデータフローグラフを準備するステップが、第１の複数の連続的に実行されるフェーズ及び第２の複数の連続的に実行されるフェーズに基づいて前記データフローグラフに含めるためのいくつかのフェーズを決定するステップを含む、請求項１７に記載の方法。
【請求項２０】
データフローグラフの仕様を結合するための、コンピュータ可読媒体上に非一時的な形態で格納されたソフトウェアであって、
コンポーネント間のデータのフローを表すリンクにより接続された２又は３以上のコンポーネントを規定する第１のデータフローグラフ仕様であって、前記コンポーネントは、第１のコンポーネント及び第２のコンポーネントを含み、少なくとも１つのコンポーネントが前記コンポーネントのポートに流入するデータに適用される計算を表し、少なくとも１つのコンポーネントが前記コンポーネントのポートから流出するデータを提供する計算を表す、第１のデータフローグラフ仕様と、
少なくとも第３のコンポーネントと少なくとも１つのサブグラフインターフェースとを規定し、前記サブグラフインターフェースが、（１）前記第３のコンポーネントのポートへの又はそこからの前記サブグラフインターフェースの外部のデータのフローと、（２）前記第１のデータフローグラフ仕様のコンポーネントのポートへの又はそこからの前記サブグラフインターフェースの内部のデータのフローとの間の接続を表す少なくとも１つのフロー接合部を含む、第２のデータフローグラフ仕様と
を含む複数のデータフローグラフ仕様を、入力デバイス又はポートを介して受信することと、
結合されたデータフローグラフ仕様を生成するために、少なくとも１つのプロセッサを用いて、前記第１のデータフローグラフ仕様及び前記第２のデータフローグラフ仕様を含む情報を処理することであって、
前記サブグラフインターフェースと前記第１のデータフローグラフ仕様との間の関連付けを識別することと、
前記サブグラフインターフェース上の少なくとも第１のフロー接合部に対して、データ又は計算特性の記述子の値の転送に関する方向を決定することと、
データ又は計算特性の記述子の値を前記第１のフロー接合部から前記第１のデータフローグラフ仕様により規定されたコンポーネント又は前記第２のデータフローグラフ仕様により規定されたコンポーネントへ、前記決定された方向に従って転送することと
を含む、処理することと
を計算システムに行わせるための命令を含む、ソフトウェア。
【請求項２１】
データフローグラフの仕様を結合するための計算システムであって、
コンポーネント間のデータのフローを表すリンクにより接続された２又は３以上のコンポーネントを規定する第１のデータフローグラフ仕様であって、前記コンポーネントは、第１のコンポーネント及び第２のコンポーネントを含み、少なくとも１つのコンポーネントが前記コンポーネントのポートに流入するデータに適用される計算を表し、少なくとも１つのコンポーネントが前記コンポーネントのポートから流出するデータを提供する計算を表す、第１のデータフローグラフ仕様と、
少なくとも第３のコンポーネントと少なくとも１つのサブグラフインターフェースとを規定し、前記サブグラフインターフェースが、（１）前記第３のコンポーネントのポートへの又はそこからの前記サブグラフインターフェースの外部のデータのフローと、（２）前記第１のデータフローグラフ仕様のコンポーネントのポートへの又はそこからの前記サブグラフインターフェースの内部のデータのフローとの間の接続を表す少なくとも１つのフロー接合部を含む、第２のデータフローグラフ仕様と
を含む複数のデータフローグラフ仕様を受信するように構成された、入力デバイス又はポートと、
結合されたデータフローグラフ仕様を生成するために、前記第１のデータフローグラフ仕様及び前記第２のデータフローグラフ仕様を含む情報を処理するように構成された少なくとも１つのプロセッサであって、前記処理が、
前記サブグラフインターフェースと前記第１のデータフローグラフ仕様との間の関連付けを識別することと、
前記サブグラフインターフェース上の少なくとも第１のフロー接合部に対して、データ又は計算特性の記述子の値の転送に関する方向を決定することと、
データ又は計算特性の記述子の値を前記第１のフロー接合部から前記第１のデータフローグラフ仕様により規定されたコンポーネント又は前記第２のデータフローグラフ仕様により規定されたコンポーネントへ、前記決定された方向に従って転送することと
を含む、少なくとも１つのプロセッサと
を含む、計算システム。
【請求項２２】
データフローグラフを規定するための方法であって、
第１のユーザインターフェース内に、第１のデータフローグラフの表現を描画するステップと、
第２のユーザインターフェース内に、前記第１のデータフローグラフのサブグラフの表現を描画するステップとを含み、
前記第１のユーザインターフェース内に、前記第１のデータフローグラフの前記表現を描画するステップが、
前記第１のデータフローグラフの複数のコンポーネントを描画するサブステップであって、
そのように描画された前記コンポーネントの少なくとも１つが、入力ポートに流入するデータ及び出力ポートから流出するデータからなる群から選択されるデータに関する計算を表すサブステップと、
前記第１のデータフローグラフの第１のコンポーネントの出力ポートと前記第１のデータフローグラフの第２のコンポーネントの入力ポートの間の関係を構築するリンクを描画するサブステップであって、前記関係が、第１のユーザ入力に基づいて構築され、前記第１のユーザ入力が、前記第１のコンポーネントの前記出力ポートから前記第２のコンポーネントの前記入力ポートへのデータのフローを示すサブステップとを含み、
前記第２のユーザインターフェース内に前記第１のデータフローグラフのサブグラフの表現を描画するステップが、
２又は３以上のフロー接合部を含むサブグラフインターフェースを描画するサブステップであって、そのそれぞれが、第１のデータのフローと第２のデータのフローの間の接続を定義し、前記第１のデータのフローが、入力ポートへのデータのフローであり、前記第２のデータのフローが、出力ポートへのデータのフローであり、前記第１及び第２のデータのフローが、前記第１のデータフローグラフの実行中に単一のフローとして生成され、前記サブグラフインターフェースの第１のフロー接合部が、前記第１のデータフローグラフの第３のコンポーネントのポートへの又はそこからの前記サブグラフインターフェースの外部のデータのフローと、前記サブグラフの第１のコンポーネントのポートへの又はそこからの前記サブグラフインターフェースの内部のデータのフローとの間の接続を表す、サブステップと、
前記サブグラフインターフェースの第１のフロー接合部と第２のフロー接合部との間の関係を、第２のユーザ入力に基づいて構築するサブステップであって、
前記第２のユーザ入力が、第１の記述子が第２の記述子から導出されることを示し、
前記第１の記述子が、前記サブグラフインターフェースの前記第１のフロー接合部に関する特性の記述子であり、
前記第２の記述子が、前記サブグラフインターフェースの前記第２のフロー接合部に関する特性の記述子であり、
前記第１及び第２の記述子それぞれに対して、前記特性が、データ特性及び計算特性からなる群から選択され、
前記第２のユーザ入力が、前記第１の記述子及び前記第２の記述子と異なり、かつ
前記第２のフロー接合部が、前記第１のデータフローグラフの第４のコンポーネントのポートへの又はそこからの前記サブグラフインターフェースの外部のデータのフローと、前記サブグラフの第２のコンポーネントのポートへの又はそこからの前記サブグラフインターフェースの内部のデータのフローとの間の接続を表す、サブステップと、
前記サブグラフインターフェースの定義されたフロー接合部のセットのそれぞれのフロー接合部のプロパティを指定するユーザ入力を受信するように構成された前記第２のユーザインターフェースの一部を描画するステップであって、前記プロパティが、対応するフロー接合部に関するデータ又は計算特性の記述子の転送に関する方向を含む、サブステップ
を含む、
前記方法。
【請求項２３】
データフローグラフを規定するための方法であって、
第１のユーザインターフェース内に、第１のデータフローグラフの表現を描画するステップであって、前記表現を描画するステップが、
前記第１のデータフローグラフの複数のコンポーネントを描画するサブステップであって、前記コンポーネントの少なくとも１つが、入力ポートに流入するデータ及び出力ポートから流出するデータの少なくとも一方に関する計算を表すサブステップと、
前記第１のデータフローグラフの第１のコンポーネントの出力ポート及び前記第１のデータフローグラフの第２のコンポーネントの入力ポートの間の関係を、前記第１のコンポーネントの前記出力ポートから前記第２のコンポーネントの前記入力ポートへのデータのフローを示す第１のユーザ入力に基づいて構築するサブステップ
とを含むステップと、
第２のユーザインターフェース内に、前記第１のデータフローグラフのサブグラフの表現を描画するステップであって、前記第２のユーザインターフェース内に前記サブグラフの表現を描画するステップが、
少なくとも１つのサブグラフインターフェースを描画するサブステップであって、前記サブグラフインターフェースが２又は３以上のフロー接合部を含み、そのそれぞれが、入力ポートへの第１のデータのフローと出力ポートからの第２のデータのフローの間の接続を定義し、前記第１のフロー及び第２のフローが、前記第１のデータフローグラフの実行中に単一のフローとして生成され、かつ
前記サブグラフインターフェースの第１のフロー接合部が、前記第１のデータフローグラフの第３のコンポーネントのポートへの又はそこからの前記サブグラフインターフェースの外部のデータのフローと、前記サブグラフの第１のコンポーネントのポートへの又はそこからの前記サブグラフインターフェースの内部のデータのフローとの間の接続を表す、サブステップ、を含むステップ、及び
前記サブグラフインターフェースの前記第１のフロー接合部と第２のフロー接合部との間の関係を第２のユーザ入力に基いて構築するステップであって、前記第２のユーザ入力が前記サブグラフインターフェースの前記第１のフロー接合部に関するデータ又は計算特性の第１の記述子が、前記サブグラフインターフェースの前記第２のフロー接合部に関するデータ又は計算特性の第２の記述子から導出されることを示し、
前記第２のユーザ入力が、前記第１の記述子及び前記第２の記述子と異なり、前記第２のフロー接合部が、前記第１のデータフローグラフの第４のコンポーネントのポートへの又はそこからの前記サブグラフインターフェースの外部のデータのフローと、前記サブグラフの第２のコンポーネントのポートへの又はそこからの前記サブグラフインターフェースの内部のデータのフローとの間の接続を表すステップ、
とを含む、
前記方法。
【請求項２４】
第１のデータフローグラフの表現を格納したデータ構造を生成するステップをさらに含む、請求項２３に記載の方法であって、前記第１のデータフローグラフが、
サブグラフインターフェースの外部の１又は２以上のフロー接合部を介して接続された１又は２以上のデータのフローを含む１又は２以上のコンポーネントの第１のセットを表すデータと、
前記サブグラフインターフェースの内部の１又は２以上のフロー接合部を介して接続された１又は２以上のデータのフローを含む１又は２以上のコンポーネントの第２のセットを表すデータと
を含む、前記方法。
【請求項２５】
関係が、第１の記述子が第２の記述子と同一であることに対応する、請求項２３又は２４に記載の方法。
【請求項２６】
第２のユーザインターフェースが、サブグラフインターフェースの定義されたフロー接合部のセットのそれぞれのフロー接合部のプロパティを指定するユーザ入力を受信するように構成された部分を含む、請求項２３〜２５のいずれかに記載の方法。
【請求項２７】
プロパティが、対応するフロー接合部に関するデータ又は計算特性の記述子の転送に関する方向を含む、請求項２６に記載の方法。
【請求項２８】
方向が、第１のフロー接合部からサブグラフの第１のコンポーネントへのデータ又は計算特性の第１の記述子の値の内向きの転送に対応する、請求項２７に記載の方法。
【請求項２９】
方向が、第１のフロー接合部から第１のデータフローグラフの第３のコンポーネントへのデータ又は計算特性の第１の記述子の値の外向きの転送に対応する、請求項２７に記載の方法。
【請求項３０】
第１の記述子が、第１のデータフローグラフの第３のコンポーネントのポートとサブグラフの第１のコンポーネントのポートとの間で転送されるデータのデータ特性を記述する、請求項２３〜２９のいずれかに記載の方法。
【請求項３１】
データ特性が、転送されるデータ内のレコードのフィールドのフォーマットを含む、請求項３０に記載の方法。
【請求項３２】
記述子が、第１のデータフローグラフの第３のコンポーネント又はサブグラフの第１のコンポーネントの少なくとも一方の計算特性を記述する、請求項２３〜２９のいずれかに記載の方法。
【請求項３３】
計算特性が、第１のデータフローグラフの第３のコンポーネント又はサブグラフの第１のコンポーネントにより表される計算の実行の並列度を含む、請求項３２に記載の方法。
【請求項３４】
第１のユーザインターフェースが、第１の計算システムにより生成される、請求項２３〜３３のいずれかに記載の方法。
【請求項３５】
第２のユーザインターフェースが、第１の計算システムとは異なる第２の計算システムにより生成される、請求項３４に記載の方法。
【請求項３６】
データフローグラフを規定するための、コンピュータ可読媒体上に非一時的な形態で格納されたソフトウェアであって、
第１のユーザインターフェース内に、第１のデータフローグラフの表現を描画することであって、
前記第１のデータフローグラフの複数のコンポーネントと、入力ポートに流入するデータ又は出力ポートから流出するデータの少なくとも一方に関する計算を表す少なくとも１つのコンポーネントとを描画すること、並びに
前記第１のデータフローグラフの第１のコンポーネントの出力ポート及び前記第１のデータフローグラフの第２のコンポーネントの入力ポートの間の関係を、前記第１のコンポーネントの前記出力ポートから前記第２のコンポーネントの前記入力ポートへのデータのフローを示す第１のユーザ入力に基づいて構築すること
を含む、描画することと、
第２のユーザインターフェース内に、前記第１のデータフローグラフのサブグラフの表現を描画することであって、
少なくとも１つのサブグラフインターフェースを描画することであって、前記サブグラフインターフェースが２又は３以上のフロー接合部を含み、そのそれぞれが、入力ポートへの第１のデータのフローと出力ポートからの第２のデータのフローとの間の接続を定義し、前記第１のフロー及び前記第２のフローが、前記第１のデータフローグラフの実行中に単一のフローとして生成され、かつ
前記サブグラフインターフェースの第１のフロー接合部が、（１）前記第１のデータフローグラフの第３のコンポーネントのポートへの又はそこからの前記サブグラフインターフェースの外部のデータのフローと、（２）前記サブグラフの第１のコンポーネントのポートへの又はそこからの前記サブグラフインターフェースの内部のデータのフローとの間の接続を表す、描画することと、
前記サブグラフインターフェースの第１のフロー接合部と第２のフロー接合部との間の関係を、前記サブグラフインターフェースの第１のフロー接合部に関するデータ又は計算特性の第１の記述子が、前記サブグラフインターフェースの第２のフロー接合部に関するデータ又は計算特性の第２の記述子から導出されることを示す第２のユーザ入力に基づいて構築することであって、
前記第２のユーザ入力が、前記第１の記述子及び前記第２の記述子と異なり、かつ前記第２のフロー接合部が、（１）前記第１のデータフローグラフの第４のコンポーネントのポートへの又はそこからの前記サブグラフインターフェースの外部のデータのフローと、（２）前記サブグラフの第２のコンポーネントのポートへの又はそこからの前記サブグラフインターフェースの内部のデータのフロー、との間の接続を表す、構築すること
とを含む、描画することと
を計算システムに行わせるための命令を含む、前記ソフトウェア。
【請求項３７】
データフローグラフを規定するための計算システムであって、
第１のユーザインターフェース内に、第１のデータフローグラフの表現を描画するように構成された第１の計算デバイスであって、前記描画が、
前記第１のデータフローグラフの複数のコンポーネントと、入力ポートに流入するデータ又は出力ポートから流出するデータの少なくとも一方に関する計算を表す少なくとも１つのコンポーネントとを描画することと、
前記第１のデータフローグラフの第１のコンポーネントの出力ポート及び前記第１のデータフローグラフの第２のコンポーネントの入力ポートの間の関係を、前記第１のコンポーネントの前記出力ポートから前記第２のコンポーネントの前記入力ポートへのデータのフローを示す第１のユーザ入力に基づいて構築することと
を含む、前記第１の計算デバイスと、
第２のユーザインターフェース内に、前記第１のデータフローグラフのサブグラフの表現を描画するように構成された第２の計算デバイスであって、前記描画が、
少なくとも１つのサブグラフインターフェースを描画することであって、前記サブグラフインターフェースが２又は３以上のフロー接合部を含み、そのそれぞれが、入力ポートへの第１のデータのフローと出力ポートからの第２のデータのフローとの間の接続を定義し、前記第１のフロー及び前記第２のフローが、前記第１のデータフローグラフの実行中に単一のフローとして生成され、かつ前記サブグラフインターフェースの第１のフロー接合部が、（１）前記第１のデータフローグラフの第３のコンポーネントのポートへの又はそこからの前記サブグラフインターフェースの外部のデータのフローと、（２）前記サブグラフの第１のコンポーネントのポートへの又はそこからの前記サブグラフインターフェースの内部のデータのフローとの間の接続を表す、描画することと、
前記サブグラフインターフェースの第１のフロー接合部と第２のフロー接合部との間の関係を、前記サブグラフインターフェースの第１のフロー接合部に関するデータ又は計算特性の第１の記述子が、前記サブグラフインターフェースの第２のフロー接合部に関するデータ又は計算特性の第２の記述子から導出されることを示す第２のユーザ入力に基づいて構築することであって、
前記第２のユーザ入力が、前記第１の記述子及び前記第２の記述子と異なり、かつ前記第２のフロー接合部が、（１）前記第１のデータフローグラフの第４のコンポーネントのポートへの又はそこからの前記サブグラフの外部のデータのフローと、（２）前記サブグラフの第２のコンポーネントのポートへの又はそこからの前記サブグラフインターフェースの内部のデータのフロー、との間の接続を表す、構築すること
とを含む、前記第２の計算デバイスと
を含む、前記計算システム。
【発明の詳細な説明】
【技術分野】
【０００１】
関連出願の相互参照
本出願は、２０１３年１２月５日に出願された米国特許出願第６１／９１２，０５７号、及び２０１４年７月３１日に出願された米国特許出願第６２／０３１，３８８号の優先権を主張するものである。
【０００２】
この説明は、データフローグラフ内のサブグラフ用のインターフェースの管理に関する。
【背景技術】
【０００３】
データを処理するための多数のソフトウェアアプリケーションが存在する。これらのソフトウェアアプリケーションの中には、データフローグラフとして指定されるものがある。データフローグラフは、典型的にはいくつかのデータ処理コンポーネントを含み、これらは、「フロー」とも呼ばれることがあるリンクにより相互接続される。
【０００４】
データフローグラフが実行される場合、データ（例えばデータセット）が、データベース又は何らかの他のデータストレージ若しくはデータキューイングシステムから受信される。受信されるデータは、コンポーネント及びフローの相互接続により定義される依存関係に従ってフローを通ってコンポーネント内へ伝播することで、データフローグラフの中を通過する。各コンポーネントは、受信したデータをそのコンポーネントに関連付けられた所定の機能に従って処理し、その後、処理されたデータを出力データとしてフローを介して提供する。データフローグラフの出力において、処理されたデータは、例えば、別のデータストレージ若しくはデータキューイングシステムに格納されるか、別の下流のシステムに提供されるか、又はユーザに提示される。
【０００５】
データフローグラフの開発者は、一般的にはコンポーネントを表すブロックをグラフィカルユーザインターフェースにより提供されるグラフィカルな作業領域（又は「キャンバス」）上にドラッグし、データフローグラフが所望の機能を実装するようにデータフローを表すリンクでコンポーネントを相互接続することにより、グラフを規定する。開発者は、データフローグラフの自身の実装に満足すると、データフローグラフを後で使用するためにストレージに保存することができる。一般的には、開発者は、データフローグラフの自身の実装を後になって修正する必要がある場合、グラフィカルユーザインターフェースに、保存されたデータフローグラフをストレージから読み出させ、データフローグラフに変更を加えさせ、そして修正されたデータフローグラフをストレージに再保存させることができる。
【０００６】
いくつかの例では、データフローグラフの１又は２以上のセグメントは、それら自体が、データフローグラフを用いて実装され、それらは「サブグラフ」と呼ばれる。それらの例では、サブグラフはデータフローグラフの一部である。したがって、所与のデータフローグラフ内で使用されるサブグラフを修正するために、開発者はディスクからデータフローグラフを読み出すようにシステムに要求し、これにより開発者はグラフィカルユーザインターフェース内でデータフローグラフを開くことができようになる。そして、開発者は、同じグラフィカルユーザインターフェース内で、サブグラフセグメントを開き、サブグラフを編集できるようになる。開発者はサブグラフに変更を加えることができ、そして開発者は、サブグラフが修正されたデータフローをストレージに共に再保存させることで、サブグラフへの変更を保存されたデータフローグラフに組み込む。
【発明の概要】
【課題を解決するための手段】
【０００７】
一態様では、概して、データフローグラフの仕様を結合するための方法は、コンポーネント間のデータのフローを表すリンクにより接続された２又は３以上のコンポーネントを規定する（「サブグラフ」用の）第１のデータフローグラフ仕様であって、コンポーネントは、第１のコンポーネント及び第２のコンポーネントを含み、少なくとも１つのコンポーネントがコンポーネントのポートに流入するデータに適用される計算を表し、少なくとも１つのコンポーネントがコンポーネントのポートから流出するデータを提供する計算を表す、第１のデータフローグラフ仕様と、少なくとも第３のコンポーネントと少なくとも１つのサブグラフインターフェースとを規定し、サブグラフインターフェースが、（１）第３のコンポーネントのポートへの又はそこからのサブグラフインターフェースの外部のデータのフローと、（２）第１のデータフローグラフ仕様のコンポーネントのポートへの又はそこからのサブグラフインターフェースの内部のデータのフローとの間の接続を表す少なくとも１つのフロー接合部を含む、（「コンテナグラフ」用の）第２のデータフローグラフ仕様とを含む複数のデータフローグラフ仕様を、入力デバイス又はポートを介して受信するステップを含む。方法は、結合されたデータフローグラフ仕様を生成するために、少なくとも１つのプロセッサを用いて、第１のデータフローグラフ仕様及び第２のデータフローグラフ仕様を含む情報を処理するステップであって、サブグラフインターフェースと第１のデータフローグラフ仕様との間の関連付けを識別するステップ、サブグラフインターフェース上の少なくとも第１のフロー接合部に対して、データ又は計算特性の記述子の値の転送に関する方向を決定するステップ、及び、データ又は計算特性の記述子の値を第１のフロー接合部から第１のデータフローグラフ仕様により規定されたコンポーネント又は第２のデータフローグラフ仕様により規定されたコンポーネントへ、決定された方向に従って転送するステップを含む、処理するステップを含む。
【０００８】
態様は、以下の特徴の１又は２以上を含むことができる。
【０００９】
第１のデータフローグラフ仕様は、第１のコンポーネントに関する記述子が第２のコンポーネントに関する記述子と同一であることを示す少なくとも１つの指示子を含む。
【００１０】
決定された方向は、サブグラフインターフェース上の第１のフロー接合部から第２のコンポーネントへのデータ又は計算特性の第１の記述子の値の内向きの転送に対応する。
【００１１】
第１の記述子は、第３のコンポーネントから第１のフロー接合部に提供される。
【００１２】
第１の記述子は、第２のコンポーネントから第１のコンポーネントに提供される。
【００１３】
第２のデータフローグラフ仕様は、第３のコンポーネントに関する記述子がサブグラフインターフェースに関する記述子と同一であることを示す少なくとも１つの指示子を含む。
【００１４】
第２のデータフローグラフ仕様は、第４のコンポーネントに関する記述子が第３のコンポーネントに関する記述子と同一であることを示す少なくとも１つの指示子を含む。
【００１５】
決定された方向は、サブグラフインターフェース上の第１のフロー接合部から第３のコンポーネントへのデータ又は計算特性の第１の記述子の値の外向きの転送に対応する。
【００１６】
第１の記述子は、第１のコンポーネントから第１のフロー接合部に提供される。
【００１７】
第１の記述子は、第３のコンポーネントから第４のコンポーネントに提供される。
【００１８】
記述子は、第１のコンポーネントのポート及び第２のコンポーネントのポートの間で転送されるデータのデータ特性を記述する。
【００１９】
データ特性は、転送されるデータ内のレコードのフィールドのフォーマットを含む。
【００２０】
記述子は、第１のデータフローグラフ仕様又は第２のデータフローグラフ仕様の少なくとも一方のコンポーネントの計算特性を記述する。
【００２１】
計算特性は、コンポーネントにより表される計算の実行の並列度を含む。
【００２２】
第１のデータフローグラフは暗号化される。
【００２３】
第２のデータフローグラフは暗号化される。
【００２４】
第１のデータフローグラフの２又は３以上のコンポーネントは、第１のデータフローグラフにおける第１の複数の連続的に実行されるフェーズの間で分散される。
【００２５】
第２のデータフローグラフは複数のコンポーネントを含み、複数のコンポーネント及びサブグラフインターフェースは、第２のデータフローグラフにおける第２の複数の連続的に実行されるフェーズの間で分散される。
【００２６】
実行用にデータフローグラフを準備するステップは、第１の複数の連続的に実行されるフェーズ及び第２の複数の連続的に実行されるフェーズに基づいてデータフローグラフに含めるためのいくつかのフェーズを決定するステップを含む。
【００２７】
別の態様では、概して、データフローグラフの仕様を結合するためのソフトウェアが、コンピュータ可読媒体上に非一時的な形態で格納され、ソフトウェアは、コンポーネント間のデータのフローを表すリンクにより接続された２又は３以上のコンポーネントを規定する第１のデータフローグラフ仕様であって、コンポーネントは、第１のコンポーネント及び第２のコンポーネントを含み、少なくとも１つのコンポーネントがコンポーネントのポートに流入するデータに適用される計算を表し、少なくとも１つのコンポーネントがコンポーネントのポートから流出するデータを提供する計算を表す、第１のデータフローグラフ仕様と、少なくとも第３のコンポーネントと少なくとも１つのサブグラフインターフェースとを規定し、サブグラフインターフェースが、（１）第３のコンポーネントのポートへの又はそこからのサブグラフインターフェースの外部のデータのフローと、（２）第１のデータフローグラフ仕様のコンポーネントのポートへの又はそこからのサブグラフインターフェースの内部のデータのフローとの間の接続を表す少なくとも１つのフロー接合部を含む、第２のデータフローグラフ仕様とを含む複数のデータフローグラフ仕様を、入力デバイス又はポートを介して受信することと、結合されたデータフローグラフ仕様を生成するために、少なくとも１つのプロセッサを用いて、第１のデータフローグラフ仕様及び第２のデータフローグラフ仕様を含む情報を処理することであって、サブグラフインターフェースと第１のデータフローグラフ仕様との間の関連付けを識別すること、サブグラフインターフェース上の少なくとも第１のフロー接合部に対して、データ又は計算特性の記述子の値の転送に関する方向を決定すること、及び、データ又は計算特性の記述子の値を第１のフロー接合部から第１のデータフローグラフ仕様により規定されたコンポーネント又は第２のデータフローグラフ仕様により規定されたコンポーネントへ、決定された方向に従って転送することを含む、処理することとを計算システムに行わせるための命令を含む。
【００２８】
別の態様では、概して、データフローグラフの仕様を結合するための計算システムは、コンポーネント間のデータのフローを表すリンクにより接続された２又は３以上のコンポーネントを規定する第１のデータフローグラフ仕様であって、コンポーネントは、第１のコンポーネント及び第２のコンポーネントを含み、少なくとも１つのコンポーネントがコンポーネントのポートに流入するデータに適用される計算を表し、少なくとも１つのコンポーネントがコンポーネントのポートから流出するデータを提供する計算を表す、第１のデータフローグラフ仕様と、少なくとも第３のコンポーネントと少なくとも１つのサブグラフインターフェースとを規定し、サブグラフインターフェースが、（１）第３のコンポーネントのポートへの又はそこからのサブグラフインターフェースの外部のデータのフローと、（２）第１のデータフローグラフ仕様のコンポーネントのポートへの又はそこからのサブグラフインターフェースの内部のデータのフローとの間の接続を表す少なくとも１つのフロー接合部を含む、第２のデータフローグラフ仕様とを含む複数のデータフローグラフ仕様を受信するように構成された、入力デバイス又はポートを含む。システムは、結合されたデータフローグラフ仕様を生成するために、第１のデータフローグラフ仕様及び第２のデータフローグラフ仕様を含む情報を処理するように構成された少なくとも１つのプロセッサであって、処理が、サブグラフインターフェースと第１のデータフローグラフ仕様との間の関連付けを識別することと、サブグラフインターフェース上の少なくとも第１のフロー接合部に対して、データ又は計算特性の記述子の値の転送に関する方向を決定することと、データ又は計算特性の記述子の値を第１のフロー接合部から第１のデータフローグラフ仕様により規定されたコンポーネント又は第２のデータフローグラフ仕様により規定されたコンポーネントへ、決定された方向に従って転送することとを含む、少なくとも１つのプロセッサを含む。
【００２９】
別の態様では、概して、データフローグラフを規定するための方法は、第１のユーザインターフェース内に、第１のデータフローグラフの表現を描画するステップであって、第１のデータフローグラフの複数のコンポーネントと、入力ポートに流入するデータ又は出力ポートから流出するデータの少なくとも一方に関する計算を表す少なくとも１つのコンポーネントとを描画するステップ、並びに、第１のデータフローグラフの第１のコンポーネントの出力ポート及び第１のデータフローグラフの第２のコンポーネントの入力ポートの間のリンクを、第１のコンポーネントの出力ポートから第２のコンポーネントの入力ポートへのデータのフローを示すユーザ入力に基づいて描画するステップを含む、描画するステップと、第２のユーザインターフェース内に、第１のデータフローグラフのサブグラフの表現を描画するステップであって、少なくとも１つのサブグラフインターフェースを描画するステップであって、サブグラフインターフェースが１又は２以上のフロー接合部を含み、サブグラフインターフェースの第１のフロー接合部が、（１）第１のデータフローグラフの第３のコンポーネントのポートへの又はそこからのサブグラフインターフェースの外部のデータのフローと、（２）サブグラフの第１のコンポーネントのポートへの又はそこからのサブグラフインターフェースの内部のデータのフローとの間の接続を表す、描画するステップ、サブグラフインターフェースの第１のフロー接合部と第２のフロー接合部との間のリンクを、（１）サブグラフインターフェースの第１のフロー接合部に関するデータ又は計算特性の第１の記述子と、（２）サブグラフインターフェースの第２のフロー接合部に関するデータ又は計算特性の第２の記述子との間の関係を示すユーザ入力に基づいて描画するステップ、及び、サブグラフインターフェースの定義されたフロー接合部のセットのそれぞれのフロー接合部のプロパティを指定するユーザ入力を受信するように構成された第２のユーザインターフェースの一部を描画するステップであって、プロパティが、対応するフロー接合部に関するデータ又は計算特性の記述子の転送に関する方向を含む、描画するステップを含む、描画するステップとを含む。
【００３０】
別の態様では、概して、データフローグラフを規定するための方法は、第１のユーザインターフェース内に、第１のデータフローグラフの表現を描画するステップであって、第１のデータフローグラフの複数のコンポーネントと、入力ポートに流入するデータ又は出力ポートから流出するデータの少なくとも一方に関する計算を表す少なくとも１つのコンポーネントとを描画するステップ、並びに、第１のデータフローグラフの第１のコンポーネントの出力ポート及び第１のデータフローグラフの第２のコンポーネントの入力ポートの間のリンクを、第１のコンポーネントの出力ポートから第２のコンポーネントの入力ポートへのデータのフローを示すユーザ入力に基づいて描画するステップを含む、描画するステップと、第２のユーザインターフェース内に、第１のデータフローグラフのサブグラフの表現を描画するステップであって、少なくとも１つのサブグラフインターフェースを描画するステップであって、サブグラフインターフェースが１又は２以上のフロー接合部を含み、サブグラフインターフェースの第１のフロー接合部が、（１）第１のデータフローグラフの第３のコンポーネントのポートへの又はそこからのサブグラフインターフェースの外部のデータのフローと、（２）サブグラフの第１のコンポーネントのポートへの又はそこからのサブグラフインターフェースの内部のデータのフローとの間の接続を表す、描画するステップ、及び、サブグラフインターフェースの第１のフロー接合部と第２のフロー接合部との間のリンクを、（１）サブグラフインターフェースの第１のフロー接合部に関するデータ又は計算特性の第１の記述子と、（２）サブグラフインターフェースの第２のフロー接合部に関するデータ又は計算特性の第２の記述子との間の関係を示すユーザ入力に基づいて描画するステップを含む、描画するステップとを含む。
【００３１】
態様は、以下の特徴の１又は２以上を含むことができる。
【００３２】
方法は、サブグラフインターフェースの外部の１又は２以上のフロー接合部を介して接続された１又は２以上のデータのフローを含む１又は２以上のコンポーネントの第１のセットを表すデータと、サブグラフインターフェースの内部の１又は２以上のフロー接合部を介して接続された１又は２以上のデータのフローを含む１又は２以上のコンポーネントの第２のセットを表すデータとを含む第１のデータフローグラフの表現を格納したデータ構造を生成するステップをさらに含む。
【００３３】
関係は、第１の記述子が第２の記述子と同一であることに対応する。
【００３４】
第２のユーザインターフェースは、サブグラフインターフェースの定義されたフロー接合部のセットのそれぞれのフロー接合部のプロパティを指定するユーザ入力を受信するように構成された部分を含む。
【００３５】
プロパティは、対応するフロー接合部に関するデータ又は計算特性の記述子の転送に関する方向を含む。
【００３６】
方向は、第１のフロー接合部からサブグラフの第１のコンポーネントへのデータ又は計算特性の第１の記述子の値の内向きの転送に対応する。
【００３７】
方向は、第１のフロー接合部から第１のデータフローグラフの第３のコンポーネントへのデータ又は計算特性の第１の記述子の値の外向きの転送に対応する。
【００３８】
第１の記述子は、第１のデータフローグラフの第３のコンポーネントのポートとサブグラフの第１のコンポーネントのポートとの間で転送されるデータのデータ特性を記述する。
【００３９】
データ特性は、転送されるデータ内のレコードのフィールドのフォーマットを含む。
【００４０】
記述子は、第１のデータフローグラフの第３のコンポーネント又はサブグラフの第１のコンポーネントの少なくとも一方の計算特性を記述する。
【００４１】
計算特性は、第１のデータフローグラフの第３のコンポーネント又はサブグラフの第１のコンポーネントにより表される計算の実行の並列度を含む。
【００４２】
第１のユーザインターフェースは、第１の計算システムにより生成される。
【００４３】
第２のユーザインターフェースは、第１の計算システムとは異なる第２の計算システムにより生成される。
【００４４】
別の態様では、概して、データフローグラフを規定するためのソフトウェアが、コンピュータ可読媒体上に非一時的な形態で格納され、ソフトウェアは、第１のユーザインターフェース内に、第１のデータフローグラフの表現を描画することであって、第１のデータフローグラフの複数のコンポーネントと、入力ポートに流入するデータ又は出力ポートから流出するデータの少なくとも一方に関する計算を表す少なくとも１つのコンポーネントとを描画すること、並びに、第１のデータフローグラフの第１のコンポーネントの出力ポート及び第１のデータフローグラフの第２のコンポーネントの入力ポートの間のリンクを、第１のコンポーネントの出力ポートから第２のコンポーネントの入力ポートへのデータのフローを示すユーザ入力に基づいて描画することを含む、描画することと、第２のユーザインターフェース内に、第１のデータフローグラフのサブグラフの表現を描画することであって、少なくとも１つのサブグラフインターフェースを描画することであって、サブグラフインターフェースが１又は２以上のフロー接合部を含み、サブグラフインターフェースの第１のフロー接合部が、（１）第１のデータフローグラフの第３のコンポーネントのポートへの又はそこからのサブグラフインターフェースの外部のデータのフローと、（２）サブグラフの第１のコンポーネントのポートへの又はそこからのサブグラフインターフェースの内部のデータのフローとの間の接続を表す、描画すること、及び、サブグラフインターフェースの第１のフロー接合部と第２のフロー接合部との間のリンクを、（１）サブグラフインターフェースの第１のフロー接合部に関するデータ又は計算特性の第１の記述子と、（２）サブグラフインターフェースの第２のフロー接合部に関するデータ又は計算特性の第２の記述子との間の関係を示すユーザ入力に基づいて描画することを含む、描画することとを計算システムに行わせるための命令を含む。
【００４５】
別の態様では、概して、データフローグラフを規定するための計算システムは、第１のユーザインターフェース内に、第１のデータフローグラフの表現を描画するように構成された第１の計算デバイスであって、描画が、第１のデータフローグラフの複数のコンポーネントと、入力ポートに流入するデータ又は出力ポートから流出するデータの少なくとも一方に関する計算を表す少なくとも１つのコンポーネントとを描画することと、第１のデータフローグラフの第１のコンポーネントの出力ポート及び第１のデータフローグラフの第２のコンポーネントの入力ポートの間のリンクを、第１のコンポーネントの出力ポートから第２のコンポーネントの入力ポートへのデータのフローを示すユーザ入力に基づいて描画することとを含む、第１の計算デバイスと、第２のユーザインターフェース内に、第１のデータフローグラフのサブグラフの表現を描画するように構成された第２の計算デバイスであって、描画が、少なくとも１つのサブグラフインターフェースを描画することであって、サブグラフインターフェースが１又は２以上のフロー接合部を含み、サブグラフインターフェースの第１のフロー接合部が、（１）第１のデータフローグラフの第３のコンポーネントのポートへの又はそこからのサブグラフインターフェースの外部のデータのフローと、（２）サブグラフの第１のコンポーネントのポートへの又はそこからのサブグラフインターフェースの内部のデータのフローとの間の接続を表す、描画することと、サブグラフインターフェースの第１のフロー接合部と第２のフロー接合部との間のリンクを、（１）サブグラフインターフェースの第１のフロー接合部に関するデータ又は計算特性の第１の記述子と、（２）サブグラフインターフェースの第２のフロー接合部に関するデータ又は計算特性の第２の記述子との間の関係を示すユーザ入力に基づいて描画することとを含む、第２の計算デバイスとを含む。
【発明の効果】
【００４６】
態様は、以下の利点の１又は２以上を含むことができる。
【００４７】
いくつかある利点の中でもとりわけ、サブグラフの動的リンクを含むサブグラフインターフェースを管理するための手法により、コードの抽象化及びデータフローグラフ開発環境における再利用が容易となる。サブグラフインターフェースへのサブグラフの動的リンクは、複数の可能なサブグラフのうちのいずれを用いてサブグラフインターフェースに関する機能を実装するかの決定を（例えば実行の直前まで）遅らせることを含む。したがって、コンテナグラフ（すなわち１又は２以上のサブグラフインターフェースを有するデータフローグラフ）は、再利用及びカスタマイズが可能なテンプレートとして使用することができる。テンプレートデータフローグラフを、顧客に出荷することができる。そして、顧客は、サブグラフインターフェースを実装し、顧客のニーズ及び動作環境に合わせてテンプレートデータフローグラフをカスタマイズするグラフロジックを供給することができる。顧客には、カスタマイズされたデータフローグラフのユーザ、及び／又はカスタマイズされたデータフローグラフを他のユーザに提供する開発者が含まれ得る。
【００４８】
サブグラフインターフェースにより、データフローグラフを、インターフェースの複数の実装にわたって汎用的にすることができる。サブグラフインターフェースにより、サブグラフインターフェースのいかなる実装よりも前に、インターフェースに対してグラフを開発することができる。サブグラフインターフェースにより、特定の使用の実例（instance of use）なしで、インターフェースに対して実装を検証することができる。サブグラフインターフェースにより、サブグラフの実装の出荷場所、権限（permissions）、暗号化、又は他の属性を異ならせることができる。
【００４９】
いくつかの実施形態により、サブグラフインターフェースを含むコンテナグラフにおけるメタデータを、サブグラフインターフェースに関連付けられる実装サブグラフから導出することができる。メタデータは、例えば、コンポーネントへ又はコンポーネントから提供されるデータの記述子（例えばレコードフォーマット）、コンポーネントの計算特性、又はコンポーネントに関する計算資源を含むことができる。有利なことに、実装サブグラフからコンテナグラフに関するメタデータを導出することにより、実装サブグラフに出入りするデータのタイプに関してコンテナグラフが設定可能となる。これは、実装サブグラフが、特定のレコードフォーマットを有するデータを読み込み、そのデータをさらなる処理のために事前定義されたコンテナグラフに渡すように開発者により規定された場合に、特に有用となり得る。いくつかの例では、事前定義されたコンテナグラフは、何らかの他のエンティティにより指定され、読み出し専用とするか、暗号化されるか、又は何らかの他の方法で見られないように及び／又は修正されないように保護されてもよい。いくつかの例では、実装サブグラフは、読み出し専用とするか、暗号化されるか、又は何らかの他の方法で見られないように及び／又は修正されないように保護されてもよい。そのようなグラフは、ユーザが介入する必要なく、実装サブグラフからの異なるタイプのレコードフォーマットを受け入れられるようにする必要がある。サブグラフインターフェースに関連付けられる実装サブグラフにおけるメタデータは、サブグラフインターフェースを含むコンテナグラフから導出することもでき、これにより異なるコンテナグラフにおいて実装サブグラフを使用する際に幾分かの柔軟性を与えることができる。
【００５０】
開発者は、有利なことに、サブグラフインターフェースに関する実装のライブラリを作成し使用することができる。そのようなライブラリは、開発時間を短縮し、コードの再利用を促進するのに役立ち得る。
【００５１】
いくつかの実施形態により、依存関係の分析、及びコンテナグラフからサブグラフインターフェースのサブグラフ実装内へのイントロスペクション（introspection）が可能となる。
【００５２】
コンテナグラフを開発するためのグラフィカルユーザインターフェースは、複数のフェーズのグラフィカルな表示と、それらのフェーズが任意のサブグラフインターフェースに適用される方法とを含むことができ、これにより開発者は、データフローグラフの異なる部分がそれらのフェーズによりどのように影響を受けるか（例えば、どのデータフローがフェーズの境界を横断し、そのデータフローを通過したデータが持続的にバッファに格納されるか）を理解することができる。
【００５３】
サブグラフインターフェースを開発するためのグラフィカルユーザインターフェースは、動的にリンクされるサブグラフを強力な抽象化の障壁に従うものとして扱うように開発者を促し、サブグラフインターフェースが１又は２以上のサブグラフ実装の開発とは別に（及び典型的には事前に）、いくつかの例ではコンテナグラフの開発とは別に（及び典型的には事前に）開発されるように要求する。
【００５４】
本発明の他の特徴及び利点は、以下の説明及び特許請求の範囲から明らかとなろう。
【図面の簡単な説明】
【００５５】
【図１Ａ】動的にリンクされるサブグラフを用いるように構成されたシステムのブロック図である。
【図１Ｂ】実行用にデータフローグラフを準備する異なる段階のフローチャートである。
【図２Ａ】サブグラフインターフェースを含むデータフローグラフの図である。
【図２Ｂ】サブグラフインターフェースの実装の図である。
【図２Ｃ】結合されたデータフローグラフの図である。
【図２Ｄ】サブグラフインターフェース開発ユーザインターフェースの図である。
【図２Ｅ】サブグラフインターフェースプロパティユーザインターフェースのポート設定タブの図である。
【図３Ａ】図２Ａのデータフローグラフにおける編集時レコードフォーマットメタデータ伝播の図である。
【図３Ｂ】図２Ｂのサブグラフインターフェースの実装における編集時レコードフォーマットメタデータ伝播の図である。
【図３Ｃ】図２Ｃの結合されたデータフローグラフにおけるリンク時レコードフォーマットメタデータ伝播の図である。
【図４Ａ】図２Ａのデータフローグラフにおける編集時レイアウトメタデータ伝播の図である。
【図４Ｂ】図２Ｂのサブグラフインターフェースの実装における編集時レイアウトメタデータ伝播の図である。
【図４Ｃ】図２Ｃの結合されたデータフローグラフにおけるリンク時レイアウトメタデータ伝播の図である。
【発明を実施するための形態】
【００５６】
図１Ａに、動的にリンクされるサブグラフが使用可能なデータ処理システム１００の一例を示す。システム１００はデータソース１０２を含み、データソース１０２は、１又は２以上のデータのソース、例えば記憶デバイス又はオンラインデータストリームへの接続などを含むことができ、これらの各々は、種々のフォーマット（例えばデータベーステーブル、スプレッドシートファイル、フラットテキストファイル、又はメインフレームにより使用されるネイティブフォーマット）のうちの任意のフォーマットのデータを格納又は提供することができる。実行環境１０４は、グラフ準備モジュール１０６及びグラフ実行モジュール１１２を含む。非常に大まかには、グラフ準備モジュール１０６は、（以下でより詳細に説明される）データフローグラフの仕様を、グラフ実行モジュール１１２により実行可能な表現にアセンブルしリンクする。実行環境１０４は、例えば１又は２以上の汎用コンピュータ上で、適切なオペレーティングシステム、例えばＵＮＩＸオペレーティングシステムの１つのバージョンなどの制御下でホストされ得る。例えば、実行環境１０４は、ローカルの（例えば、対称型マルチプロセシング（ＳＭＰ，symmetric multi-processing）コンピュータなどのマルチプロセッサシステム）、若しくはローカルに分散された（例えば、クラスタ又は超並列処理（ＭＰＰ，massively parallel processing）システムとして接続された複数のプロセッサ）、又はリモートの、若しくはリモートに分散された（例えば、ローカルエリアネットワーク（ＬＡＮ，local area network）及び／又はワイドエリアネットワーク（ＷＡＮ，wide-area network）を介して接続された複数のプロセッサ）、又はこれらの任意の組み合わせである、複数の中央処理装置（ＣＰＵ，central processing unit）又はプロセッサコアを用いたコンピュータシステムの構成を含む複数ノード型並列計算環境を含むことができる。
【００５７】
いくつかの例では、実行環境１０４は、データソース１０２からデータを読み出し、（例えばグラフ実行モジュール１１２により）データに対してデータフローグラフを実行することでデータを処理し、処理されたデータをデータストレージシステムに格納する。データソース１０２を提供する記憶デバイスは、実行環境１０４に対してローカルであってもよく、例えば、実行環境１０４をホストするコンピュータに接続された記憶媒体に格納されてもよく（例えばハードドライブ１０８）、又は実行環境１０４に対してリモートであってもよく、例えば、実行環境１０４をホストするコンピュータと、（例えばクラウドコンピューティングインフラストラクチャにより提供される）リモート接続を介して通信するリモートシステム（例えばメインフレーム１１０）上でホストされてもよい。
【００５８】
グラフ実行モジュール１１２は、グラフ準備モジュール１０６により生成されたデータフローグラフの表現を用いて、データソース１０２により提供されたデータを処理する。出力データは、データベース１０２に戻され格納されるか、又は実行環境１０４にとってアクセス可能なデータストレージシステム１１６に格納されるか、又は他の方法で使用され得る。また、データストレージシステム１１６は、開発者１２０Ａがユーザインターフェース１２１Ａ内のデータフローグラフの仕様に変更を加えることが可能な開発環境１１８Ａにとってアクセス可能である。この例では、別々のユーザインターフェース内に異なるデータフローグラフ仕様を開発するための複数の別々の開発環境が存在する。例えば、第１の開発者１２０Ａは、開発環境１１８Ａの第１のユーザインターフェース１２１Ａを用いてサブグラフインターフェース１２３を含むコンテナグラフ１２２Ａを開発する。第２の、場合により異なる開発者１２０Ｂは、開発環境１１８Ｂの第２のユーザインターフェース１２１Ｂを用いて、コンテナグラフ１１２Ａのサブグラフインターフェース１２３にロードされる実装サブグラフ１２２Ｂを開発し、実装サブグラフはサブグラフインターフェース１２３に適合する。いくつかの例では、開発環境１１８Ａ又は１１８Ｂは、（データ処理コンポーネント又はデータセットを表す）頂点の間で（ワーク要素（work element）すなわちデータのフローを表す）有向リンクにより接続された頂点を含むデータフローグラフとして、アプリケーションを開発するためのシステムである。例えば、そのような環境は、本明細書に参照により組み込まれる「Managing Parameters for Graph-Based Applications」と題された米国特許出願公開第２００７／００１１６６８号明細書に、より詳細に記載されている。そのようなグラフベースの計算を実行するためのシステムは、本明細書に参照により組み込まれる「EXECUTING COMPUTATIONS EXPRESSED AS GRAPHS」と題された米国特許第５，９６６，０７２号明細書に記載されている。このシステムに従って作成されたデータフローグラフは、グラフコンポーネントにより表された個々のプロセスに対して情報を入出力し、プロセス間で情報を移動させ、プロセスの実行順序を定義するための方法を提供する。このシステムは、任意の利用可能な方法からプロセス間通信方法を選択するアルゴリズムを含む（例えば、グラフのリンクに従う通信経路は、ＴＣＰ／ＩＰ若しくはＵＮＩＸドメインソケットを用いて、又は共有メモリを用いて、プロセス間でデータを受け渡すことができる）。
【００５９】
実行モジュール１０４は、異なる形式のデータベースシステムを含むデータソース１０２を具現化可能な様々なタイプのシステムからデータを受信することができる。データは、場合によってはヌル値を含む、（「属性」又は「カラム」とも呼ばれる）それぞれのフィールドに対する値を有するレコードとして体系化することができる。最初にデータをデータソースから読み出す場合、実行モジュール１０４は、典型的にはそのデータソース内のレコードに関する何らかの初期フォーマット情報から開始する。いくつかの状況において、データソースのレコード構造は、最初は未知である場合があり、代わりにデータソース又はデータの分析後に決定される場合がある。レコードに関する初期情報は、例えば、個別の値を表すビットの数、レコード内のフィールドの順序、そのビットにより表される値のタイプ（例えば、文字列、符号付き／符号なし整数）を含むことができる。
【００６０】
図１Ｂに、データ処理システム１００を用いて、実行用にデータフローグラフを準備し、データフローグラフを実行する異なる段階の一例を示す。編集時に、任意数の開発者が異なるデータフローグラフを編集し（１５０）、開発者は、コンテナグラフを編集する１人の開発者１２０Ａと、そのデータフローグラフに含まれるサブグラフインターフェースを実装する実装サブグラフを編集する別の開発者１２０Ｂとを含み得る。いくつかの場合では、実装サブグラフは、それ自体がサブグラフインターフェースを含むことができ、そのサブグラフインターフェースは、それ自体のネストされた実装サブグラフにより実装される。そして、グラフ開発者又はグラフユーザは、グラフ準備モジュール１０６により実行される、サブグラフの動的リンクを用いて実行用にデータフローグラフを準備する処理を開始することができる。グラフ準備モジュール１０６は、準備中のデータフローグラフに任意の未リンクのサブグラフインターフェースが存在するかを判定する（１５２）。その場合、モジュール１０６は、適切なサブグラフをリンクする（１５４）。この潜在的に再帰的なリンクの処理の間に（「リンク時」と呼ばれる）、評価される必要があるデータフローグラフに関する様々なパラメータが存在することがあり、これは、どの特定の実装サブグラフが所与のサブグラフインターフェースにリンクされるべきかを示すパラメータを含む。動的リンクが完了した後、モジュール１０６は、（「コンパイル時」に）完全にアセンブルされたデータフローグラフを実行可能形式にコンパイルし（１５６）、実行モジュール１０４は、（「実行時」に）コンパイルされたデータフローグラフを実行する（１５８）。コンパイル時又は実行時に評価されるデータフローグラフに関する特定のパラメータが存在し得る。
【００６１】
１  コンテナグラフ、サブグラフ、及びサブグラフインターフェース
図２Ａを参照すると、第１のデータフローグラフ２００のブロック図は、いくつかのコンポーネントを用いて第１の入力データセット２０２Ａ及び第２の入力データセット２０２Ｂからのデータを処理し、結果の処理されたデータを出力データセット２０２Ｃに格納するように構成される。第１のデータフローグラフ２００は、第１のコンポーネント２０８Ａ、第２のコンポーネント２０８Ｂ、及びサブグラフインターフェース２１０を含む。非常に大まかには、サブグラフインターフェース２１０により、サブグラフを第１のデータフローグラフに動的にロードできるようになる。いくつかの例では、第１のデータフローグラフ２００は、サブグラフインターフェースを含むので、「コンテナグラフ」と呼ばれる。
【００６２】
コンポーネントの各々は、入力データを受信するための１又は２以上の入力ポートと、出力データを提供するための１又は２以上の出力ポートとを有する。一般的には、各コンポーネントは、その入力ポートに流入する入力データに計算を適用し、計算の結果を出力としてその出力ポートを介して提供する。いくつかの例では、特定のタイプのコンポーネントが、入力ポートのみ、又は出力ポートのみを含み得ることに留意されたい。サブグラフインターフェースは、コンテナグラフ内のフローと、（以下でより詳細に説明される）サブグラフインターフェースに関連付けられるサブグラフとの間の接続の点を定義する１又は２以上のフロー接合部を含む。各フロー接合部は、第１のデータフローグラフのコンポーネントのポートへの又はそこからのデータのフローと、第２のデータフローグラフのコンポーネントのポートへの又はそこからのデータのフローとの間の接続（又は「接合部」）を表す。データセット及びコンポーネントのポートと、サブグラフインターフェースのフロー接合部とは、フロー２０６Ａ〜２０６Ｅにより相互接続され、これらは第１のデータフローグラフ２００のデータセット、コンポーネント、及びサブグラフインターフェースの間をデータが伝播する方法を定義する。
【００６３】
具体的には、図２Ａの第１のデータフローグラフ２００について、第１のコンポーネント２０８Ａに含まれる第１の入力ポート２０４Ｂは、第１のフロー２０６Ａを用いて第２の入力データセット２０２Ｂに含まれる第１の出力ポート２０４Ａに接続される。サブグラフインターフェース２１０に含まれる第１のフロー接合部２０４Ｄは、第２のフロー２０６Ｂを用いて第１の入力データセット２０２Ａに含まれる第２の出力ポート２０４Ｃに接続される。サブグラフインターフェース２１０に含まれる第２のフロー接合部２０４Ｆは、第３のフロー２０６Ｃを用いて第１のコンポーネント２０８Ａに含まれる第３の出力ポート２０４Ｅに接続される。第２のコンポーネント２０８Ｂに含まれる第２の入力ポート２０４Ｈは、第４のフロー２０６Ｄを用いてサブグラフインターフェース２１０に含まれる第３のフロー接合部２０４Ｇに接続される。最後に、出力データセット２０２Ｃに含まれる第３の入力ポート２０４Ｊは、第５のフロー２０６Ｅを用いてサブグラフインターフェース２１０に含まれる第４の出力ポート２０４Ｉに接続される。
【００６４】
第１のデータフローグラフ２００において、第１のコンポーネント２０８Ａ及び第２のコンポーネント２０８Ｂは、ソート、連結（joining）、様々なデータ変換などの機能を実装する従来から知られているデータフローグラフコンポーネントである。
【００６５】
サブグラフインターフェース２１０はデータフローグラフ内の特別なタイプのノードであり、これによりサブグラフの動的リンクを用いて第１のデータフローグラフ２００の一部の仕様を管理できるようになる。いくつかの例では、サブグラフインターフェース２１０は、ディスク上の第２のデータフローグラフ仕様へのパスを含むパラメータ入力ＰＳ２１２を受信する。第１のデータフローグラフ２００の実行の直前に、第２のデータフローグラフは第１のデータフローグラフ２００に動的にリンクされ、基本的にはサブグラフインターフェース２１０に取って代わる。
【００６６】
一般的に、第１のデータフローグラフ２００への第２のデータフローグラフの動的リンクが可能となるためには、第２のデータフローグラフは、サブグラフインターフェース２１０により定義されるインターフェースに適合しなければならない。すなわち、第２のデータフローグラフは、サブグラフインターフェースのフロー接合部に接続されるポートを有さなければならない。第２のデータフローグラフをサブグラフインターフェース２１０に適合させることで、第２のデータフローグラフを検査することなく、第１のデータフローグラフ２００内のサブグラフインターフェース２１０のポートに接続されたフローを、第２のデータフローグラフ内のサブグラフインターフェース２１０のポートに直接的に接続して、２つのデータフローグラフにおけるポート間に単一のフローを形成できることが分かる。
【００６７】
図２Ｂを参照すると、第２のデータフローグラフ２０１の一例が、図２Ａのサブグラフインターフェース２１０に適合している。いくつかの例では、第２のデータフローグラフ２０１は、サブグラフインターフェース２１０用の機能に適合し、これを実装するので、「実装サブグラフ」と呼ばれる。
【００６８】
第２のデータフローグラフ２０１は、サブグラフインターフェース２１０により規定された第１及び第２のフロー接合部２０４Ｄ、２０４Ｆからのデータをいくつかのコンポーネントを用いて処理し、結果の処理されたデータを出力としてサブグラフインターフェース２１０により定義された第３のフロー接合部２０４Ｇに提供するように構成される。コンポーネントの各々は、入力データを受信するための１又は２以上の入力ポートと、出力データを提供するための１又は２以上の出力ポートとを有する。コンポーネントのポートは、サブグラフインターフェース２１０と第２のデータフローグラフ２０１のコンポーネントとの間でデータが伝播する方法を定義したフロー２０６Ｆ〜２０６Ｉにより相互接続される。
【００６９】
具体的には、図２Ｂの第２のデータフローグラフ２０１について、第３のコンポーネント２０８Ｃに含まれる第４の入力ポート２０４Ｋは、第６のフロー２０６Ｆを用いてグラフインターフェース２１０に含まれる第２のフロー接合部２０４Ｆに接続される。第４のコンポーネント２０８Ｄに含まれる第５の入力ポート２０４Ｍは、第７のフロー２０６Ｇを用いてグラフインターフェース２１０に含まれる第１のフロー接合部２０４Ｄに接続される。第４のコンポーネント２０８Ｄに含まれる第６の入力ポート２０４Ｎは、第８のフロー２０６Ｈを用いて第３のコンポーネント２０８Ｃに含まれる第５の出力ポート２０４Ｌに接続される。グラフインターフェース２１０に含まれる第３のフロー接合部２０４Ｇは、第９のフロー２０６Ｉを用いて第４のコンポーネント２０８Ｄに含まれる第６の出力ポート２０４Ｏに接続される。
【００７０】
いくつかの例では、第２のデータフローグラフ２０１内のコンポーネントのポートとフロー接合部との間の接続（すなわち２０６Ｆ、２０６Ｇ、２０６Ｉ）は、従来のフローではなく、その代わりに、フロー接合部及びポートの間のバインディング（すなわち関連付け）又は端子コネクタであることに留意されたい。第２のデータフローグラフ２０１が第１のデータフローグラフ２００にリンクされる場合、バインディング又は端子コネクタが取り外され、第２のデータフローグラフ２０１内のコンポーネントのポートが、第１のデータフローグラフ２００のフローに直接的に接続される。
【００７１】
２  動的リンク
再度図２Ａを参照すると、グラフ実行モジュール１１２によるデータフローグラフの実行の直前に、グラフ準備モジュール１０６は、第１のデータフローグラフ２００及び第２のデータフローグラフ２０１の一部を処理して、実行用に第１のデータフローグラフ２００を準備する。いくつかあるステップの中でもとりわけ、処理は、第１のデータフローグラフ２００内のサブグラフインターフェース２１０の位置における第１のデータフローグラフ２００への第２のデータフローグラフ２０１の動的リンク（すなわちバインディング）を含む。
【００７２】
第２のデータフローグラフ２０１を第１のデータフローグラフ２００に動的にリンクするために、グラフ準備モジュール１０６は、サブグラフインターフェース２１０に提供されたパラメータ入力ＰＳ２１２を分析して、ディスクに格納されたどの実装サブグラフがサブグラフインターフェース２１０に関連付けられているかを決定する。決定された実装サブグラフ（例えば、第２のデータフローグラフ２０１）はロード及びインスタンス化され、そのパラメータ及びポートは第１のデータフローグラフ２００にバインドされて、結合されたデータフローグラフが形成される。そして、サブグラフインターフェースのフロー接合部の少なくともいくつかが分析されて、メタデータ伝播の方向が決定され、これは、フロー接合部に関するデータ又は計算特性（すなわちメタデータ）の記述子の転送の方向に対応する。メタデータ伝播の処理において、少なくともいくつかのフロー接合部について、データ又は計算特性の記述子が、そのフロー接合部から、第１のデータフローグラフ２００内のコンポーネント若しくはコンポーネントのポート、又は第２のデータフローグラフ２０１内のコンポーネント若しくはコンポーネントのポートに、決定された方向に従って転送される。このメタデータ伝播の処理は、以下で詳細に説明される。
【００７３】
図２Ｃを参照すると、結合されたデータフローグラフ３００は、図２Ｂの第２のデータフローグラフ２０１がサブグラフインターフェース２１０の代わりにリンクされた図２Ａの第１のデータフローグラフ２００を含む。第２のデータフローグラフ２０１はサブグラフインターフェース２１０の実装でありサブグラフインターフェース２１０に適合するので、第２のデータフローグラフ２０１の入力及び出力ポートの全ては、第１のデータフローグラフ２００のコンポーネントにフローを介して接続される。
【００７４】
結合されたデータフローグラフ３００は、グラフ実行モジュール１１２により実行可能である。
【００７５】
３  メタデータ伝播
データフローグラフ内で、一般的には、データフローグラフ内のコンポーネントのポートに関するメタデータ及び／又はコンポーネント自体に関するメタデータが管理されることは重要である。上述のように、いくつかの例では、メタデータは、データの記述子（例えば、一連のフィールドを含むポート用のレコードフォーマット、及びポートに流入又はポートから流出するレコードのデータタイプ）、又は計算特性（例えば、コンポーネントに関する分割（partitioning）又はレイアウト）を含む。いくつかの例では、メタデータは、コンポーネントが使用可能なメモリの量、コンポーネントが使用可能な計算資源、昇順性（sortedness）、圧縮方法、文字セット、２進表現（例えばビッグエンディアン、リトルエンディアン）、又はデータ変換を含むことができる。
【００７６】
メタデータ管理は、手動で、自動で、又は手動及び自動メタデータ管理の組み合わせを用いて実現することができる。手動メタデータ管理に関して、メタデータが、例えば、グラフ開発者又はグラフユーザにより供給される。自動メタデータ管理に関して、（例えばグラフ開発者又はグラフユーザにより）メタデータが明示的に定義されたグラフの部分から、メタデータが明示的に定義されていないグラフの部分へメタデータが伝播する。所与のポート又はコンポーネントに関するメタデータがグラフユーザ又は開発者により直接供給されない場合に、メタデータ伝播が使用される。そのような場合、所与のポート又はコンポーネントに関するメタデータが、グラフ内の他のポート又はコンポーネントから導出される。本明細書で使用されるメタデータ伝播という用語は、この導出処理を指す。
【００７７】
図２Ａの第１のデータフローグラフ２００において、レコードフォーマットメタデータが第１のコンポーネント２０８Ａの第１の入力ポート２０４Ｂに対して明示的に定義されていない場合、従来のメタデータ伝播の１つの単純な例が行われる。第１の入力ポート２０４Ｂは、第１のフロー２０６Ａを介して第２の入力データセット２０２Ｂの第１の出力ポート２０４Ａに接続されている。一般的には、第２の入力データセット２０２Ｂにより供給されるデータのレコードフォーマットは常に明示的に知られており、したがって第１の出力ポート２０４Ａに関するメタデータは明示的に定義されている。第１の出力ポート２０４Ａに関する明示的に定義されたメタデータは、第１のフロー２０６Ａを介して第１の入力ポート２０４Ｂに伝播し、ここで第１の入力ポート２０４Ｂに関連付けられる。
【００７８】
第１の出力ポート２０４Ａ及び第１の入力ポート２０４Ｂの間の上述のメタデータ伝播は、第１のフロー２０６Ａを介して、データがデータフローグラフを流れるのと同じ方向に（すなわち、左から右へ）行われる。しかしながら、いくつかの例では、データがデータフローグラフを流れる方向とは反対の方向に、メタデータがフロー上を伝播する。例えば、出力データセット２０２Ｃの第３の入力ポート２０４Ｊに関する明示的に定義されたメタデータは、第５のフロー２０６Ｅ上で第２のコンポーネント２０８Ｂの第４の出力ポート２０４Ｉへ、データが第５のフロー２０６Ｅを流れる方向とは反対の方向に伝播する。
【００７９】
従来のコンポーネント及びデータセットを含む従来のデータフローグラフにおいて、データフローグラフを介した明示的に定義されたメタデータのこの伝播により、データフローグラフ内の全てのポート及びコンポーネントがメタデータに関連付けられる。メタデータ伝播で生じた任意の競合は、一般的には、開発者の介入のためにフラグが付けられる。しかしながら、サブグラフインターフェースを含むデータフローグラフに対するメタデータ伝播は、一般的には、従来のコンポーネントのみを含むデータフローグラフに対するメタデータ伝播とは異なって扱われる。具体的には、メタデータは２つの段階、すなわち編集時メタデータ伝播段階及びリンク時メタデータ解明段階において伝播し得る。
【００８０】
この２段階の手法を用いて、編集時に、コンテナグラフ（すなわち、サブグラフインターフェースを含むグラフ）の開発者と、サブグラフインターフェースの代わりにリンクされる実装サブグラフ（すなわち、サブグラフインターフェースに適合するサブグラフ）の開発者とは、お互いのメタデータを知っている必要はない。伝播情報にアクセスしなければ、従来のメタデータ伝播は、メタデータが実装サブグラフへの「内向き」の方向に伝播するべきか（すなわち、コンテナグラフが実装サブグラフに対するメタデータのソースとして機能する）、又は実装サブグラフから「外向き」の方向に伝播するべきか（すなわち、コンテナグラフが実装サブグラフからのメタデータについてのシンクとして機能する）を知る方法がない。
【００８１】
サブグラフインターフェースを含むデータフローグラフにおけるメタデータ伝播を容易にするために、サブグラフインターフェースの各フロー接合部は、メタデータ伝播の方向を指定する。メタデータは、編集時メタデータ伝播の間にフロー接合部に関連付けられ、そして関連付けられたデータはリンク時にメタデータ伝播の方向に従ってフロー接合部から転送される。いくつかの例では、メタデータ伝播の可能な方向のセットは、「内向き」伝播と「外向き」伝播とを含む。方向の特定の内向き又は外向きの値はブール変数の形式で格納することができ、これは例えば、そのような伝播のために、又は別の方法でメタデータ伝播の指示された方向を決定するために取り出すことができる。
【００８２】
３．１．１  内向きメタデータ伝播
サブグラフインターフェース上のフロー接合部が「内向き」のメタデータ伝播方向を有すると宣言されている場合、コンテナグラフにおけるメタデータ伝播は、フロー接合部に（最終的には、実装サブグラフ内のフロー（又はバインディング）に接続されたポートに）接続されたフローを介してメタデータ定義を供給する。
【００８３】
すなわち、コンテナグラフにおいて、編集時メタデータ伝播はフロー接合部をメタデータシンクとして扱う。具体的には、コンテナグラフにおける編集時メタデータ伝播は、上述のように従来のメタデータ伝播を用いて、コンテナグラフ内の従来のコンポーネント間でメタデータを伝播させる。「内向き」のメタデータ伝播方向を有するサブグラフインターフェース上のフロー接合部にメタデータが伝播した場合、メタデータはこれ以上伝播することができない。このメタデータは、実装サブグラフがコンテナグラフにリンクされ、リンク時メタデータ解明が（後述のように）実行可能となるまで、フロー接合部において維持される。
【００８４】
実装サブグラフにおいて、編集時メタデータ伝播は、「内向き」のメタデータ伝播方向を有するフロー接合部をメタデータソースとして扱う。しかしながら、実装サブグラフの場合には、サブグラフインターフェース上のフロー接合部における実際のメタデータ値は、（リンク時にのみコンテナグラフから利用可能となるので）未知である。したがって、実装サブグラフに対して編集時伝播を実行するために、プレースホルダ値が、フロー接合部におけるメタデータに割り当てられ、上述のように従来のメタデータ伝播を用いて実装サブグラフ内を伝播する。プレースホルダ値は、実装サブグラフがコンテナグラフにリンクされ、リンク時メタデータ解明が実行されたときに、解明される。
【００８５】
リンク時メタデータ解明段階の間に、実装サブグラフがコンテナグラフにリンクされた状態で、「内向き」のメタデータ伝播方向を有するフロー接合部において維持されたメタデータは、実装サブグラフ内に、及び実装サブグラフのコンポーネントの適切なポートに転送される。いくつかの例では、リンク時メタデータ解明は、実装サブグラフ内のフロー接合部におけるプレースホルダ値を、コンテナグラフ内の対応するフロー接合部において維持されたメタデータ値でそのプレースホルダ値を単純に置き換えることで、解明する。
【００８６】
いくつかの例では、「内向き」のメタデータ伝播がデフォルトであり、グラフコンテナがサブグラフインターフェースに常に明示的なメタデータ定義を供給する場合であっても適切である。
【００８７】
３．１．２  外向きメタデータ伝播
サブグラフインターフェース上のフロー接合部が「外向き」のメタデータ伝播方向を有すると宣言されている場合、実装サブグラフにおけるメタデータ伝播は、フロー接合部に関するメタデータ定義をコンテナグラフに供給する。
【００８８】
すなわち、コンテナグラフにおいて、編集時メタデータ伝播は、メタデータについての編集時定義が存在しない場合であっても（その定義はリンク時にのみ実装サブグラフから利用可能であるため）、フロー接合部をメタデータソースとして扱う。具体的には、コンテナグラフにおける編集時メタデータ伝播は、上述のように従来のメタデータ伝播を用いてコンテナグラフ内の従来のコンポーネント間でメタデータを伝播させる。外向きのメタデータ伝播方向を有するサブグラフインターフェース上のフロー接合部に対してメタデータ伝播が実行される場合、プレースホルダ値がそのフロー接合部におけるメタデータに割り当てられ、プレースホルダ値は従来のメタデータ伝播を用いてコンテナグラフ内を伝播する。
【００８９】
実装サブグラフにおいて、編集時メタデータ伝播は、「外向き」のメタデータ伝播方向を有するフロー接合部をメタデータシンクとして扱う。具体的には、実装サブグラフにおける編集時メタデータ伝播は、上述のように従来のメタデータ伝播を用いてコンテナグラフ内の従来のコンポーネント間でメタデータを伝播させる。「外向き」のメタデータ伝播方向を有するサブグラフインターフェース上のフロー接合部にメタデータが伝播した場合、メタデータはこれ以上伝播することができない。このメタデータは、実装サブグラフがコンテナグラフにリンクされ、（後述のように）リンク時メタデータ解明が実行可能となるまで、フロー接合部において維持される。
【００９０】
リンク時メタデータ解明段階の間に、実装サブグラフがコンテナグラフにリンクされた状態で、「外向き」のメタデータ伝播方向を有するフロー接合部において維持されたメタデータは、コンテナグラフへ、及びコンテナグラフのコンポーネントの適切なポートへ転送される。いくつかの例では、リンク時メタデータ解明は、コンテナサブグラフ内のフロー接合部におけるプレースホルダ値を識別し、実装サブグラフ内のフロー接合部において維持されたメタデータ値でプレースホルダ値を単純に置き換える。
【００９１】
いくつかの例では、開発者は、「外向き」のメタデータ伝播方向を有するフロー接合部に関するメタデータを明示的に定義することが許容されていない。
【００９２】
４  サブグラフインターフェース開発グラフィカルユーザインターフェース
図２Ｄを参照すると、サブグラフインターフェース開発グラフィカルユーザインターフェース２２０は、サブグラフインターフェース２２４の作成、検査及び修正を容易にする。サブグラフユーザインターフェース開発グラフィカルユーザインターフェース２２０は、いくつかの入力フロー接合部２２６、出力フロー接合部２２８、並びに入力及び出力フロー接合部２２６、２２８の間の１又は２以上のリンク２２９を含むサブグラフインターフェース２２４のグラフィカルな表現を開発者に提示するために使用される表示ウィンドウ２２２を含む。
【００９３】
非常に大まかには、サブグラフインターフェース２２４は、サブグラフインターフェース２２４のあらゆるサブグラフ実装、及びサブグラフインターフェース２２４を含むあらゆるコンテナグラフが適合する必要がある厳格なプロトタイプとして機能する。したがって、グラフィカルユーザインターフェース２２０におけるサブグラフインターフェース２２４の外部は、別個に開発されるコンテナグラフ用のプレースホルダとみなすことができ、グラフィカルユーザインターフェースにおけるサブグラフインターフェース２２４の内部は、別個に開発されるサブグラフ実装用のプレースホルダとみなすことができる。
【００９４】
フロー接合部２２６、２２８は、サブグラフインターフェース２２４の境界に配置され、サブグラフインターフェース２２４の外部のコンポーネントのポートへの又はそこからのデータのフロー（例えば、コンテナグラフ内のコンポーネントのポートからのデータのフロー）と、サブグラフインターフェース２２４の内部のコンポーネントのポートへの又はそこからのデータのフロー（すなわち、サブグラフ実装内のコンポーネントのポートへのデータのフロー）とを接続するブリッジとして機能する。図２Ｄにおいて、サブグラフインターフェース２２４は、２つの入力フロー接合部２２６（すなわちｉｎ０及びｉｎ１）と、２つの出力フロー接合部２２８（すなわちｏｕｔ０、ｏｕｔ１）とを含む。しかしながら、任意数の入力フロー接合部２２６及び出力フロー接合部２２８を、サブグラフインターフェース２２４に含めることができる。
【００９５】
入力フロー接合部２２６の各々は、データ及び／又は計算特性（すなわちメタデータ）の記述子の伝播の方向（すなわち内向き又は外向き）に関連付けられる。上述のように、伝播の方向は、入力フロー接合部２２６を介して伝播するメタデータが、コンテナグラフ又はサブグラフ実装のいずれにより提供されるかを決定する。入力フロー接合部２２６に関する伝播の方向が外向きである場合、入力フロー接合部２２６は、入力フロー接合部２２６を通過するデータのレコードフォーマットと、入力フロー接合部２２６に取り付けられたコンポーネントのレイアウトとを定義する。
【００９６】
同様に、出力フロー接合部２２８の各々は、データ及び／又は計算特性（すなわちメタデータ）の記述子の伝播の方向（すなわち内向き又は外向き）に関連付けられる。上述のように、伝播の方向は、出力フロー接合部２２８を介して伝播するメタデータが、コンテナグラフ又はサブグラフ実装のいずれにより提供されるかを決定する。出力フロー接合部２２８に関する伝播の方向が外向きである場合、出力フロー接合部２２８は、出力フロー接合部２２８を通過するデータのレコードフォーマットと、出力フロー接合部２２８に取り付けられたコンポーネントのレイアウトとを定義する。
【００９７】
いくつかの例では、開発者は、サブグラフインターフェース２２４の境界線を右クリックし、右クリックメニューから「入力フロー接合部を追加」又は「出力フロー接合部を追加」メニュー項目を選択することで、フロー接合部２２６、２２８を追加することができる。他の例では、グラフィカルユーザインターフェース２２０は、フロー接合部をサブグラフインターフェース２２４に追加するための特別なツールを含む。同様に、右クリックメニューオプション又は専用ツールを用いて、サブグラフインターフェース２２４からフロー接合部を除去することができる。
【００９８】
入力及び出力フロー接合部２２６、２２８の間の１又は２以上のリンク２２９は、入力フロー接合部２２６に関連付けられたデータ又は計算特性（すなわちメタデータ）のデータ記述子と、出力フロー接合部２２６に関連付けられたデータ又は計算特性（すなわちメタデータ）のデータ記述子との間の関係を示す。図２Ｄでは、単一のリンク２２９が、第１の入力フロー接合部ｉｎ０を第１の出力フロー接合部ｏｕｔ０に接続している。リンク２２９は、第１の入力フロー接合部ｉｎ０に関連付けられたデータ又は計算特性（すなわちメタデータ）と、第１の出力フロー接合部ｏｕｔ０のデータ又は計算特性（すなわちメタデータ）との間に関係があることを示す。いくつかの例では、リンク２２９は、第１の入力フロー接合部ｉｎ０及び第１の出力フロー接合部ｏｕｔ０に関連付けられたあらゆるデータ又は計算特性（すなわちメタデータ）が同一でなければならないことを示す。これは、例えば、一方の特性が他方から導出されることを示すリンク２２９により実現することができる。
【００９９】
いくつかの例では、開発者は、第１のタイプの第１のフロー接合部（例えば入力フロー接合部）をクリックし、第１のフロー接合部から第２のタイプの第２のフロー接合部（例えば出力フロー接合部）にサブグラフインターフェース２２４の内部で線を引いて、２つのフロー接合部を線を用いて接続することで、入力及び出力フロー接合部２２６、２２８の間にリンク２２９を作成することができる。
【０１００】
図２Ｅを参照すると、サブグラフインターフェースプロパティユーザインターフェース２３２のフロー接合部設定タブ２３０により、ユーザは、サブグラフインターフェースのフロー接合部の１又は２以上を設定することができる。フロー接合部設定タブは、接合部リストコントロール２３４、並びに、レコードフォーマットメタデータ伝播方向コントロール２３８、レイアウトメタデータ伝播方向コントロール２４０、レイアウト関連付けコントロール２４２、「ファン許可（can fan）」コントロール２４４、及び必要（required）コントロール２４６を含む伝播コントロールセクション２３６を含む。
【０１０１】
フロー接合部リストコントロール２３４は、入力フロー接合部カテゴリ２４８及び出力フロー接合部カテゴリ２５０にカテゴリ化された、全てのフロー接合部のリストを表示する。開発者は、フロー接合部リストコントロール２３４からフロー接合部の１又は２以上を設定するために選択することができる。そして、開発者は、伝播コントロールセクション２３６内のコントロール２３８、２４０、２４２、２４４、２４６を用いて選択されたフロー接合部を設定することができる。具体的には、開発者は、レコードフォーマットメタデータ伝播方向コントロール２３８を用いて、選択されたフロー接合部に関するレコードフォーマットメタデータ伝播の方向が内向きであるか外向きであるかを選択することができる。開発者は、レイアウトメタデータ伝播方向コントロール２４０を用いて、選択されたフロー接合部に関するレイアウトメタデータ伝播の方向が内向きであるか外向きであるかを選択することができる。開発者は、レイアウト関連付けコントロール２４２を用いて、選択されたフロー接合部に関連付けられたレイアウトパラメータの名前を選択することができる。開発者は、「ファン許可」コントロール２４４を用いて、選択されたフロー接合部がファンイン（fan-in）又はファンアウト（fan-out）することが許容されているかを指定することができる。開発者は、必要コントロール２４６を用いて、選択されたフロー接合部がサブグラフインターフェースにより必要とされるかを指定することができる。
【０１０２】
いくつかの例では、サブグラフインターフェースプロパティユーザインターフェース２３２のフロー接合部設定タブ２３０には、開発者がサブグラフインターフェースを右クリックし、右クリックメニューからプロパティ項目を選択することでアクセスすることができる。
【０１０３】
いくつかの例では、図２Ｄのグラフィカルユーザインターフェース２２０を利用して、サブグラフインターフェース２２４のサブグラフインターフェース内で許容されるいくつかのフェーズを定義することもできる。
【０１０４】
５  例
以下の節で、図２Ａ及び図２Ｂのデータフローグラフについてのメタデータ伝播の例を与える。図３Ａ〜３Ｃ及び図４Ａ〜４Ｃにおける破線の太線はメタデータ伝播を示し、その線の矢印の先はメタデータ伝播の方向を示す。
【０１０５】
５．１  レコードフォーマットメタデータ伝播
図３Ａ〜３Ｃを参照すると、図２Ａの第１のデータフローグラフ２００及び図２Ｂの第２のデータフローグラフ２０１におけるレコードフォーマットメタデータ伝播の一例が示されている。ここで図３Ａを参照すると、この例では、サブグラフインターフェース２１０の第１のフロー接合部２０４Ｄ及びサブグラフインターフェース２１０の第２のフロー接合部２０４Ｆの両方が「内向き」のメタデータ伝播方向を有し、サブグラフインターフェースの第３のフロー接合部２０４Ｇが「外向き」のメタデータ伝播方向を有することが仮定されている。また、第１のデータフローグラフ２００における明示的に定義されたメタデータが、第１の入力データセット２０２Ａの第２の出力ポート２０４Ｃに関連付けられたレコードフォーマットＡ、第２の入力データセット２０２Ｂの第１の出力ポート２０４Ａに関連付けられたレコードフォーマットＢ、及び出力データセット２０２Ｃの第３の入力ポート２０４Ｊに関連付けられたレコードフォーマットＣのみであることも仮定されている。
【０１０６】
グラフ開発者が第１のデータフローグラフ２００を編集している間に、編集時レコードフォーマットメタデータ伝播が、第１のデータフローグラフ２００上で実行される。具体的には、レコードフォーマットＡは、第１の入力データセット２０２Ａの第２の出力ポート２０４Ｃからサブグラフインターフェース２１０の第１のフロー接合部２０４Ｄへ、第２のフロー２０６Ｂを介して伝播する。第１のフロー接合部２０４Ｄは「内向き」のメタデータ伝播方向を有しているので、レコードフォーマットＡはこれ以上伝播せず、リンク時メタデータ解明段階において後で使用するために、第１のフロー接合部２０４Ｄにおいて維持される。
【０１０７】
レコードフォーマットＢは、第２の入力データセット２０２Ｂの第１の出力ポート２０４Ａから第１のコンポーネント２０８Ａの第１の入力ポート２０４Ｂへ第１のフロー２０６Ａを介して伝播し、ここでレコードフォーマットＢは第１の入力ポート２０４Ｂに関連付けられる。編集時メタデータ伝播処理は、第１のコンポーネント２０８Ａがメタデータにいかなる変換も適用しないことを決定し、したがってレコードフォーマットＢをそのコンポーネントを通って伝播させ、これを第１のコンポーネント２０８Ａの第３の出力ポート２０４Ｅに関連付ける。
【０１０８】
そして、レコードフォーマットＢは、第１のコンポーネント２０８Ａの第３の出力ポート２０４Ｅからサブグラフインターフェース２１０の第２のフロー接合部２０４Ｆへ第３のフロー２０６Ｃを介して伝播する。第２のフロー接合部２０４Ｆは「内向き」のメタデータ伝播方向を有しているので、レコードフォーマットＢはこれ以上伝播せず、リンク時メタデータ解明において後で使用するために第２のフロー接合部２０４Ｆにおいて維持される。
【０１０９】
そして、レコードフォーマットＣは、出力データセット２０２Ｃの第３の入力ポート２０４Ｊから第２のコンポーネント２０８Ｂの第４の出力ポート２０４Ｉへ第５のフロー２０６Ｅを介して伝播し、ここでレコードフォーマットＣは第４の出力ポート２０４Ｉに関連付けられる。
【０１１０】
サブグラフインターフェース２１０の第３のフロー接合部２０４Ｇは「外向き」のメタデータ伝播方向を有するので、そのフロー接合部に関連付けられるメタデータは、第１のデータフローグラフ２００における編集時には未知であり、リンク時に実装サブグラフにより提供されることが予想される。このために、プレースホルダレコードフォーマットＴＢＤ１が、一時的に第３のフロー接合部２０４Ｇに関連付けられる。プレースホルダレコードフォーマットＴＢＤ１は、第２のコンポーネント２０８Ｂの第２の入力ポート２０４Ｈへ第４のフロー２０６Ｄを介して伝播し、ここで一時的に第２の入力ポート２０４Ｈに関連付けられる。リンク時メタデータ解明がＴＢＤ１の実際の値を解明し、実際の値を第３のフロー接合部２０４Ｇ及び第２の入力ポート２０４Ｈに関するメタデータとして関連付けるまで、プレースホルダは第３のフロー接合部２０４Ｇ及び第２の入力ポート２０４Ｈにおいて維持される。
【０１１１】
図３Ｂを参照すると、グラフ開発者が第２のデータフローグラフ２０１を編集している間に、編集時メタデータ伝播が第２のデータフローグラフ２０１上で実行される。第２のデータフローグラフ２０１は、メタデータがレコードフォーマットＥとして明示的に定義される唯一のポート、すなわち第４のコンポーネント２０８Ｄの第６の出力ポート２０４Ｏを有する。
【０１１２】
上述のように、第２のデータフローグラフ２０１は、サブグラフインターフェース２１０（すなわち、第１のデータフローグラフ２００に含まれるサブグラフインターフェース）に適合する。このために、サブグラフインターフェース２１０のポートのメタデータ伝播方向は、第２のデータフローグラフ２０１において、第１のデータフローグラフ２００の場合と同一である。すなわち、サブグラフインターフェース２１０の第１のフロー接合部２０４Ｄ及びサブグラフインターフェース２１０の第２のフロー接合部２０４Ｆの両方が「内向き」のメタデータ伝播方向を有し、サブグラフインターフェースの第３のフロー接合部２０４Ｇが「外向き」のメタデータ伝播方向を有する。
【０１１３】
第１のフロー接合部２０４Ｄは「内向き」のメタデータ伝播方向を有するので、ポートに関連付けられるメタデータは第２のデータフローグラフ２０１における編集時には未知であり、リンク時にコンテナグラフ（すなわち第１のデータフローグラフ２００）により提供されることが予想される。このために、プレースホルダレコードフォーマットＴＢＤ２が、一時的に第１のフロー接合部２０４Ｄに関連付けられる。プレースホルダレコードフォーマットＴＢＤ２は、第４のコンポーネント２０８Ｄの第５の入力ポート２０４Ｍへ第７のフロー２０６Ｇを介して伝播し、ここで一時的に第５の入力ポート２０４Ｍに関連付けられる。リンク時メタデータ解明がＴＢＤ２の実際の値を解明し、実際の値を第５の入力２０４Ｍに関するメタデータとして関連付けるまで、プレースホルダは第１のフロー接合部２０４Ｄ及び第５の入力ポート２０４Ｍに維持される。
【０１１４】
同様に、第２のフロー接合部２０４Ｆは「内向き」のメタデータ伝播方向を有するので、ポートに関連付けられるメタデータは第２のデータフローグラフ２０１における編集時には未知であり、リンク時にコンテナグラフ（すなわち第１のデータフローグラフ２００）により提供されることが予想される。このために、プレースホルダレコードフォーマットＴＢＤ３が、一時的に第２のフロー接合部２０４Ｆに関連付けられる。プレースホルダレコードフォーマットＴＢＤ３は、第３のコンポーネント２０８Ｃの第４の入力ポート２０４Ｋへ第６のフロー２０６Ｆを介して伝播し、ここで一時的に第４の入力ポート２０４Ｋに関連付けられる。そして、編集時メタデータ伝播処理は、第３のコンポーネント２０８Ｃがメタデータにいかなる変換も適用しないことを決定し、したがってレコードフォーマットＴＢＤ３をそのコンポーネントを通って伝播させ、これを第３のコンポーネント２０８Ｃの第５の出力ポート２０４Ｌに関連付ける。そして、ＴＢＤ３は、第４のコンポーネント２０８Ｄの第６の入力ポート２０４Ｎへ第８のフロー２０６Ｈを介して伝播し、ここで一時的に第６の入力ポート２０４Ｎに関連付けられる。
【０１１５】
プレースホルダＴＢＤ３は第２のフロー接合部２０４Ｆ及び３つのポート２０４Ｋ、２０４Ｌ、２０４Ｎにおいて、リンク時メタデータ解明がＴＢＤ３の実際の値を解明し実際の値をこれらのポートに関するメタデータとして関連付けるまで維持される。
【０１１６】
レコードフォーマットＥは、第４のコンポーネント２０８Ｄの第６の出力ポート２０４Ｏからサブグラフインターフェース２１０の第３のフロー接合部２０４Ｇへ第９のフロー２０６Ｉを介して伝播する。第３のフロー接合部２０４Ｇは「外向き」のメタデータ伝播方向を有するので、レコードフォーマットＦはこれ以上伝播せず、リンク時メタデータ解明において後で使用するために、第３のフロー接合部ポート２０４Ｇにおいて維持される。
【０１１７】
図３Ｃを参照すると、実行時の直前に、第２のデータフローグラフ２０１が第１のデータフローグラフ２００にリンクされて、結合されたデータフローグラフ３００が得られ、リンク時メタデータ解明が実行される。リンク時メタデータ解明を実行するために、サブグラフインターフェース２１０のフロー接合部の各々のプロパティが、それらに関連付けられたメタデータ伝播の方向を決定するために分析される。内向きのメタデータ伝播方向を有するサブグラフインターフェース２１０のフロー接合部について、第１のデータフローグラフ２００内のフロー接合部において維持されたレコードフォーマットメタデータは、「内向き」に、第２のデータフローグラフ２０１のコンポーネントの適切なポートに転送される。同様に、外向きのメタデータ伝播方向を有するサブグラフインターフェース２１０のフロー接合部について、第２のデータフローグラフ２０１内のフロー接合部において維持されたレコードフォーマットメタデータは、外向きに、第１のデータフローグラフ２００のコンポーネントの適切なポートに転送される。
【０１１８】
具体的には、第１のフロー接合部２０４Ｄが分析され、第１のフロー接合部２０４Ｄが「内向き」のメタデータ伝播方向を有することが決定される。そして、第１のフロー接合部２０４Ｄが、第１のデータフローグラフ２００では定義されたメタデータレコードフォーマットＡに、及び第２のデータフローグラフ２０１ではプレースホルダメタデータＴＢＤ２に関連付けられていることが決定される。リンク時メタデータ解明段階は、第２のデータフローグラフ２０１においてＴＢＤ２に関連付けられた全てのポート（すなわち第５の入力ポート２０４Ｍ）をレコードフォーマットＡに関連付ける。
【０１１９】
第２のフロー接合部２０４Ｆが分析され、第２のフロー接合部２０４Ｆが「内向き」のメタデータ伝播方向を有することが決定される。そして、第２のフロー接合部２０４Ｆが、第１のデータフローグラフ２００では定義されたメタデータレコードフォーマットＢに、及び第２のデータフローグラフ２０１ではプレースホルダメタデータＴＢＤ３に関連付けられていることが決定される。リンク時メタデータ解明段階は、第２のデータフローグラフ２０１においてＴＢＤ３に関連付けられた全てのポート（すなわち第４の入力ポート２０４Ｋ、第５の出力ポート２０４Ｌ、及び第６の入力ポート２０４Ｎ）をレコードフォーマットＢに関連付ける。
【０１２０】
第３のフロー接合部２０４Ｇが分析され、第３のフロー接合部２０４Ｇが「外向き」のメタデータ伝播方向を有することが決定される。そして、第３のフロー接合部２０４Ｇが、第２のデータフローグラフ２０１では定義されたメタデータレコードフォーマットＥに、及び第１のデータフローグラフ２００ではプレースホルダメタデータＴＢＤ１に関連付けられていることが決定される。リンク時メタデータ解明段階は、第１のデータフローグラフ２００においてＴＢＤ１に関連付けられた全てのポート（すなわち第２の入力ポート２０４Ｈ）をレコードフォーマットＥに関連付ける。
【０１２１】
上述の編集時メタデータ伝播及びリンク時メタデータ解明処理の結果、結合されたデータフローグラフ３００内のポートの全てが、有効なレコードフォーマットメタデータに関連付けられる。
【０１２２】
５．２  レイアウトメタデータ伝播
図４Ａ〜４Ｃを参照すると、図２Ａの第１のデータフローグラフ２００及び図２Ｂの第２のデータフローグラフ２０１におけるレイアウトメタデータ伝播の一例が示されている。レイアウトメタデータ伝播を容易にするために、サブグラフインターフェース２１２の設計者は、サブグラフインターフェース２１２に関する１又は２以上のレイアウトメタデータパラメータを指定する。１又は２以上のレイアウトメタデータパラメータの各々に対して、サブグラフインターフェース設計者は、メタデータ伝播の方向を指定する。定義されたレイアウトメタデータパラメータを用いて、サブグラフインターフェース２１２の設計者は、サブグラフインターフェースのフロー接合部の各々をレイアウトメタデータパラメータの１つに関連付ける。いくつかの例では、各フロー接合部は、それ自体の一意のレイアウトメタデータパラメータが指定される。他の例では、フロー接合部よりも少ないレイアウトメタデータパラメータが存在し、特定のレイアウトメタデータパラメータが１より多いフロー接合部に関連付けられる。そのような例では、共通のレイアウトメタデータパラメータを共有するフロー接合部は全て、メタデータ伝播の方向と、共通のレイアウトメタデータパラメータに関する伝播したレイアウト値とに適合する必要がある。
【０１２３】
ここで図４Ａを参照すると、この例では、サブグラフインターフェース２１２は、２つのレイアウトメタデータパラメータ、すなわち「外向き」のメタデータ伝播方向を有する第１のレイアウトメタデータパラメータと、「内向き」のメタデータ伝播方向を有する第２のレイアウトメタデータパラメータとに関連付けられることが仮定されている。第１のレイアウトメタデータパラメータは、第１のフロー接合部２０４Ｄ及び第２のフロー接合部２０４Ｆに関連付けられる。第２のレイアウトメタデータパラメータは、第３のフロー接合部２０４Ｇに関連付けられる。また、第１のコンポーネント２０８Ａ及び第２のコンポーネント２０８Ｂに関するレイアウトメタデータが明示的に定義されておらず、したがってメタデータ伝播により定義されることも仮定される。
【０１２４】
グラフ開発者が第１のデータフローグラフ２００を編集している間に、編集時レイアウトメタデータ伝播が第１のデータフローグラフ２００上で実行される。第１のコンポーネント２０８Ａに関するレイアウトメタデータは明示的に定義されていないので、そのレイアウトメタデータは、「外向き」のメタデータ伝播方向を有する第１のレイアウトメタデータパラメータに関連付けられた第２のフロー接合部２０４Ｆから伝播することが予想される。しかしながら、第２のフロー接合部２０４Ｆに関連付けられたレイアウトメタデータは、第１のデータフローグラフ２００における編集時には未知であり、リンク時に実装サブグラフにより提供されることが予想される。このために、プレースホルダレイアウトメタデータＴＢＤ１が第１のコンポーネント２０８Ａに伝播し、一時的に関連付けられる。リンク時メタデータ解明がＴＢＤ１の実際の値を解明し、その実際の値を第１のコンポーネント２０８Ａに関するレイアウトメタデータとして関連付けるまで、プレースホルダレイアウトメタデータは第１のコンポーネント２０８Ａにおいて維持される。
【０１２５】
同様に、第２のコンポーネント２０８Ｂに関するレイアウトメタデータも、明示的に定義されていない。しかしながら、編集時レイアウトメタデータ伝播は、第２のコンポーネント２０８Ｂの第４の出力ポート２０４Ｉに接続された出力データセット２０２Ｃの構成を分析して、第２のコンポーネント２０８Ｂに関するレイアウトメタデータを推測することができる。図４Ａの例では、メタデータ伝播は、出力データセット２０２Ｃの構成を分析し、その上流コンポーネント（すなわち第２のコンポーネント２０８Ｂ）の２つの並列実行インスタンスからデータを受信するように構成されていることを決定する。出力データセット２０２Ｃの構成に基づいて、メタデータ伝播は、第１のデータフローグラフ２００の実行中に第２のコンポーネント２０８Ｂの２つのインスタンスが並列して実行する（すなわち、第２のコンポーネント２０８Ｃが「２通りの並列（two ways parallel）」で実行し、図では２ｘと表されている）と推測する。この決定に基づいて、メタデータ伝播は、２ｘレイアウトメタデータを第２のコンポーネント２０８Ｂに関連付ける。
【０１２６】
そして、メタデータ伝播は、２ｘレイアウトメタデータを第２のコンポーネント２０８Ｂから第３のフロー接合部２０４Ｇに伝播させる。第３のフロー接合部２０４Ｇが、「内向き」のメタデータ伝播方向を有する第２のレイアウトメタデータパラメータに関連付けられているので、レイアウトメタデータ２ｘはこれ以上伝播せず、リンク時メタデータ解明において後で使用するために第３のフロー接合部２０４Ｇにおいて維持される。
【０１２７】
レイアウトメタデータを既に有しているファイルが、第１のデータフローグラフ２００内の第１のフロー接合部２０４Ｄと結び付いているので、第１のフロー接合部２０４Ｄを介したレイアウトメタデータ伝播は行われないことに留意されたい。
【０１２８】
図４Ｂを参照すると、グラフ開発者が第２のデータフローグラフ２０１を編集している間に、編集時レイアウトメタデータ伝播が第２のデータフローグラフ２０１上で実行される。第２のデータフローグラフ２０１に含まれる第３のコンポーネント２０８Ｃは、第２のデータフローグラフ２０１の実行中に、第３のコンポーネント２０８Ｃの１つのインスタンスが動作する（図では１ｘと表されている）ことを示す、明示的に定義されたレイアウトメタデータを有する。第２のデータフローグラフ２０１に含まれる第４のコンポーネント２０８Ｄに関するレイアウトメタデータは明示的に定義されておらず、したがってメタデータ伝播により定義される。
【０１２９】
第２のフロー接合部２０４Ｆが「外向き」のメタデータ伝播方向を有する第１のレイアウトメタデータパラメータに関連付けられているので、第３のコンポーネント２０８Ｃに関する１ｘレイアウトメタデータは、第２のフロー接合部２０４Ｆに伝播し、ここでリンク時メタデータ解明段階において後で使用するために維持される。
【０１３０】
第４のコンポーネント２０８Ｄに関するレイアウトメタデータが明示的に定義されていないので、そのレイアウトメタデータは、「内向き」のメタデータ伝播方向を有する第２のレイアウトメタデータパラメータに関連付けられた第３のフロー接合部２０４Ｇから伝播することが予想される。しかしながら、第３のフロー接合部２０４Ｇに関連付けられたレイアウトメタデータは、第２のデータフローグラフ２０１において編集時には未知であり、リンク時にコンテナグラフにより提供されることが予想される。このために、プレースホルダレイアウトメタデータＴＢＤ２が第４のコンポーネント２０８Ｄに伝播し、一時的に関連付けられる。リンク時メタデータ解明がＴＢＤ２の実際の値を解明し、その実際の値を第４のコンポーネント２０８Ｄに関するレイアウトメタデータとして関連付けるまで、プレースホルダレイアウトメタデータは第４のコンポーネント２０８Ｄにおいて維持される。
【０１３１】
図４Ｃを参照すると、実行時の直前に、第２のデータフローグラフ２０１が第１のデータフローグラフ２００にリンクされて、結合されたデータフローグラフ３００が得られ、リンク時メタデータ解明が実行される。リンク時メタデータ解明を実行するために、サブグラフインターフェース２１０のフロー接合部の各々に関連付けられたレイアウトメタデータパラメータは、フロー接合部の各々に関連付けられたメタデータ伝播の方向を決定するために分析される。「内向き」のメタデータ伝播方向を有するサブグラフインターフェース２１０のフロー接合部について、第１のデータフローグラフ２００内のフロー接合部において維持されたレイアウトメタデータは、内向きに、第２のデータフローグラフ２０１の適切なコンポーネントに転送される。同様に、「外向き」のメタデータ伝播方向を有するサブグラフインターフェース２１０のポートについて、第２のデータフローグラフ２０１内のフロー接合部において維持されたレイアウトメタデータは、外向きに、第１のデータフローグラフ２００の適切なコンポーネントに転送される。
【０１３２】
具体的には、第２のフロー接合部２０４Ｆに関連付けられた第１のレイアウトメタデータパラメータが分析され、第２のフロー接合部２０４Ｆが「外向き」のメタデータ伝播方向を有することが決定される。そして、第２のフロー接合部２０４Ｆが、第２のデータフローグラフ２０１では明示的に定義されたレイアウトメタデータ（すなわち１ｘ）に、及び第１のデータフローグラフ２００ではプレースホルダレイアウトメタデータＴＢＤ１に関連付けられていることが決定される。リンク時メタデータ解明段階は、第１のデータフローグラフ２００においてＴＢＤ１に関連付けられた全てのコンポーネント（すなわち第１のコンポーネント２０８Ａ）をレイアウトメタデータ１ｘに関連付ける。
【０１３３】
第３のフロー接合部２０４Ｇに関連付けられた第２のレイアウトメタデータパラメータが分析され、第３のフロー接合部２０４Ｇが「内向き」のメタデータ伝播方向を有することが決定される。そして、第３のフロー接合部２０４Ｇが、第２のデータフローグラフ２０１ではプレースホルダレイアウトメタデータＴＢＤ２に、及び第１のデータフローグラフ２００では明示的に定義されたレイアウトメタデータ（すなわち２ｘ）に関連付けられていることが決定される。リンク時メタデータ解明は、第２のデータフローグラフ２０１においてＴＢＤ２に関連付けられた全てのコンポーネント（すなわち第４のコンポーネント２０８Ｄ）をレイアウトメタデータ２ｘに関連付ける。
【０１３４】
上述の編集時メタデータ伝播及びリンク時メタデータ解明処理の結果、結合されたデータフローグラフ３００内のコンポーネントの全てが、有効なレイアウトメタデータに関連付けられる。
【０１３５】
上述の例のいくつかにおいて、メタデータ伝播は、所与のポート、端子又はコンポーネントに関連付けられた明示的に定義されたメタデータを、未定義のメタデータを有する別のポート、端子又はコンポーネントにコピーする操作として説明される。そして、コピーされたメタデータは、その別のポート、端子又はコンポーネントに関連付けられる。
【０１３６】
しかしながら、いくつかの例では、メタデータをコピーするのではなく、メタデータ伝播は、明示的に定義されたメタデータを有するポート、端子又はコンポーネントと、未定義のメタデータを有するそれらとの間の関連付けを示すポインタを用いる。例えば、未定義のメタデータを有する所与のポートは、メタデータ伝播により割り当てられた、別の異なるポートに関連付けられた明示的に定義されたメタデータへのメタデータポインタを有することができる。リンク時に、さらなる伝播は行われない。その代わりに、ポインタが解明されて、明示的に定義されたメタデータが他の異なるポートに関連付けられる。
【０１３７】
６  応用例
いくつかの例では、所与のサブグラフインターフェースは、サブグラフインターフェースに適合する実装サブグラフのライブラリに関連付けることができる。そして、サブグラフインターフェースをコンテナグラフ内に配置するグラフ開発者は、開発中にライブラリ内の実装サブグラフのいずれかから簡単に選択することができる。
【０１３８】
いくつかの例では、上述のサブグラフインターフェースを用いることで、コードの抽象化が容易になる。例えば、サブグラフインターフェースの所与の実装は、ディスク上の１箇所のみに存在し得るが、多数のコンテナグラフで使用することができる。ディスク上のその実装に対してなされた変更は、その実装が使用される全てのコンテナグラフの機能に、コンテナグラフへのいかなる修正も必要とせずに作用する。
【０１３９】
７  代替例
いくつかの例では、特定の実装サブグラフは、無認可のユーザがそのサブグラフの内容を閲覧できないように暗号化される。そのような例では、サブグラフインターフェースは、暗号化された実装サブグラフをリンクすることができる。いくつかの例では、特定のコンテナグラフは、無認可のユーザがそのコンテナグラフの内容を閲覧できないように暗号化される。
【０１４０】
いくつかの例では、グラフインターフェースの各フロー接合部は、以下のプロパティ：ラベル、データフロー方向、フロー接合部がファンイン又はファンアウトするかの表示、フロー接合部が必要であるかの表示、メタデータ伝播方向、関連付けられたレイアウトメタデータパラメータの名前、のうちの１又は２以上を含む。
【０１４１】
いくつかの例では、サブグラフインターフェースの設計者は、サブグラフインターフェースの２又は３以上のフロー接合部の間のメタデータの関係を定義する規則を指定することができる。例えばサブグラフインターフェース設計者は、入力フロー接合部及び出力フロー接合部が同じメタデータを有することを指定することができる。
【０１４２】
いくつかの例では、サブグラフインターフェースは、マルチフェーズサブグラフ実装をサポートするように実装することができる。非常に大まかには、マルチフェーズグラフとは、そのコンポーネントが、事前定義された順序で連続的に実行される２又は３以上の「フェーズ」に分離されたグラフである。例えば、マルチフェーズグラフは３つのフェーズ、すなわち第１のフェーズ、第２のフェーズ、及び第３のフェーズを含むことができ、各々１又は２以上のコンポーネントを含む。動作時に、第２のフェーズのコンポーネントは、第１のフェーズのコンポーネントがその処理を完了するまで、データの処理を開始しない。同様に、第３のフェーズのコンポーネントは、第２のフェーズのコンポーネントがその処理を完了するまで、データの処理を開始しない。
【０１４３】
複数のフェーズを有する動的なサブグラフを収容するために、サブグラフインターフェースは、サブグラフインターフェースがシングルフェーズであるかマルチフェーズであるかをサブグラフインターフェースの設計者が指定できるようになるパラメータを含む。サブグラフインターフェースがマルチフェーズとして指定された場合、設計者は、サブグラフインターフェースに対して固定数のフェーズを指定する必要がない。
【０１４４】
マルチフェーズとして指定されたサブグラフインターフェースの実装についての要件の一例は、以下の要件を含む。サブグラフインターフェースのいかなる実装も、全てのコンポーネントが、シングルフェーズφｉにおいてサブグラフインターフェースの入力ポート（又はフロー接合部）に接続されなければならない。さらに、サブグラフインターフェースのいかなる実装も、全てのコンポーネントが、シングルフェーズφｏ＞φｉにおいてサブグラフインターフェースの出力ポート（又はフロー接合部）に接続されなければならず、ここでφｏは実装における最大のフェーズである。サブグラフインターフェースの実装は、完全にサブグラフ実装の内部にある任意数のフェーズを有することができる。
【０１４５】
マルチフェーズサブグラフインターフェースを含むコンテナグラフが編集される場合、サブグラフ実装の出力におけるフェーズは、その入力フェーズ＋１であると一時的に仮定される。これは、下流のコンポーネントがいつ同じフェーズになるかをグラフ開発者が決定するのに十分である。しかしながら、編集時フェーズは、必ずしも実行時フェーズと同じではない。
【０１４６】
実装サブグラフがサブグラフインターフェースの代わりにバインドされた場合、結合されたグラフに関する全体フェーズ情報は、以下のように更新される：
１）所与のサブグラフ実装について、Ｉを、その入力フロー接合部に書き込みを行うコンポーネントのフェーズの最大値とする。所与の入力フェーズ値Ｉにおける全てのマルチフェーズサブグラフ実装について、マルチフェーズサブグラフ実装における完全に内部のフェーズ数の最大値であるＭを計算する。
２）Ｉより大きいフェーズを有するグラフ内の全てのコンポーネントのフェーズは、Ｍだけインクリメントされ、フェーズの差分が下流に伝播する。
３）サブグラフ実装の出力フェーズＯは、サブグラフ実装の出力ポートの下流コンポーネントのセットの調整されたフェーズの最小値に設定される。
４）この処理は、１又は２以上のマルチフェーズサブグラフ実装を含む結合されたグラフにおいてフェーズごとに反復される。
【０１４７】
φｉ、すなわちサブグラフ実装における入力フェーズが０でない場合、内部フェーズの或る数ｍ＞０が、サブグラフ実装における最初の入力フェーズの前に行われる。サブグラフ実装のこれらの「事前フェーズ」は、例えば、メインの入力処理で使用されるルックアップファイルを作成するために有用である。この場合、Ｉ＜φｉであるならば、全てのコンポーネントのグローバルなフェーズは、ｍ個の事前フェーズが、結合されたデータフローグラフにおいて正のフェーズ数で作動できるように、インクリメントされる必要がある場合がある。これは、フェーズごとに行うことができ、（調整前の）開始フェーズＩにおける全てのサブグラフ実装の事前フェーズの最大値だけインクリメントし、フェーズ差分を下流に伝播させ、次のフェーズに対して反復する。
【０１４８】
いくつかの例では、上記の調整アルゴリズムは、サブグラフ実装におけるコンポーネントのフェーズ番号付けにギャップをもたらすことがある（例えば、そのサブグラフ実装と同じ入力フェーズにある内部フェーズを有する他のサブグラフ実装が存在する場合）。例えば、入力フェーズ０にある２つのサブグラフ実装、すなわち２つの内部フェーズを有するＡ、及び１つの内部フェーズを有するＢを考える。Ａ及びＢの次の下流コンポーネントのフェーズは、マルチフェーズグラフ実装であるので、少なくとも１である。内部フェーズ数の最大値は２であり、したがってＡ及びＢ両方の調整されたグローバルな出力フェーズは３となる。これはＢがフェーズギャップを含むことを意味し、すなわち、その入力フェーズは０となり、その唯一の完全に内部のフェーズは１となるが、その出力フェーズは３となる。そのようなフェーズギャップは、データフローグラフの動作に弊害とはならない。
【０１４９】
いくつかの例では、同じ入力フェーズＩの複数のサブグラフ実装の完全に内部のフェーズは、互いに重複する。これはリソース制約のために問題となることがあり、サブグラフ実装が内部フェーズのプライベート空間を有することが好ましい。このために、サブグラフ実装が、その内部フェーズを他のサブグラフ実装と共有することから脱退できるようにすることが可能である。これは例えば、ブール値に解明され得る（例えば、private_internal_phasingと名付けられた）サブグラフ実装におけるローカルパラメータを用いて行うことができる。真の場合、上記のステップ１におけるＭの計算は、private_internal_phasingが真に設定された入力フェーズＩにおけるサブグラフ実装の内部フェーズの総和を、入力フェーズＩにおける残りのサブグラフ実装の内部フェーズ数の最大値に加算したものに変更される。
【０１５０】
いくつかの例では、サブグラフインターフェースは、いかなるフロー端子も有さないことがあるが、どのサブグラフ実装がロードされるかに応じて、特定のコンテナグラフにより使用されるリソースの異なるセット（例えばルックアップファイル）をユーザが定義できるようにするために、なおも有用である場合がある。
【０１５１】
いくつかの例では、サブグラフインターフェースは、グラフィカルユーザインターフェースを用いるのではなく、インターフェースの単純なテキストの仕様を用いることで実装される。
【０１５２】
いくつかの例では、サブグラフインターフェースの実装は、「ウィザード」スタイルのグラフィカルユーザインターフェースを用いて簡略化される。例えば、ウィザードスタイルのグラフィカルユーザインターフェースは、一連の質問を行い、ユーザの答えに基づいてサブグラフインターフェースを自動的に生成することで、ユーザにサブグラフインターフェースの実装を案内する。一例では、ウィザードスタイルのグラフィカルユーザインターフェースは、限定はされないが、プリフライトチェックのページ（すなわち導入ページ）、ファイル名及び場所のページ、パラメータ定義のページ、フロー接合部定義及びメタデータ伝播のページ、レイアウトメタデータのページ、並びにまとめのページを含むいくつかのページを含む。
【０１５３】
８  システム構成
上述のサブグラフ及びサブグラフインターフェースを管理するための手法は、例えば、適切なソフトウェア命令を実行するプログラム可能計算システムを用いて実装することができ、又は、フィールドプログラマブルゲートアレイ（ＦＰＧＡ，field-programmable gate array）などの適切なハードウェア、若しくは何らかのハイブリッドの形態で実装することができる。例えば、プログラムされた手法では、ソフトウェアは、少なくとも１つのプロセッサと、（揮発性及び／又は不揮発性のメモリ及び／又は記憶素子を含む）少なくとも１つのデータストレージシステムと、（少なくとも１つの入力デバイス又はポートを用いて入力を受信し、少なくとも１つの出力デバイス又はポートを用いて出力を提供するための）少なくとも１つのユーザインターフェースとを各々含む、（様々なアーキテクチャ、例えば分散、クライアント／サーバ、又はグリッドであり得る）１又は２以上のプログラムされた若しくはプログラム可能な計算システム上で実行される１又は２以上のコンピュータプログラムにおける手順を含むことができる。ソフトウェアは、例えばデータフローグラフの設計、設定、及び実行に関するサービスを提供するより大きなプログラムの１又は２以上のモジュールを含むことができる。プログラムのモジュール（例えばデータフローグラフの要素）は、データリポジトリに格納されたデータモデルに適合するデータ構造又は他の体系化されたデータとして実装することができる。
【０１５４】
ソフトウェアは、（例えば、汎用又は専用計算システム又はデバイスにより読み出し可能な）ＣＤ−ＲＯＭ若しくは他のコンピュータ可読媒体などの有形非一時的媒体上に提供することができ、又は、これが実行される計算システムの有形非一時的媒体へネットワークの通信媒体を介して（例えば、伝播する信号内に符号化して）配信することができる。処理の一部又は全部は、専用のコンピュータ上で、或いは専用のハードウェア、例えばコプロセッサ若しくはフィールドプログラマブルゲートアレイ（ＦＰＧＡ）、又は専用の特定用途向け集積回路（ＡＳＩＣ，application-specific integrated circuit）を用いて実行することができる。処理は、ソフトウェアにより規定された計算の異なる部分が異なる計算要素により実行される分散された方法で、実装することができる。各々のそのようなコンピュータプログラムは、汎用又は専用のプログラム可能コンピュータにとってアクセス可能なストレージデバイスのコンピュータ可読記憶媒体（例えば固体メモリ若しくは媒体、又は磁気若しくは光学媒体）に格納又はダウンロードされ、そのストレージデバイスの媒体がコンピュータにより読み込まれた場合に、コンピュータを本明細書に記載の処理を実行するよう構成し動作させるようにすることが好ましい。また、本発明のシステムは、コンピュータプログラムで構成された有形非一時的媒体として実装されるものと考えることもでき、そのように構成された媒体により、コンピュータが特定の事前定義された方法で動作して、本明細書に記載の処理ステップの１又は２以上を実行する。
【０１５５】
本発明のいくつかの実施形態が説明された。とは言っても、前述の説明は本発明の範囲を例示するものであって限定しないものであり、本発明の範囲は以下の特許請求の範囲より定義されることを理解されたい。したがって、他の実施形態もまた、以下の特許請求の範囲内にある。例えば、様々な修正が本発明の範囲から逸脱せずになされ得る。加えて、上述のステップのいくつかは、順序非依存であってもよく、したがって記載された順序とは異なる順序で実行することができる。
【図１Ａ】
0006626823.tif 000002
【図１Ｂ】
0006626823.tif 000003
【図２Ａ】
0006626823.tif 000004
【図２Ｂ】
0006626823.tif 000005
【図２Ｃ】
0006626823.tif 000006
【図２Ｄ】
0006626823.tif 000007
【図２Ｅ】
0006626823.tif 000008
【図３Ａ】
0006626823.tif 000009
【図３Ｂ】
0006626823.tif 000010
【図３Ｃ】
0006626823.tif 000011
【図４Ａ】
0006626823.tif 000012
【図４Ｂ】
0006626823.tif 000013
【図４Ｃ】
0006626823.tif 000014