特開2021-9724(P2021-9724A)IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ ヤン、イーの特許一覧

特開2021-9724コンポーネントベースのソフトウェアシステムおよび開発方法
<>
  • 特開2021009724-コンポーネントベースのソフトウェアシステムおよび開発方法 図000003
  • 特開2021009724-コンポーネントベースのソフトウェアシステムおよび開発方法 図000004
  • 特開2021009724-コンポーネントベースのソフトウェアシステムおよび開発方法 図000005
  • 特開2021009724-コンポーネントベースのソフトウェアシステムおよび開発方法 図000006
  • 特開2021009724-コンポーネントベースのソフトウェアシステムおよび開発方法 図000007
  • 特開2021009724-コンポーネントベースのソフトウェアシステムおよび開発方法 図000008
  • 特開2021009724-コンポーネントベースのソフトウェアシステムおよび開発方法 図000009
  • 特開2021009724-コンポーネントベースのソフトウェアシステムおよび開発方法 図000010
  • 特開2021009724-コンポーネントベースのソフトウェアシステムおよび開発方法 図000011
  • 特開2021009724-コンポーネントベースのソフトウェアシステムおよび開発方法 図000012
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】特開2021-9724(P2021-9724A)
(43)【公開日】2021年1月28日
(54)【発明の名称】コンポーネントベースのソフトウェアシステムおよび開発方法
(51)【国際特許分類】
   G06F 8/30 20180101AFI20201225BHJP
【FI】
   G06F8/30
【審査請求】有
【請求項の数】16
【出願形態】OL
【全頁数】58
(21)【出願番号】特願2020-172554(P2020-172554)
(22)【出願日】2020年10月13日
(62)【分割の表示】特願2018-521484(P2018-521484)の分割
【原出願日】2016年7月15日
(31)【優先権主張番号】62/193,151
(32)【優先日】2015年7月16日
(33)【優先権主張国】US
(71)【出願人】
【識別番号】518017026
【氏名又は名称】ヤン、イー
【氏名又は名称原語表記】YOUNG,Yi
(74)【代理人】
【識別番号】100146374
【弁理士】
【氏名又は名称】有馬 百子
(72)【発明者】
【氏名】ヤン、イー
【テーマコード(参考)】
5B376
【Fターム(参考)】
5B376BC11
5B376BC31
5B376FA13
(57)【要約】      (修正有)
【課題】ソフトウェアを組み立てラインの様式で構築できるようにする、コンポーネントまたは部分ベースの機構を提供する。
【解決手段】ソフトウェアをアセンブルする方法は、ユーザが、計算関数(CF)をコード化できるようにするS101と、ユーザがCFをコード化し終えたかどうかを判断するS102と、ユーザが、利用可能なCFの1つまたは複数を使用して部分関数(PF)をコード化できるようにするS103と、ユーザが全てのPFを作成し終えた時を判断するS104と、ユーザが、利用可能なPFの1つまたは複数を使用してソフトウェアを作成できるようにするS105と、を含む。
【選択図】図1
【特許請求の範囲】
【請求項1】
サービスを行うためにコンピュータプログラムをアセンブルする方法であって、
前記サービスの入力/出力(I/O)要件を複数のI/Oキー/値ペアを含む対応するデータメッセージに変換することと、
入力引数として前記データメッセージを受信するように前記プログラムの部分関数(PF)を構成することと、
計算関数(CF)の引数に、かつ前記I/Oキー/値ペアにマッピングするキーペアを含む可変マッチング構造(VMS)セット(VMSS)を生成することと、
前記VMSSを使用して前記計算関数(CF)を呼び出すように前記PFを構成することであって、前記CFは前記サービスに関連している演算を行うように構成される、構成することと、を含む、方法。
【請求項2】
前記VMSSは前記キーペアのサブセットを含むVMSを含み、前記サブセットの前記キーペアの中の第1のキーペアは、前記CFの入力引数にマッピングする第1のキー、および、前記I/Oキー値ペアの中の入力キー/値ペアにマッピングする第2のキーを含む、請求項1に記載の方法。
【請求項3】
前記サブセットの前記キーペアの中の第2のキーペアは、前記CFの出力引数にマッピングする第3のキー、および、前記I/Oキー値ペアの中の出力キー/値ペアにマッピングする第4のキーを含む、請求項2に記載の方法。
【請求項4】
前記データメッセージの名前によって索引付け可能であるデータ記憶域に前記VMSSを記憶することをさらに含む、請求項1に記載の方法。
【請求項5】
前記データメッセージはJavaScript Object Notation(JSON)フォーマットを有する、請求項1に記載の方法。
【請求項6】
サービスを行うように構成されるコンピュータプログラムを実行する方法であって、前記コンピュータプログラムは、入力引数として複数の入力/出力(I/O)キー/値ペアを含むデータメッセージを受信するように構成される部分関数(PF)を含み、前記方法は、
前記データメッセージの名前を使用して複数の要素を含むデータ構造を検索することであって、それぞれの要素は名前および可変マッチング構造(VMS)を含む、検索することと、
検索された前記データ構造におけるそれぞれの要素について、
前記要素の前記名前を使用して計算関数(CF)を検索し、かつ
前記要素の前記VMSおよび前記データメッセージを使用して検索された前記CFを呼び出すことと、を含む、方法。
【請求項7】
前記呼び出すことは、前記データメッセージから入力データを判断することと、前記VMSから前記入力データのデータ部分に前記CFの引数をマッピングすることと、前記マッピングに従って前記データ部分によって前記CFを呼び出すことと、を含む、請求項6に記載の方法。
【請求項8】
前記呼び出すことは、前記検索されたCFの以前の呼び出しの結果を含む前記PFの内部データ構造に記憶されるデータをさらに使用する、請求項6に記載の方法。
【請求項9】
前記データメッセージはJavaScript Object Notation(JSON)フォーマットを有する、請求項6に記載の方法。
【請求項10】
前記呼び出すことは、第2のPFを起動するために複数の入力/出力(I/O)キー/値ペアを含む第2のデータメッセージによって前記検索されたCFを呼び出す、請求項6に記載の方法。
【請求項11】
サービスを行うためにコンピュータプログラムをアセンブルするためのコンピュータプログラム製品であって、プログラム命令が具現化されるコンピュータ可読記憶媒体を備え、前記プログラム命令は、
前記サービスの入力/出力(I/O)要件を複数のI/Oキー/値ペアを含む対応するデータメッセージに変換することと、
入力引数として前記データメッセージを受信するように前記プログラムの部分関数(PF)を構成することと、
計算関数(CF)の引数に、かつ前記I/Oキー/値ペアにマッピングするキーペアを含む可変マッチング構造(VMS)セット(VMSS)を生成することと、
前記VMSSを使用して前記計算関数(CF)を呼び出すように前記PFを構成することであって、前記CFは前記サービスに関連している演算を行うように構成される、構成することと、を含む方法を行うようにコンピュータによって実行可能である、コンピュータプログラム製品。
【請求項12】
前記VMSSは前記キーペアのサブセットを含むVMSを含み、前記サブセットの前記キーペアの中の第1のキーペアは、前記CFの入力引数にマッピングする第1のキー、および、前記I/Oキー値ペアの中の入力キー/値ペアにマッピングする第2のキーを含む、請求項11に記載のコンピュータプログラム製品。
【請求項13】
前記サブセットの前記キーペアの中の第2のキーペアは、前記CFの出力引数にマッピングする第3のキー、および、前記I/Oキー値ペアの中の出力キー/値ペアにマッピングする第4のキーを含む、請求項12に記載のコンピュータプログラム製品。
【請求項14】
前記データメッセージの名前によって索引付け可能であるデータ記憶域に前記VMSSを記憶することをさらに含む、請求項11に記載のコンピュータプログラム製品。
【請求項15】
前記データメッセージはJavaScript Object Notation(JSON)フォーマットを有する、請求項11に記載のコンピュータプログラム製品。
【請求項16】
サービスを行うように構成されるコンピュータプログラムを実行するコンピュータプログラム製品であって、前記コンピュータプログラムは、入力引数として複数の入力/出力(I/O)キー/値ペアを含むデータメッセージを受信するように構成される部分関数(PF)を含み、前記コンピュータプログラム製品は、プログラム命令が具現化されるコンピュータ可読記憶媒体を備え、前記プログラム命令は、
前記データメッセージの名前を使用して複数の要素を含むデータ構造を検索することであって、それぞれの要素は名前および可変マッチング構造(VMS)を含む、検索することと、
検索された前記データ構造におけるそれぞれの要素について、
前記要素の名前を使用して計算関数(CF)を検索し、かつ
前記要素の前記VMSおよび前記データメッセージを使用して検索された前記CFを呼び出すことと、を含む方法を行うようにコンピュータによって実行可能である、コンピュータプログラム製品。
【請求項17】
前記呼び出すことは、前記データメッセージから入力データを判断することと、前記VMSから前記入力データのデータ部分に前記CFの引数をマッピングすることと、前記マッピングに従って前記データ部分によって前記CFを呼び出すことと、を含む、請求項16に記載のコンピュータプログラム製品。
【請求項18】
前記呼び出すことは、前記検索されたCFの以前の呼び出しの結果を含む前記PFの内部データ構造に記憶されるデータをさらに使用する、請求項16に記載のコンピュータプログラム製品。
【請求項19】
前記データメッセージはJavaScript Object Notation(JSON)フォーマットを有する、請求項16に記載のコンピュータプログラム製品。
【請求項20】
前記呼び出すことは、第2のPFを起動するために複数の入力/出力(I/O)キー/値ペアを含む第2のデータメッセージによって前記検索されたCFを呼び出す、請求項16に記載のコンピュータプログラム製品。
【発明の詳細な説明】
【技術分野】
【0001】
関連出願の相互参照
本願は、2015年7月16日に出願された米国特許仮出願第62/193,151号に対する優先権を主張するものである。
【0002】
本開示は、一般的に、コンポーネントベースのソフトウェア開発技法に関する。
【背景技術】
【0003】
手続き型プログラミングは、手続き呼び出しの概念に基づいて構造化プログラミングから導出されるプログラミングパラダイムである。ルーチン、サブルーチン、または関数としても既知である手続きは、実施されるべき一連の計算ステップを包含する。手続き型プログラミング言語の例は、C、フォートラン、およびパスカルを含む。
【0004】
オブジェクト指向プログラミングにおいて、インターフェースを使用してビヘイビア(方法)およびデータ(メンバまたは属性)を明らかにするオブジェクトにプログラミングタスクを分類することに焦点を置いている。手続き型プログラミングは、データ構造に対して演算するための手順を使用するが、オブジェクト指向プログラミングは、この2つをひとまとめにするため、クラスのインスタンスである「オブジェクト」はそれ「自体の」データ構造で演算する。
【0005】
しかしながら、素人にとって、手続き型プログラミングまたはオブジェクト指向プログラミングを使用して、機能させるコンピュータプログラムを書き込むことは、困難である可能性がある。
【0006】
組み立てラインは、最終組立品が製作されるまで、部品が順に加えられる場合に、半製品の組立品がワークステーション間で移動する際に、交換可能部品が加えられる製造プロセスである。組み立てラインを使用することによって、完成品はより速くかつより少ない労力で組み立て可能である。
【0007】
よって、ソフトウェアを組み立てラインの様式で構築できるようにする、コンポーネントまたは部分ベースの機構が必要とされている。
【発明の概要】
【発明が解決しようとする課題】
【0008】
本発明の例示の実施形態によると、サービスを行うためにコンピュータコードをアセンブルする方法が提供される。方法は、サービスの入力/出力(I/O)要件を複数のI/Oキー/値ペアを含む対応するデータメッセージに変換することと、入力引数としてデータメッセージを受信するようにプログラムの部分関数(PF)を構成することと、計算関数(CF)の引数に、かつI/Oキー/値ペアにマッピングするキーペアを含む可変マッチング構造(VMS)セット(VMSS)を生成することと、VMSSを使用して計算関数(CF)を呼び出すようにPFを構成することであって、CFがサービスに関連している演算を行うように構成される、構成することと、を含む。
【0009】
本発明の例示の実施形態によると、サービスを行うように構成されるコンピュータプログラムを実行する方法が提供される。コンピュータプログラムは、入力引数として複数の入力/出力(I/O)キー/値ペアを含むデータメッセージを受信するように構成される部分関数(PF)を含む。方法は、データメッセージの名前を使用して複数の要素を含むデータ構造を検索することであって、それぞれの要素は名前および可変マッチング構造(VMS)を含む、検索することと、検索されたデータ構造におけるそれぞれの要素について、要素の名前を使用して計算関数(CF)を検索し、かつ要素のVMSおよびデータメッセージを使用して検索されたCFを呼び出すことと、を含む。
【0010】
本発明の例示の実施形態は、添付の図面と併せて、下記の説明からより詳細に理解可能である。
【図面の簡単な説明】
【0011】
図1】本発明概念の例示の実施形態に従ってソフトウェアをアセンブルする方法を示す図である。
図2】方法を実行するために使用可能である例示のコンピュータシステムを示す図である。
図3】本発明概念の例示の実施形態に従ってソフトウェアの部分関数を構成する方法を示す図である。
図4】本発明概念の例示の実施形態に従ってソフトウェアの部分関数を実行する方法を示す図である。
図5】本発明概念の例示の実施形態に従ってソフトウェアをアセンブルする方法を示す図である。
図6】本発明概念の例示の実施形態において(A)は、使用可能である例示のデータメッセージを示す図、(B)は、使用可能である例示の可変マッチング構造セットを示す図、(C)は、例示の計算関数の入力引数および出力引数の例を示す図である。
図7】本発明概念の例示の実施形態に従って、アセンブルされたソフトウェアの部分関数の実行を示すフロー図である。
図8】本発明概念の例示の実施形態に従って、ユーザがソフトウェアをアセンブルできるようにする方法を示す図である。
図9】本発明概念の例示の実施形態に従って部分関数を実行する方法を示す図である。
図10】本発明概念の例示の実施形態に従って、適用されたデータメッセージに応答して実行される部分関数の例示のシーケンスを示す図である。
【発明を実施するための形態】
【0012】
本発明概念は、本開示の例示の実施形態が示されている添付の図面を参照して、より詳細に説明される。図面全体を通して、同じまたは同様の参照番号は、同じまたは同様のコンポーネントを表すために使用される。しかしながら、本発明概念は、さまざまなやり方で実装可能であるため、本明細書に開示される実施形態に限定されると理解されるべきではない。むしろ、それらの実施形態は、当業者に本開示の範囲を伝えるために、本開示を徹底的かつ完全に理解するように提供される。
【0013】
コンポーネントベースのソフトウェアシステムおよび開発方法について本明細書に説明する。下記の説明では、本発明をより徹底的に理解してもらうために、多数の具体的な詳細が示される。しかしながら、本発明が、これらの具体的な詳細なしで実践可能であることは、当業者には明らかとなろう。他の例では、本発明を不明瞭にすることを回避するために、周知の特徴は詳細には説明されていない。
【0014】
本明細書において言及されるコンピュータコードデバイス(例えば、方法、クラス、ライブラリ)は、データ記憶媒体に記憶されてよい。本明細書において使用されるような「データ記憶媒体」と言う用語は、コンパクトディスク、ハードディスク、フロッピーディスク、テープ、光磁気ディスク、PROM(EPROM、EEPROM、フラッシュEPROMなど)、DRAM、およびSRAMなどの全てのコンピュータ可読媒体を示す。
【0015】
図1は、本発明概念の例示の実施形態に従ってソフトウェアをアセンブルする方法を示すハイレベル図である。
【0016】
方法は、ユーザが、計算関数(CF)をコード化できるようにする(S101)ことを含む。例えば、テキストフィールドを含むCFグラフィカルユーザインターフェース(例えば、CF−GUI)は、ユーザがCFのコードを入れることができるようにするコンピュータプログラムによって提供可能である。例えば、CF−GUIは、ユーザによって選択される時、ユーザが現在のCFのコード化を完了したことをプログラムに通知する第1のボタンを含むことができる。例として、CFは、計算を行う、データベースへのクエリを行う、または、ウェブページ上にグラフィックまたはテキストを提示するためにコード化可能である。例えば、クエリによって返された結果に基づいた数学的計算を行うための計算が使用可能である。一実施形態では、それぞれのCFは、ユーザによって一意の名前が与えられ、かつ、1つまたは複数の入力パラメータ(本明細書ではCF入力パラメータと呼ばれる)を受信するために、および、出力パラメータ(本明細書ではCF出力パラメータと呼ばれる)を返すためにコード化される。例えば、CF入力パラメータおよびCF出力パラメータは、整数、浮動小数、文字列、配列、ポインタなどとすることができる。
【0017】
方法は次いで、ユーザがCFをコード化し終えたかどうかを判断する(S102)ことを含む。例えば、第1のボタンの選択は、ユーザが別のCFを作成することを所望していることを指示することができる。例えば、CF−GUIは、ユーザによって選択される時、ユーザがCF50を作成し終えたことをプログラムに通知する第2のボタンを含むことができる。完了したCFはCFデータベース60に記憶可能であるため、他の符号器に利用可能である。
【0018】
方法は次に、ユーザが、利用可能なCFの1つまたは複数を使用して部分関数(PF)をコード化できるようにする(S103)ことを含む。例えば、プログラムは、GUIにおけるCFデータベース60に記憶された利用可能なCFの選択可能なリスト、およびCFが選択されたこと、およびPF内のそれらの実行順序を示すペインと共に、第2のGUI(例えば、PF−GUI)を提示することができる。例えば、ユーザは、対応するCFのインスタンスが対応するPFに必要とされる度に利用可能なCFのうちの1つを選択し、かつ、選択されたインスタンスを、ユーザがCFインスタンスを実行させることを所望する順序でペインに挿入することができる。
【0019】
方法は次に、ユーザが全てのPFを作成し終えた時をプログラムが判断する(S104)ことを含む。例えば、PF−GUIは、ユーザによって選択される時、ユーザが全てのPF70を作成し終えたことを指示するグラフィカルボタンを含むことができる。PF70は、PFデータベース80に記憶可能であるため、他の符号器に利用可能である。
【0020】
方法は次いで、プログラムによって、ユーザが、PFデータベース80に記憶される利用可能なPF70の1つまたは複数を使用してソフトウェアを作成できるようにする(S105)ことを含む。例えば、コンピュータプログラムを使用して、ユーザが接続コードを入れることができるようにするテキストフィールド、および利用可能なPF70の選択可能なリストを提示する第3のGUIをローンチするために使用可能である。例えば、ユーザは、対応するPFを、コンピュータプログラムの接続コードにおけるある特定の場所に挿入するためにPFをリストから選択可能である。一実施形態では、コンピュータプログラムは、インタープリタによって解釈されるフォームであってよい。
【0021】
図2は、図1の方法を実装するために使用可能である例示のコンピュータシステム1000を示す。図2を参照すると、コンピュータシステム1000は、例えば、中央処理装置(CPU)1001、ランダムアクセスメモリ(RAM)1004、プリンタインターフェース1010、ディスプレイユニット1011、ローカルエリアネットワーク(LAN)データ伝送コントローラ1005、LANインターフェース1006、ネットワークコントローラ1003、内部バス1002、および例えば、キーボード、マウスといった1つまたは複数の入力デバイス1009などを含むことができる。示されるように、システム1000は、リンク1007を介してデータ記憶デバイス、例えばハードディスク1008に接続されてよい。上述されたGUIはディスプレイユニット1011上に提示可能である。上述されたCF50、PF70、プログラム、およびアセンブルされたソフトウェアは、メモリ1004および/またはハードディスク1008に記憶されてよい。
【0022】
図3は、PFをコード化するために図1のステップS103を実装するために使用可能である本発明の例示の実施形態による方法を示す。図3を参照すると、方法は、計算目標データメッセージ(CGDM)の入力を受信するように部分関数を構成する(S301)ことを含む。
【0023】
例示の実施形態では、CGDMは、i)入力部分および出力部分、ii)名前/値フォーム(例えば、全ての値、いずれの後の計算においても変数に割り当てられる値のサブ構造は名前を有するものとする)を有し、iii)その構造はいくつかの横文規則(例えば、HTML、XML、またはJSON)に従う。2つのCGDMは、i)これらの入力部分および出力部分の両方が同じ構造を有し、かつii)該構造における全ての名前が同じである場合、同じである。CGDMはPFの引数として使用される。いずれのPFも1つの引数しか有することができない。PFは1つまたは2つ以上のCGDMを処理できる。それぞれのCGDMは対応するVMSSを有する。VMSSは、CGDMの計算目標をどのように達成するかをPFに命令する。
【0024】
全てのPFは同じインターフェースを有する。例えば、それぞれの部分関数は、部分関数の起動パラメータまたは引数と呼ばれる場合があるCGDMで起動されるように構成される。CGDMは、入力パラメータX(例えば、入力:X)、および出力パラメータY(例えば、出力:Y)を含み、この場合、XおよびYは名前(キー)/値フォームを有する任意のデータ構造とすることができる。X部分において、名前は値を有し、Y部分の値は、部分関数によって埋められるように空白である。2つのCGDMは、これらの入力部分および出力部分の両方が同じ構造を有し、かつ該構造における全ての名前(キー)が同じである場合、同じである。それぞれのCGDMは一意の名前を有する。この入力部分セットの全ての名前(キー)の値を有するCGDMは、CGDMのインスタンスと呼ばれる。PFは、埋められた値を有するCGDMの出力部分と同じデータ構造を返す。PFは引数としてのいずれのCGDMも受け入れる。
【0025】
PFは1つまたは複数の計算関数(CF)を包含する。いずれの関数もCFとすることができる。PFは、PFがCFをどのように実行するかがCGDMだけでなく、可変マッチング構造(VMS)と呼ばれるデータ構造によっても判断されるため、いずれのCGDMも引数として受け入れ可能である。PFはCF呼び出し元を通してCFを実行する。CF呼び出し元は、引数として、CGDM、VMS、およびCFResultsを受け入れる。呼び出すためにPFには一定のインターフェースが与えられる。CF呼び出し元は、i)CGDMおよびVMSに従ってCFおよび呼び出しの引数を準備し、ii)CGDMおよびVMSに従ってCGDMの出力部分を設定し、iii)後のCFの実行による使用を可能にするためにCFResultsに結果を保存する。
【0026】
本発明の一実施形態では、i)完全CFおよびii)部分CFの、2つの型のCF関数が存在してよい。完全CFはPFを呼び出さず、インターフェース要件を完了させている。部分CFはPFを呼び出し、インターフェース要件を部分的に終わらせている。インターフェース要件がどのように行われるかは、どのPFが呼び出されるか、およびPFが何を行うように構成されるかに左右される。
【0027】
CFがPFを呼び出す時、CGDMを準備し、かつ、引数としてのCGDMを呼び出したPFに渡す。CGDMにおける値の命名は、無矛盾の命名規則に従う場合がある。CFが呼び出すPFの名前、およびCFが作成するCGDMの名前は、CFのVMSにおいて指定可能である。
【0028】
VMSSはCFを接続する制御を行い、部分CFはPFを接続する制御を行う。ソフトウェアは所与の設計に従って、PFおよびCFを接続するためにVMSおよびVMSSを操作することによって形成可能である。
【0029】
1つのCGDMについて、CGDMの計算構造のCGDMの計算目標を達成するために(2つ以上のPFを伴う場合がある)全てのPFおよびCFの実行シーケンスを呼び出す。
【0030】
図6Aは、部分関数に引数として渡される可能性があるCGDMの一例である。この例では、CGDMはJavaScript(登録商標である)Object Notation(JSON)フォーマットを有する。CGDMは、1つまたは複数の入力キー/値ペアおよび出力キー/値ペアを含む。CGDMは、入力キー/値ペアおよび出力キー/値ペアを抽出するためにパーサーまたはインタープリタによって使用可能である識別子を含むことができる。
【0031】
図6Aに示される例において、CGDMにおける入力パラメータ識別子は「入力」という名称が付けられ、出力パラメータ識別子は「出力」という名称が付けられる。例えば、CGDMをパースするパーサーが「入力」の識別子を認識後、パーサーは、次の左中括弧「{}と右中括弧「」」との間に位置する次の要素がキー/値入力パラメータペアであると仮定することができる。例えば、CGDMをパースするパーサーが「出力」の識別子を認識後、パーサーは、次の左中括弧「{」と右中括弧「}」との間に位置する次の要素がキー/値出力パラメータペアであると仮定することができる。例えば、キー/値ペアは、セミコロン「;」によって分離可能であり、所与のキー/値ペアのキーおよび値はコロン「:」によって分離可能である。
【0032】
図6Aは、入力パラメータキー/値ペアを示すための「入力」という用語の使用、出力パラメータキー/値ペアを示すための「出力」という用語の使用、キー/値ペアの開始を示すための「{」という用語の使用、キー/値ペアの終わりを示すための「}」という用語の使用、および、パーサーがキーと値とを区別できるようにするための「:」という用語の使用を示すが、本発明はこれらに限定されない。例えば、これらの用語は、実行者によって所望されるように、他の語または記号に変更されてよい。
【0033】
図3に戻って参照すると、方法は、ユーザが計算関数(CF)の新しいインスタンスを呼び出すために部分関数を所望しているかどうかを判断する(S302)ことを含む。新しいインスタンスは、これが、挿入するための特定的なCFがリクエストされた1回目である、または、リクエストされた挿入がCF(例えばCF2)のインスタンスを異なるCF(例えばCF1)の後に挿入させることになることを意味する。説明を簡単にするために、図6Bに示されるような、第1の計算関数CF1および第2の計算関数CF2のみが利用可能であると仮定する。ユーザがCFの新しいインスタンスをリクエストしている場合、方法は、特定のCFを特定するためにラベルを挿入する(S303)。例えば、ユーザは、第1の計算関数CF1が使用されることをリクエストしているため、方法は、「CF1」などのラベルを可変マッチング構造シーケンス(VMSS)に挿入して、第1の計算関数CF1が呼び出されるように特定する。VMSSは、完了すると、ペアのシーケンスを含むことになり、この場合、それぞれのペアは所与のCF(例えば、CF1)およびVMS(例えば、CFName、VMS)の名前を含む。例えば、完了したVMSSは、{{CF1、VMS1}、…、{CFN、VMSN}}のペアを含むことができ、この場合Nは1またはそれ以上である。VMSSはCGDMに関連付けられ、VMSSにおける全てのVMSはCGDMの全ての名前の(キーの)値を埋める。すなわち、VMSSはCGDMの計算目標を満たす。VMSSは、PFに、CGDNの計算目標をどのように達成するかを命令する。
【0034】
次に、方法は、CFインスタンスの入力パラメータをCGDM内の入力パラメータにマッピングし、かつ、CFインスタンスの出力パラメータをCGDM内の出力パラメータを出力するためにマッピングする可変マッチング構造(VMS)をユーザが構成できるようにする(S304)ことを含む。VMSは、PFに、1つのCFをどのように実行するかを命令する。
【0035】
例えば、図6Bは、それぞれのキーペアがセミコロン「;」で分離される複数のキーペアを有する第1のCF1 611のために構成される第1のVMS601の例を示す。例えば、第1のVMS601の第1のキーペア「a:x」における第1のキー「a」は、第1のCF1 611の第1の入力パラメータ「a」に対応し、第1のキーペア「a:x」における第2のキー「x」は図6Aに示されるCGDM600の第2の入力パラメータ「x:2」に対応する。例えば、第1のVMS601の第2のキーペア「b:y」における第1のキー「b」は第1のCF1 611の第2の入力パラメータ「b」に対応し、第2のキーペア「b:y」における第2のキー「y」は図6Aに示されるCGDM600の第3の入力パラメータ「y:3」に対応する。例えば、第1のVMS601の第3のキーペア「c:z」における第1のキー「c」は第1のCF1 611の出力パラメータ「c」に対応し、第3のキーペア「c:z」における第2のキー「z」は図6Aに示されるCGDM600の出力パラメータ「z:NULL」に対応する。図6Cは、CFに対する呼び出しの例を示す。CFの引数が複合型である場合、CGDMの入力部分における同じ複合型にマッピングする場合、引数の名前がCであり、かつ同じ型(CGDMの入力部分のサブ構造)の名前がDであると仮定する場合に、マッピングは「C:D」と指定可能である。CGDMの入力部分における同じ複合型にマッピングせず、そのメンバがCGDMの入力部分において分布した名前にマッピングする場合、複合型のそれぞれのメンバのマッピングは指定される必要がある。複合型がTであり、かつCGDMの入力部分における名前がd1、d2、…であると仮定する場合、マッピングは「C、T(「member1:d1」、「member2:d2」…)」と指定可能である。Cが配列型である場合、マッピングは「C:Array[d1、d2、…]」と指定可能である。
【0036】
次に、方法は、構成されたVMSを、部分関数CFに関連付けられたVMMSに挿入する(S305)。VMSは、特定されたCFに関連付けられていることをパーサーが認識できるように挿入される。例えば、ラべル「CF1」より下の図6Bに示される第1のVMS601は、PFがVMSSに挿入されておりかつ第1の計算関数CF1に関連付けられているように構成されるVMSの一例である。方法は次いで、ユーザがし終えたかどうかを判断する(S305)ことを含む。例えば、GUIは、計算関数(CF)を選択し、かつ、計算関数(CF)に入れ終わっていることを指示するために、ユーザによって使用可能である。ユーザが別の計算関数(CF)、または、先に選択された計算関数(CF)の別のインスタンスを選択する場合、方法はステップS302に進む。例えば、ユーザが同じCF(例えば、再びCF1)の別のインスタンスに入れかつCGDMの異なるパラメータをCFに送るとしたら、方法はステップS304に進むことになる。例えば、これによって、第1の計算関数CF1を特定する同じラベル(例えばCF1)下の第2のVMS602が挿入されることになる可能性がある。しかしながら、ユーザが新しい計算関数(例えば、CF2 612)を選択する場合、図6Bに示されるように、第2のラベル(例えばCF2)および第3のVMS603が挿入されることになる可能性がある。
【0037】
CGDMの入力から値を取ること以外に、CFの引数は、また、1つまたは複数の先に実行されたCFの結果から値を取ることができる。例えば、PFが第1のCFを実行する時、CFの実行の結果をPFの内部にあるデータ構造(例えば、CFResults構造)またはリストに記憶でき、それによって、PFが同じ第1のCFまたは第2のCFを再実行する場合、その結果は、対応するCFが必要に応じて該結果に基づいて演算できるように、どちらのCFにも利用可能である。図7に示されるように、PF701がPF呼び出しを通して呼び出される時、PF701はCFCaller関数を通してCFを実行する。CFCaller関数は、複数の利用可能なCFCaller関数を記憶する外部記憶領域702(例えば、CFCallerストア)からロードされてよい。CFCaller関数は、入力として、CGDM、CFに関連付けられたVMSS703、およびCFResults構造704を取る。VMSS703は、外部記憶領域705(例えば、VMSSストア)からロードされてよい。CFCaller関数は、下記を行う。1)CFの引数を宣言し、かつVMSS703、CGDM、およびCFResults構造704内のCFResultsを使用してそれぞれの引数を初期化し、2)引数によってCFを実行し、3)その結果をCFResults構造704に加えて、VMSS703に従ってCGDMの出力(例えば、CGDM.output)を設定する。一実施形態では、それぞれのCFは、関連のCFCaller関数を有し、それぞれのCFは同じインターフェースを有する。VMSSストアは、PFが呼び出される全てのCGDMに対する全てのVMSSを包含する。CFCallストアは、PFが包含する全てのCFに関連付けられたCFCaller関数を包含する。
【0038】
図4は、本発明の例示の実施形態に従って、受信されたCGDMのPF呼び出しを実行するための方法を示す。方法は、CGResults構造704をクリアする(S401)ことと、CGDMの名前を使用してVMSSストア705から対応するVMSS703を検索する(S402)ことと、VMSS703におけるそれぞれの要素について、要素の名前部分を使用してCFCallerストア702からCFCaller関数を検索し、かつ要素のVMS部分、CGDM、およびCFResults構造704によって、検索されたCFCaller関数を呼び出す(S403)ことと、(この時値が埋められている)CGDMの出力をコピーする(S404)ことと、そのコピーを返す(S405)ことと、を含む。
【0039】
CFは他のPFを呼び出すことができる。これを行うやり方は、CGDMを作成し、かつ、引数として作成されたCGDMをこの呼び出しに渡すことである。CFが、計算するCGDMにおける値を、作成するCGDMに渡す場合、CFは、計算するCGDMにあるのと同じ名前を使用するものとする。CFが、CFResults構造704における値を、作成するCGDMに渡す場合、CFResults構造704にあるのと同じ名前を使用するものとする。これは無矛盾の名前規則と呼ばれる。CFが別のPFを呼び出すためのCGDMを作成する時、無矛盾の名前規則に従うものとする。
【0040】
全てのPFが同じインターフェースを有するため、種々のPFを呼び出す際の違いは名前によるだけである。PF名前引数は、呼び出すPF全てに対するCFに加えられることが可能であり、その後、呼び出すPFはCFのVMSにおいて指定可能である。また、作成するCGDMの名前は、VMSにおいて指定可能である。そのため、CFが呼び出すのはどのPFか、および使用するCGDMの名前が何かについては、CFの開発後に判断可能である。
【0041】
一実施形態において、データ記憶パラメータの全ては、名前(キー)/値フォームである。データ記憶フォーマットは、CGDMと共に種々の横文規則を有することができる。
【0042】
データ記憶域およびCGDMにおける名前は、種々のユーザよっておよび種々の時に作成可能であるため、矛盾する場合がある。名前/値のセットは、セットにおける同じ名前が命名された値に対して同じ意味論的意味を記述し、かつ、セットにおける異なる名前が命名された値に対する異なる意味論的意味を記述する場合、無矛盾と言われる。無矛盾の名前/値のセットは、名前空間(NS)を形成する。PFおよびこのCFは1つのNSにおいて演算する必要がある。CGDMおよびデータ記憶域が1つのNSにおけるものでない場合、それらを1つのNSに変換するための変換が、CGDMに適用可能である。1つのCGDMについて、CGDMの計算目標を達成するために全てのPFおよびCFの実行シーケンスが呼び出される。
【0043】
図5は、本発明の例示の実施形態によるソフトウェア開発プロセスを示す。プロセスは、ソフトウェアの全ての入力要件および出力要件をCGDMフォーマットに変換する(S501)ことと、その変換から生成されたそれぞれのCGDMの計算構造を設計し、マークアップ規則によってCGDMをマーキングし、必要に応じて新しいマークアップ規則を作成し、必要に応じて、プロパティシートを使用して新しいマークアップ規則によってCGDMをマーキングする(S502)ことと、設計された計算構造をサポートするようにデータ記憶域を設計する(S503)ことと、既存のPFおよび/またはCFを選択し、新しいマークアップ規則が加えられる場合、必要に応じて新しいPFおよび/またはCFを開発し、関わるCFに対して新しいCFCallerを開発する(S504)ことと、開発されたおよび/または選択されたPFならびにCFを接続するためにVMSおよびVMSSを作成する(S505)こととを含む。
【0044】
一実施形態では、ステップS505は、入力部分の値、すなわち、CGDMの名前インスタンス(NI)なしでCGDMを呼び出すことによって実施される。NIは、値のない入力部分および出力部分によるCGDMである。一実施形態では、他のPFを呼び出すそれぞれのCFは開発モード(DV)処理を有する。DVにおいて、CGは、計算するCGDMのNIを取り、かつ、計算するCGDMに対して作成する全てのCGDMのNIを、(例えば、ファイルのような)持続的データ記憶域に出力する。出力されたNIは呼び出されたPFのCGDMのコンテンツを指定する。VMSおよびVMSSはそれに応じて作成可能である。
【0045】
図8は、本発明概念の例示の実施形態に従って、利用可能な部分関数(PF)の1つまたは複数を使用してソフトウェアを生成する方法を示す。方法は、利用可能なPFからPFを選択するためにユーザにクエリを行う(S801)ことと、入力名前(キー)/値ペアおよび出力キー/値ペアを入れるためにユーザにクエリを行う(S802)ことと、入れられたデータに基づいてCGDMをフォーマットする(S803)ことと、入力引数としてフォーマットされたCGDMによってPF呼び出しを挿入する(S804)ことと、ユーザがPF呼び出しをし終えたかどうかを判断する(S805)こととを含む。ユーザがし終えてない場合、方法は、新しいPFを選択するためにユーザにクエリを行うようにステップS801に進む。ユーザがし終えている場合、方法は終了する。
【0046】
図9は、本発明の例示の実施形態に従って、PF呼び出しを含むソフトウェアを解釈する方法を示す。方法は引数としてPF呼び出しに渡された所与のPFおよびCGDMを特定するためにPF呼び出しをパースする(S901)ことを含む。方法は次いで、特定されたPFに関連付けられたVMSSをロードし、かつ、特定されたCGDM内の入力キー/値ペアおよび出力キー/値ペアを特定する(S902)ことを含む。方法は、次いで、ロードされたVMSSの次の行をパースする(S903)ことを含む。方法は次いで、パースされた行がCFラベルを含むかどうかを判断する(S904)。例えば、次の行が図6Bに示されるVMSSの第1の行である場合、方法は、CF1のCFラベルを特定したと結論付けることになる。CFラベルが特定されたと判断される場合、方法は、判断されたCFラベルから呼び出すための特定のCFを特定し、かつ、VMSSの次の行をパースする。その後、方法が、次の行がCFラベルでない(すなわち、次の行がVMSに対応する)と判断する場合、方法は、VMSの現在のキーペアの第1のキーを特定されたCFの選択されたI/Oパラメータにマッチさせ、かつ、現在のキーペアの第2のキーを特定されたCGDMの選択されたI/Oキーにマッチさせる(S906)。例えば、VMS601がパースされ、かつ、パースされた現在のキーペアが「a:x」であり、特定されたCFがCF1 611である場合、方法は、現在のキーペア「a:x」の第1のキー「a」をCF1 611の入力パラメータにマッチさせ、かつ、現在のキーペアの第2のキー「x」をCGDM600の入力パラメータx:2の入力キー「x」にマッチさせる。次いで、方法は、CFの選択されたI/Oパラメータが選択されたI/Oキーの値を渡されるように、特定されたCFへの呼び出しをフォーマットする(S907)ことを含む。例えば、CFL1 611の入力パラメータ「a」は値「2」が渡されるが、これは、第1のキー「a」が「x」にマッチさせられ、xは2に設定される(例えば、「x:2」)からである。方法は次いで、VMSのあらゆるキーペアに対するこれらのマッチングステップを繰り返す。方法は、し終えたかどうかを判断するために、VMSの最後のキーペアがパースされたかどうかを判断する(S908)。方法が終えられていない場合、ステップS906に進むことによって、VMSの次のキーペアに進行する。方法が終えられている場合、ステップS902に進んで、VMSSの次の行をパースして、先に特定されたCFラベル下で新しいCFラベルまたは別のVMSのどちらかを見つける。
【0047】
図6AはCGDMのJSONフォーマットの使用を示すが、本発明はこれに限定されない。例えば、JSONフォーマットは、ハイパーテキストマークアップ言語(HTML)フォーマットまたは拡張マークアップ言語(XML)フォーマットと置き換え可能である。マークアップ規則は、アルゴリズムの任意の入力インスタンスについて、それに対応する拡張コンテンツがあるように、かつ、入力インスタンスおよびこの全データ特徴が拡張コンテンツから演繹できるように、CGDMの横文規則を使用してCGDMのコンテンツを拡張する規則として定義される。マークアップ規則はアルゴリズムに関連付けられる。
【0048】
本発明の一実施形態では、ソフトウェアへの入力データメッセージはHTMLフォーマットであり、CGDMはJSONフォーマットであり、データ記憶域はリレーショナルデータベースであり、これによってウェブ開発環境が可能になる。入力をハンドリングする部分関数はウェブブラウザにおいて作動し、フロントエンド部分関数と呼ばれる場合がある。サーバ側を作動させる部分関数はバックエンド部分関数と呼ばれる場合がある。バックエンド部分関数はデータベースに接続可能である。
【0049】
HTML入力を処理する1つのPFは、線形カスケード入力をハンドリングするものとすることができる。線形カスケード入力の例には、州を選択後、国を選択し、次いで市を選択する入力がある。この入力は、<select>のリストおよび現在の選択であり、出力は次のオプション型配列である。マークアップ規則は、リストを表現する任意の規則とすることができる。マークアップ規則の例には、第1のリストを<select Cascade=“cs1”cs1=”1”mName=”name1”…>とマーキングする、第2のリストを<select Cascade=”cs1”cs1=”2”mName =”name2”…>とマーキングする、第3のリストを<select Cascade=”cs1”cs1=”3”mName =”name3”…>とマーキングする、などがある。カスケードは計算名であり、Cascade=”cs1”はcs1=’n’であるインスタンスcs1を宣言し、その後、リストにおける位置を宣言する。PFは<select>要素のonSelectイベントによってトリガされる。同じonSelectイベントハンドラのcascadeHndlerは全ての<select>に対して設定される。cascadeHndlerはこの型の入力要件および出力要件をハンドリングする部分関数である。ハンドラのアルゴリズムは以下になる。
Get instance name from Cascade=”instance_i”;
Get position number from instance_i=”n”;
Get selected value v and name n1 of the current <select>
Get name n2 of the next <select>
Send a data message of the form
{{ “input”:
{“n1” : v}
},
{ “output”: {
[{“n2”:0}]}
}}
to a backend component
Set return result to the next <select>
【0050】
1つのHTMLデータメッセージにおける任意の長さの任意の数のカスケード入力は、この部分関数によってハンドリングされることが可能である。
【0051】
入力の別のケースは、スターカスケード入力と呼ばれ、この場合、いくつかの<select>のオプションは、利用可能なサイズおよび色のオプションが、どのクロスが選定されたかに基づいて決定される場合のように、1つの<select>によって決定される。中央マークについて、<select star=”star1”star1=”name list of all end select node”>である。エンドノード<select>がマーキングされる必要はない。中央の<select>の選択がし終わると、以下のフォームのデータメッセージがバックエンドに送られる。
{
{“input”:
{“centerName” : “v”}
},
{ “output”: {
[{“n1”, “”}],
[{“n2”, “”}],

}}
}
この場合、n1およびn2はエンドノードの名前である。返された値が配列ではなく単一値であり、かつエンドノードがテキストまたは数入力である時、これは、カスタマの名前が選定されるようにオートフィルとなり、このアドレスはオートフィルされる。
【0052】
入力候補ハンドリングは、オートフィルの逆算である。部署および位置の入力が被雇用者の名前入力候補の入力を制限するように、現在の入力値およびいくつかの他の入力値以外は現在の入力のオプションを制限することができる。現在の入力値がテキストである時、提案された値に関して、2つ以上の解釈がある場合があり、例えば、提案された値がこのテキストで開始するまたはテキストを包含すること意味する場合がある。そのため、さらなる情報が以下のような値に対して提供される必要がある。
{
{“input”: {
{“otherValues1”: “v1”},
{“otherValues2”: “v2”},
{“currentValue”: {
{“value”: “v3”},
{“type”: “LIKE”}
}
}

},
{ “output”: {
[{“n1”, “”}]
}
}
}
ここで、n1は現在の入力要素の名前である。
【0053】
第1の要素<input rangeInput=”ri1”ri1=”1”…>、第2の要素<input rangeInput=“ri1”ri1=”2”…>、または、選択入力について、第1の要素<select rangeInput=”ri1”ri1=”1”…>、第2の要素<select rangeInput=”ri1”ri1=”2”…>といったマックアップ規則を有する範囲入力がまた、実装可能である。アルゴリズムは、他の入力によって制約集合を満足させるかどうか、または1つの入力が他の入力のオプションを制限するかどうかの、現在の入力チェックを受け入れる前のものである。入力フォーマット選定に起因して、日にち範囲入力、選択範囲入力、数値範囲入力のような数個の異なる型の範囲入力が存在する場合がある。
【0054】
フォームは、ある数の異なる型の入力要素(テキスト、数値、リストオプション、範囲入力、カスケード入力…)を包含する。フォーム送信のアクションは、全ての要素に対する(名前、値)ペアを収集することである。フォーム送信のマークアップ規則は、入力要素のそれぞれの型に対して型記号を定義している。異なる型は、名前値へのアクセスが種々のやり方を使用する必要があることを意味する。それぞれの入力要素をその適正な型に対してマーキングする。フォーム送信に対するアルゴリズムは以下になる。
For each type {
Get all input element for the type
For each input element of the type {
Get the name and value, pack the name value into JSON format.
}
}
mark the data message as ADD or MODIFY
send the JSON data message to a backend address
【0055】
フォーム送信は、新しいデータのADDまたは古いデータのMODIFYのどちらかとすることができる。修正について、データは最初に、いくつかの余分なデータ、キー、または参照番号と共に、バックエンドからロードされる。次いで、データは修正され、バックエンドに送られる。余分なキーデータはクッキーなどの同様の機構によってハンドリング可能である。クッキーの1つの実装形態は、特殊なタグを有するHTMLのいくつかの隠された要素を使用することである。新しいデータを加えるために、この余分なキーデータは使用されない。そのため、フォーム送信に対するPFは、修正と追加とを区別することができる。PFのフォームは、定義された型の任意の数の入力要素と共に任意のフォームのフォーム送信をハンドリング可能である。
【0056】
サーチページは、サーチ条件としての1つまたは複数のデータ入力要素、および、サーチ結果を表示するための2次元データグリッドを包含する。データグリッドのそれぞれの列は命名可能である。データサーチの送信について、バックエンドに送られるJSONデータメッセージは、2つの部分、つまり、以下に示されるような空の2次元配列部分のサーチ条件部分およびデータグリッド部分を有する。
{
{“input”:{
{“name1”: “value1”},
{“name2”: {
{“Max”: {“value”: “v2”, “EQUAL”: “true”}},
{“Min”: {“value”: “v3”, “EQUAL”: “false”}}
} },

},
{“output”: {
[[{name4:0}, {name5:0},…]]
}}
}
ここで、name2は範囲値入力を指定し、EQUALは、trueが<=pr>=を意味し、falseが<or>を意味する。
【0057】
サーチ条件部分は、命名されかつマーキングされた型とすることができ、ADDのフォームと同じようにパッケージングされる。
【0058】
バックエンドの1つの実施形態は、データ記憶域としてリレーショナルデータベースを選定することであり、データメッセージの間で送受信されるデータメッセージはJSONフォーマットである。リレーショナルデータベースと相互作用する必要があるPFについて、データベーススキーマ名が使用される必要がある。データベーススキーマ名に対応するデータメッセージにおける名前を機能させるために、これらの名前はデータベーススキーマ名に変換される。テーブルの列名はtableName.columnNameのフォームである。単一のテーブルにおける挿入をハンドリングするPFは、以下のようにCGDMによって実装可能である。
{“input”: {
{“column1”: “table1.column1”},
{“column2”: “table1.Column2” },
{“column3”, “table1.Column3” },

} }
【0059】
1つのテーブルに挿入するために、それぞれの列はSQL挿入ステートメントによって同じように扱われるため、1つの型のデータがある。かかる挿入をハンドリングするCGDMは以下になる。
{ input: {
{“table1.column1”, “”},
{ “table1.Column2”, “” },
{ “table1.Column3”, “” },

}}
【0060】
マスター/詳細テーブルに挿入するために、CGDMは以下になる。
{“input”: {
{“Master”: {
{ “table1.column1”: “”},
{ “table1.Column2”:“”},
{ “table1.Column3”: “”}

}}
{ “Detail”: {
[{“table2.column1”: “”},
{ “table2.Column2”: “” },
{ “table2.Column3”: “” },…] }}
}}
ここで、CGDMは、マスターテーブルのデータ、および、詳細テーブルのデータの配列を含む。
【0061】
1つのテーブルへの更新をハンドリングするPFは以下のようにCGDMを有する。
{“input”: {
“primarykey”: {
{ “table1.column1”: “”},
{ “table1.Column2”: “”},

}
},
{“values”: {
{ “table1.Column3”: “” },
{ “table1.Column4”: “”},

}}
}
【0062】
マスター/詳細テーブルへの更新をハンドリングするPFは以下のようにCGDMを有する。
{“input”:{{“m_Primarykey”: {
{ “table1.column1”: “”},
{ “table1.Column2”: “”},

}
},
{“m_values”: {
{ “table1.Column3”: “”},
{ “table1.Column4”: “”},

}
},
{“d_Primarykey”: {
{ “table2.column1”: “”},
{ “table2.Column2”: “”}

}
},
{“d_values”: {
{ “table2.column3”: “”},
{ “table2.Column4”: “”}

}
},
{“d_data”: {
[{“table2.column1”: “”},{ “table2.Column2”: “”},…,
{ “table2.Column3”: “”},{ “table2.Column3”: “”}…]
}
}}
}
【0063】
以下の例について、SQL選択ステートメントが、[F:順序セクション]による[E:アグリゲーション条件]順序を有する[D:アグリゲーションセクション]によって[C:条件セクション]がグループ分けする場合の[B:テーブルセクション]からの[A:出力セクション]の選択などのフォームを取ると仮定する。この入力および出力に対するデータは6つのセクションに分割される。セクションAが、セクションBに現れるテーブルの列またはセクションBに現れるテーブルの列に対するSQL関数を包含し、セクションBがテーブルおよび結合関係を包含し、セクションCが、同じ関係における、column=value or column>(=)value or column<(=)value、column LIKE value SQLFunction(column)のフォームの条件を包含し、セクションEがSQLAggregateFunction(column)=or<(=)or>(=)valuesを包含し、セクションFが列を包含すると仮定する。
【0064】
セクションBにおいて必要とされるテーブルおよびそれらの結合関係情報は、データベースのスキーマから取得可能であるが、結合型情報はアプリケーションから生じるものとする。この選択ステートメントを実装するPFのCGDMにおける2つのテーブルの間の関係を表すための配列構造が選定できる。この選択ステートメントのCGDMは以下になる。
{{“input”:
{{“requirement”: {
[{ “tableA.column8”: “tableA.column8”},
{ “total1”: { “tableB.column4”:
{
“FUNC”: “SUM”
}}
},
…]}
},
{“table”: {
{[ “tableA”, “tableB”, “joinType”, “tableA.column1= tableB.column2”, “tableA.column3= tableB.column4”, …],
[ “tableC”, “tableD”, “joinType”, “tableC.column1= tableD.column2”, “tableC.column3= tableD.column4”, …],
…}}
},
{“condition”: {
{ “tableA.column5”: “v1”}, //default to tableA.column5=v1
{ “tableB.column1”: {
“value”: “v2”, //default to SUM(tableB.column1)=v2
“FUNC”: “SUM”
}
},
…}
},
{“groupby”: [
“tableA.column6”,
{ “tableB.column2”: {
“FUNC”: “DATE”
}
},
…]
},
{“having”: {
{ “tableB.column3”: {
“value”: “v3”,
“FUNC”: “MAX”
}
},
…}
},
{“orderby”: [
“tableA.column7”,
…]
}
}},
{“output”:
{“results”:
[{ “tableA.column8”: ‘’},
{ “total1”: ‘’},
…]}
}}
【0065】
入力要件は、SQL選択のセクションAに対応しており、かつ、SQL選択の出力を指定する。該要件は、配列フォーマットを指定する。{“tableA.column8”:“tableA.column8”}は、tableA.column8の値を得ること、および「tableA.column8」という名前に設定することを意味する。ペアの、
{ “total1”: { “tableB.column4”:
{
“FUNC”: “SUM”
}}
}
は、SUM関数列、tableB.column4を適用し、かつ、値を「total1」という名前に適用することを意味する。
【0066】
2つ以上のPFを使用してバックエンド計算タスクを達成する実装について、図10に示されるように、販売注文の出荷を演算する場合を検討する。販売注文は、(部分払いまたは在庫品の制約のため)一部出荷可能であると仮定すると、販売注文は2回以上出荷される必要がある場合がある。着信するCGDMは以下になる。
{ “Order_Shipment_Data” :
{“input”: {
{“orderID”, “value1”}
}},
{“output”: {
{“order_info”: {
{“orderCode”:””}
{“salesmanName”:””},
{“customerName”:””}
}},
{“order_prod_info”: {
[[{“productName”:””}, {“productionDate”:””},
{“Quantity”:””},{“shippedQuantity”:””},{“quantityLeft”:””}]]
}}
}}
}
【0067】
入力は注文idであり、必要とされる出力は、いくつかの注文情報、注文コード、販売員名およびカスタマ名、ならびに、製品情報、製品名、製造日、注文量、出荷量、および出荷される残りの量のリストを含む。
【0068】
図10では、CGDMは、DataExpander PF10によって受信される。DataExpander PF10は、リレーショナルデータセット12に接続する。CGDMのためにWNSM100をマッピングする、機能させる名前空間は、以下になる。
{
{“orderID”, “order.id”};
{ “orderCode”, “order.code”}
{ “salesmanName”, “employee.name” }
{“customerName”, “customer.name”}
{“productName”, “product.name”}
{“productionDate”, “product.productionDate”}
{ “Quantity”, “order.Quantity” }
}
【0069】
マッピング後、CGDMは以下のようになる。
{ “Order_Shipment_Data” :
{“input”:
{“order.id”, “value1”}
},
{“output”: {
{“order_info”: {
{“order.code”: “”}
{“employee.name”: “”},
{“customer.name”: “”}
}},
{“order_prod_info”: {
[[{“product.name”: “”}, {“product.productionDate”: “”},
{“order.Quantity”: “”},{“shippedQuantity”: “”},{“quantityLeft”: “”}]]
}}
}}
}
【0070】
PF10は、SelectおよびPackerという2つのCFを有する。Select CFは、3つのインスタンス、102、104、および106を作動させる。Packer CFは1つのインスタンス108を作動させる。Selectは、リレーショナルデータベースに対して上の例の型SQL選択を行い、Packer CFは、この入力全てを、データメッセージ(例えば、CGDM)の対応する入力部分および出力部分にパッケージングし、データメッセージをLoopPF14に送る。PF14は、入力として配列AおよびBを取る1つのインスタンスを作動させる、KeyMatchLoopと呼ばれる1つのCFを有し、配列Cを出力する。A、B、およびCにおけるそれぞれの要素は、キー部分および値部分を有する。要素のキーは、名前/値のシーケンスである。2つのキーは、2つのキーの名前値シーケンスの長さが同じである場合同じ型であり、シーケンスのそれぞれの位置の2つの名前/値ペアについて、名前は同じである。2つのキーは、同じ型を有しかつ対応する名前の値が等しい場合、等しい。AおよびBは同じ型のキーを有する。KeyMatchLoopのアルゴリズムは以下になる。
For each element a of A
Create an element c with key part same as a
if there is an element b of B with a.key==b.key {
value part of c is computed from value parts of a
and b by computation rule1.
}
else {
value part of c is computed from value parts of a
and b by computation rule2.
}
add c to
【0071】
計算規則1および計算規則2は、Calculator PF16によって行われる。PF16は、3つの計算、Equal、Zero、およびMinusを有する。PF10に対するOrder_Shipment_DataのCGDMは以下になる。
{“Order_Shipment”:
{“Select.order”:
{
{ “input”: {
{ “requirement”: {
{“order.code”: “order.code”}
{“salesman.name”: “salesman.name”},
{“customer.name”: “customer.name”}
}},
{ “condition” : {
{“order.id”, “Order_Shipment_Data.input.‘order.id’” }
}},
{ “table” : {
{[“order”, “salesman”, “inner join”, “order.salesmanID=salesman.id”],
[“order”, “customer”, “inner join”, “order.customerID=customer.id”]}
}}
}},
{ “output”:
{ “result”: “Order_Shipment_Data.output.order_info”}
}}
}},

{“Select.orderProduct”:
{
{ “input”: {
{ “requirement”: {
[{“product.name”: “product.name”},
{“production.date”: “production.date”},
{“order_product.quantity”: “order_product.quantity”}]
}},
{ “condition” : {
{“order_product.orderId”,
“Order_Shipment_Data.input.‘order.id’” }
}},
{ “table” : {
[“order_product”, “product”, “inner join”,
“order_product.productId=production.id”]
}}
}},
{ “output”: {
“result”: “”}
}}
}}

{“Select.shipped”:
{
{ “input”: {
{ “requirement”: {
{“product.name”: “product.name”},
{“production.date”:“production.date”},
{“shippedQuantity”: {“shipment.Quantity”:
{
“FUNC”: “SUM”
}}
}
}},
{ “condition” : {
{“shipment.orderid”,“Order_Shipment_Data.input.‘order.id’” }
}},
{ “table” : {
[“shipment”, “product”, “inner join”, “shipment.productID=product.id”]
}}
{ “aggregate” : {
[“product.name”, “product.productiondate”]
}}
}},
{ “output”:
{ “result”: “”}
}
}}

{“packer”: {
{“input”: {
{“In”:
{
{“A”: “Select.orderProduct.output.Result”},
{“B”: “Select.shipped.output.Result”}
}},
{“Out”: {{“C”: “Order_Shipment_Data.output.order_prod_info”}}}
}},
{“output”: {
{“result” : “Order_Shipment_Data.output.order_prod_info”}
}}
}}
}
【0072】
データメッセージ、Order_Shipment_Dataの出力部分のorder_prod_infoは、PF10がPF14に送るデータメッセージの出力部分を生成するための入力として使用される。PF10は、データメッセージ、Order_Shipment_Data_FullをPF14に送る。
{“Order_Shipment_Data_Full”: {
{“input”: {
{“A”: [[{“product.name”: “v1”}, {“product.productionDate”: “v2”},
{“order_product.quantity”: “v3”}]]},
{“B”: [[{“product.Name”: “v4”}, {“product.productionDate”: “v5”},
{“shippedQuantity”: “v6”}]]}
}},
{“output”: {
{“C”: [[{“product.Name”: “”}, {“product.productionDate”: “”},
{“order.Quantity”: “”},{“shippedQuantity”: “”},{“quantityLeft”: “”}]]}
}}
}
}
【0073】
PF14に対するデータメッセージ、Order_Shipment_Data_FullのCGDMは以下になる。
{“Loop”:{
{“input”: {
{“A”:
[“Order_Shipment_Data_full.Input.A”,
{“key”:[“product.name”, “product.productionDate”]},
{“value”:{{“shippedQuantity” } }]
},
{“B”:
[“Order_Shipment_Data_full.Input.B”,
{“key”:[“product.name”, “product.productionDate”]},
{“value”:{{“order_product.quantity”} }]
},
{ “C”:
[“Order_Shipment_Data_full.output.C”,
{“key”:[“product.name”, “product.productionDate”]},
{“value”:{{“order_product.quantity”},{“shippedQuantity”},{“quantityLeft”}}]
}
}},
{“output”:
{ “result”: “Order_Shipment_Data_full.output.C”}
}
}
}
【0074】
PF14はPF16に2つのデータメッセージを送る。
{“Order_data”: {
{“input”: {
{“A”:{“order_product.quantity”: “v1”}}
}},
{“output”: {
{“C”:{{“order_product.Quantity”: “”},{“shippedQuantity”: “”},{“quantityLeft”: “”}}}
}}
}
}

{“Order_Ship_data”: {
{“input”: {
{“A”: {“order_product.quantity”: “v1”}},
{“B”: {“shippedQuantity”: “v2”}}
}
{“output”: {
{“C”: {{“order_product.quantity”: “”},{“shippedQuantity”: “”},{“quantityLeft”: “”}}}
}}
}
}
【0075】
Order_Ship_dataについてのCGDMは以下になる。
{“Order_Ship_Data”: {
{“Equal.quantity”: {
{“input”: {
“X”:“A.order_product.quantity”
}},
{“output”: {
“Y”: “C.order_product.quantity” //Y=X
}}
}
},
{“Equal.quantityLeft”: {
{“input”: {
“X”:“A.order_product.quantity”
}},
{“output”: {
“Y”:“C.quantityLeft”
}}
}
}
{“Zero”: {
{“output”: {
“X”:“C.shippedQuantity” //X=0
}}
}
}
}}
【0076】
Order_dataについてのCGDMは以下になる。
{“Order_Data”: {
{“Equal.quantity”: {
{“input”: {
“X”:“A.order_product.quantity”
}},
{“output”: {
“Y”: “C.order_product.quantity”
}}
}
},
{“Equal.shippedQuantity”: {
{“input”: {
“X”:“B.shippedQuantity”
}},
{“output”: {
“Y”:“C.shippedQuantity”
}}
}
},
{“Minus”: {
{“input”: {
{“X”:“A.order_product.quantity”},
{“Y”:“B.shippedQuantity”}
}},
{“output”: {
“Z”:“C.quantityLeft” //Z=X-Y
}}
}
}
}}
【0077】
データメッセージ、Order_Shipment_Dataの出力部分は、CFインスタンス106およびCFインスタンス108の出力部分によって形成される。そして、着信するデータメッセージ、Order_Shipment_Dataの機能させる名前空間に逆にマッピングでき、Order_Shipment_Dataの送信者に送ることができる。
【0078】
本発明の例示の実施形態は、CGDMのマークアップおよびプロパティシートを利用する。この実施形態は線形カスケードに関して以下に論じられるが、本発明はデータのいずれの特定の編成にも限定されない。線形カスケードは<select>要素のリストであり、これは、第1の要素から始まって最終の要素を除いたものであり、1つの<select>要素の選択された値が該リストにおける次の<select>のオプションを判断する。
【0079】
線形カスケード入力の1つの例はCountry−State−City入力であり、これによって、ユーザはCountryのオプションから国を選択でき、Stateのオプションを判断し、ユーザはStateのオプションから州を選択でき、Cityのオプションを判断する。ブラウザの実装形態において、County、State、およびCityはそれぞれ、<select>要素によって表される。Countryに対するイベントハンドラはCounty<select>要素にアタッチされ、Stateに対するイベントハンドラはState<select>要素にアタッチされる。例えば、「米国」などの国が選択される時、Countryのイベントハンドラは呼び出され、このイベントハンドラは「米国」の値を得て、{Country=“USA”、State[]}のメッセージを作成し、このメッセージをバックエンドプロセスに送って「米国」の全ての州を得て、State[]における値を記憶する。State[]の値は次いで、Stateを表す<select>に設定される。StateおよびCityに対するイベントハンドラは同様である。
【0080】
本発明の一実施形態では、カスケードはリストとしてデータ構造によって表され、この場合、リストのそれぞれの要素は5つのメンバ、すなわち、ID、Next、SelectedValue、eventHandler、およびOptionsを有する。IDは要素の名前を保持し、Nextはリストの次の要素のNameの値を有し、SelectedValueは選択された値を保持し、eventHandlerは要素のイベントハンドラ関数を保持し、Optionsは値のセットを保持する。Optionsから値を選択し、かつSelectedValueを設定するアクションは、リストの要素に対して行われ得る。アクションを終えると、eventHandlerにおける関数は引数として要素を渡すことによって呼び出される。
【0081】
IDは任意の名前を取ることができるため、アルゴリズムは抽象的である。これらは、Country、State、City、またはCompany、Department、Employee Name、またはCategory、Type、Product Nameとすることができる。アルゴリズムは、任意の数の要素が可能とされるため、一般化される。
【0082】
次に、リスト構造はHTML上でマーキングされる。IDおよびNextを除いて、<select>要素は他全てを有する。ここでのCGDMの定義において、それぞれの値は名前を有するものとするため、CGDM上では、Nextのみが必要とされる。値の名前が、IDプロパティをHTMLタグの全ての要素に加えることによって実装されると仮定する。
【0083】
カスケードのマークアップ規則は、それぞれの<select>要素に対してNextプロパティを加えるためのものであり、この値はカスケードにおける次の<select>のIDの値である。1つのHTMLページにおける2つ以上のカスケードが可能である。
【0084】
一般に、マークアップ規則は、アルゴリズムの任意の入力インスタンスに対して、これに対応する拡張コンテンツがあり、かつ、入力インスタンスおよびこの全データ特徴が拡張コンテンツから演繹できるように、CGDMの横文規則を使用してCGDMのコンテンツを拡張するための規則として定義される。マークアップ規則はアルゴリズムに関連付けられる。
【0085】
PF関数は、異なるカスケードにおいてさえも、全ての<select>要素に対する選択イベントのイベントハンドラであってよい。この例では、PFにはcascadePFという名前が与えられる。cascadePFの入力は、選択された値、およびイベントを生成する<select>要素である。HTML全体のドキュメントオブジェクトモデル(DOM)構造はまた、cascadePFにアクセス可能である。PFのCGDMは、CGDM={{the selected <select> element}、DOM}と見なすことができ、入力部分は、{{the selected <select> element}、{All <select> element of the cascade}}であり、出力部分は、{{the next element of the selected <select> element}}である。
【0086】
全てのカスケードは、種々のHTMLページにおいてさえも、同じcascadePFを使用し、また、同じCGDM名を使用できるため、cascadePFのVMSSストアはいずれのルックアップに対しても1つのVMSSを返すように構成可能である。cascadePFの例示のCF関数は、initRestElement(CurrentElementName名)であり、これは、ID=nameの現在の要素について、次の要素から最後の要素まで全てに対するオプションを再設定し、Results r=getValuesFromBackend(Condition condition、Results r、BackendProc p、CGDMNamepCGDMName)、これは、CGDMをパッケージングし、バックエンドプロセスpを呼び出し、pCGDMNameという名前のCGDMを渡し、setOption(Results r)とする、つまり、ID=r.nameの<select>のオプションを設定する。CGDMは次のフォーマットを有する。
{pCGDMName: {
{Input: {Condition:{name:value}}}, {Output:{Results:{r:NULL}}
}
【0087】
cascadePFは<select>要素全てに対して使用できるため、PFが受信する、選択された<select>要素は、異なる<select>要素に対して選択が行われる時、異なる。そのため、直接可変マッピング(VM)は不可能である。しかしながら、CFの引数はマークアップおよびCGDMから演繹可能である。これを規則ベースのVM(RBVM)と呼ぶ。
【0088】
バックエンドにおいて、handleDBSeletionと呼ばれるPFを有することができ、これは、設定されたSQL選択実装形態を包含する。通常、<select>に対するオプションの値は、SQL選択を作動させることによって取得可能である。cascadeOptionsCGDMをCGDMの名前として割り当て、getValuesFromBackendはhandleDBSelectionに渡される。
【0089】
RBVMを使用して、PFに対するVMSSは以下になる。
{initRestElement: RBVM}
{getValuesFromBackend: {{condition: RBVM }, {r : RBVM }, {p: handleDBSelection },{pCGDMName: cascadeOptionsCGDM }}}
{ setOptions: { {r: getValuesFromBackend.r}}
【0090】
CFの呼び出し元は以下になる。
initRestElementCaller(RBVM, CGDM, CFResults)
{
name = get the ID’s value of the selected <select> element

initRestElement(name);
}
getValuesFromBackendCaller(RBVM, CGDM, CFResults)
{
(name, value) = get the ID’s value and the selected value of the selected
<select> element

name = get the ID’s value of the next element of the selected <select> element

r = getValuesFromBackend(value, name, handleDBSelection, cascadeOptionsCGDM);

add r to CFResults.
}
setOptionsCaller(RBVM, CGDM, CFResults)
{
r = get getValuesFromBackend.r from CFResults

setOptions(r);
}
【0091】
RBVMの利点は、新しいカスケードが加えられる時、またはカスケードの長さが延長される時、コードの規則処理部分が変更されないことである。選定したアルゴリズムが抽象的でありかつ一般化されるため、全てのカスケードは同じコードを使用できる。
【0092】
CFCallersの実装形態は、マークアップ規則による影響を受ける。CFの新しいCFCallerはマークアップ規則に対して開発される必要がある。マークアップ規則に起因して、CFは2つ以上のCFCallerを有することができる。
【0093】
マークアップは、相互参照としてCGDMの値の名前を使用して、等しいまたはより表現的な横文規則を有する別個のメッセージに対して行われ得る。別個のマークアップメッセージを、CGDMのプロパティシート(PS)と呼ぶ。いずれのCGDMもこれにアタッチするPSを有することができる。開発時間において、CGDMの名前インスタンス(NI)が既知であるため、PSは開発時間にCGDMにアタッチできる。
【0094】
本発明の例示の実施形態を説明したが、本発明は、開示された実施形態に限定されず、本開示の趣旨および範囲内に含まれるさまざまな修正および等価の配置構成に及ぶことが意図されることは、理解されたい。

図1
図2
図3
図4
図5
図6
図7
図8
図9
図10
【手続補正書】
【提出日】2020年10月13日
【手続補正1】
【補正対象書類名】明細書
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【発明の詳細な説明】
【技術分野】
【0001】
関連出願の相互参照
本願は、2015年7月16日に出願された米国特許仮出願第62/193,151号に対する優先権を主張するものである。
【0002】
本開示は、一般的に、コンポーネントベースのソフトウェア開発技法に関する。
【背景技術】
【0003】
手続き型プログラミングは、手続き呼び出しの概念に基づいて、構造化プログラミングから派生したプログラミングパラダイムである。手続きは、ルーチン、サブルーチン、または関数としても知られ、実行される一連の計算ステップを含む。手続き型プログラミング言語の例は、C、フォートラン、およびパスカルを含む。
【0004】
オブジェクト指向プログラミングではプログラミングタスクを、インターフェースを使用して動作(メソッド)およびデータ(メンバまたは属性)を明らかにするオブジェクトに分解することに重点を置いている。一方、手続き型プログラミングは、データ構造に対して演算するために手続きを使用するが、オブジェクト指向プログラミングは、この2つをひとまとめにするため、クラスのインスタンスである「オブジェクト」は、それ「自体の」データ構造を演算する。
【0005】
しかしながら、素人にとって、手続き型プログラミングまたはオブジェクト指向プログラミングを使用して、実用的なコンピュータプログラムを書くことは、困難である可能性がある。
【0006】
組み立てラインは、半製品の組立品がワークステーション間で移動する際に、交換可能部品が追加される製造プロセスであり、最終組立品が製造されるまで部品が順に追加される。組み立てラインを使用することによって、完成品より速くかつより少ない労力で組み立てることができる。
【発明の概要】
【発明が解決しようとする課題】
【0007】
したがって、ソフトウェアを組み立てライン方式で構築できるようにする、コンポーネントまたは部分ベースの機構が必要とされている。
【課題を解決するための手段】
【0008】
本発明の例示的な実施形態によると、サービスを実行するためにコンピュータコードを組み立てる方法が提供される。この方法は、以下を含む。サービスの入力/出力(I/O)要件を複数のI/Oキー値のペアを含む対応するデータメッセージに変換する入力引数としてデータメッセージを受信するようにプログラムの部分関数(PF)を構成する。計算関数(CF)の引数、および、I/Oキーペア、にマップするキーペアを含む可変マッチング構造(VMS)セット(VMSS)を生成する。VMSSを使用して計算関数(CF)を呼び出すようにPFを構成する。ここで、CFは、サービスに関連している操作を実行するように構成されている
【0009】
本発明の例示的な実施形態によると、サービスを実行するように構成されコンピュータプログラムを実行する方法が提供される。コンピュータプログラムは、入力引数として複数の入力/出力(I/O)キーペアを含むデータメッセージを受信するように構成され部分関数(PF)を含む。この方法は、以下を含む。データメッセージの名前を使用して複数の要素を含むデータ構造を検索する。このとき各要素は、名前および可変マッチング構造(VMS)を含む。検索されたデータ構造内のそれぞれの要素について、要素の名前を使用して計算関数(CF)を検索し、かつ要素のVMSおよびデータメッセージを使用して検索されたCFを呼び出す。
【0010】
本発明の例示の実施形態は、添付の図面と併せて、下記の説明からより詳細に理解可能である。
【図面の簡単な説明】
【0011】
図1】本発明概念の例示の実施形態に従ってソフトウェアを組み立てる方法を示す図である。
図2この方法を実行するために使用可能である例示のコンピュータシステムを示す図である。
図3】本発明概念の例示の実施形態に従ってソフトウェアの部分関数を構成する方法を示す図である。
図4】本発明概念の例示の実施形態に従ってソフトウェアの部分関数を実行する方法を示す図である。
図5】本発明概念の例示の実施形態に従ってソフトウェアを組み立てる方法を示す図である。
図6】本発明概念の例示の実施形態において(A)は、使用可能である例示のデータメッセージを示す図、(B)は、使用可能である例示の可変マッチング構造セットを示す図、(C)は、例示の計算関数の入力引数および出力引数の例を示す図である。
図7】本発明概念の例示の実施形態に従って、組み立てられたソフトウェアの部分関数の実行を示すフロー図である。
図8】本発明概念の例示の実施形態に従って、ユーザがソフトウェアを組み立てることができるようにする方法を示す図である。
図9】本発明概念の例示の実施形態に従って部分関数を実行する方法を示す図である。
図10】本発明概念の例示の実施形態に従って、適用されたデータメッセージに応答して実行される部分関数の例示のシーケンスを示す図である。
【発明を実施するための形態】
【0012】
本発明概念は、本開示の例示的な実施形態が示されている添付の図面を参照して、より詳細に説明される。図面全体を通して、同じまたは同様の参照番号は、同じまたは同様のコンポーネントを表すために使用される。しかしながら、本発明概念は、さまざまなやり方で実装可能であるため、本明細書に開示される実施形態に限定されると理解されるべきではない。むしろ、これらの実施形態は、当業者に本開示の範囲を伝えるために、本開示を完全かつ完璧な理解のために提供される。
【0013】
本明細書は、コンポーネントベースのソフトウェアシステムおよび開発方法について説明する。下記の説明では、本発明をより完全に理解してもらうために、多数の具体的な詳細が示される。しかしながら、本発明が、これらの具体的な詳細を用いずに実施可能であることは、当業者には明らかであろう。他の例では、本発明を不明瞭にすることを回避するために、周知の特徴は詳細説明されていない。
【0014】
本明細書において参照されるコンピュータコードデバイス(例えば、メソッド、クラス、ライブラリ)は、データ記憶媒体に記憶することができる。本明細書において使用され「データ記憶媒体」と言う用語は、コンパクトディスク、ハードディスク、フロッピーディスク、テープ、光磁気ディスク、PROM(EPROM、EEPROM、フラッシュEPROMなど)、DRAM、およびSRAMなどの全てのコンピュータ可読媒体を意味する
【0015】
図1は、本発明概念の例示的な実施形態によるソフトウェアを組み立てる方法を示す高レベルダイアグラムである。
【0016】
この方法は、ユーザが、計算関数(CF)をコード化できるようにするステップ(S101)を含む。例えば、テキストフィールドを含むCFグラフィカルユーザインターフェース(例えば、CF−GUI)は、ユーザがCFのコードを入力できるようにするコンピュータプログラムによって提供可能である。例えば、CF−GUIは、ユーザによって選択される、ユーザが現在のCFのコード化を完了したことをプログラムに通知する第1のボタンを含む。例として、CFは、計算を実行する、データベースへのクエリを行う、または、ウェブページ上にグラフィックまたはテキストを表示する、ようにコード化される。例えば、計算の実行は、クエリによって返された結果に対して数学的計算を実行することができる。一実施形態では、それぞれのCFは、ユーザによって一意の名前が与えられ、かつ、1つまたは複数の入力パラメータ(本明細書ではCF入力パラメータと呼ばれる)を受け取り、出力パラメータ(本明細書ではCF出力パラメータと呼ばれる)を返すようにコード化される。例えば、CF入力パラメータおよびCF出力パラメータは、整数、浮動小数、文字列、配列、ポインタなどである
【0017】
この方法は、次いで、ユーザがCFをコード化し終えたかどうかを判断するステップ(S102)を含む。例えば、第1のボタン選択すると、ユーザ別のCFを作成することを所望していることを示すことができる。例えば、CF−GUIは、ユーザによって選択されると、ユーザがCF50を作成し終えたことをプログラムに通知する第2のボタンを含む。完成したCFは、他のコーダーによって利用できるように、CFデータベース60に記憶される。
【0018】
この方法は、次に、ユーザが、利用可能なCFの1つまたは複数を使用して部分関数(PF)をコード化できるようにするステップ(S103)含む。例えば、プログラムは、第2のGUI(例えば、PF−GUI)を表示することにより、GUI内のCFデータベース60に記憶された利用可能なCFの選択可能なリストを表示するとともに、選択されたCFと、PF内のそれらの実行順序とを示すペインを表示する。例えば、ユーザは、対応するPFに対応するCFのインスタンスが必要になる度に、利用可能なCFのうちの1つを選択し選択したインスタンスを、ユーザがCFインスタンスの実行を望む順序でペインに挿入することができる。
【0019】
この方法は次に、ユーザが全てのPFを作成し終えた時点をプログラムが判断するステップ(S104を含む。例えば、PF−GUIは、ユーザによって選択されると、ユーザが全てのPF70を作成し終えたことを示すグラフィカルボタンを含む。PF70は、他のコーダーが利用できるように、PFデータベース80に記憶される。
【0020】
この方法は次いでPFデータベース80に記憶される利用可能なPF70の1つまたは複数を使用してユーザがソフトウェアを作成できるようにするステップ(S105)のためのプログラムを含む。例えば、コンピュータプログラムを使用して、ユーザが接続コードおよび利用可能なPF70の選択可能なリスト入力できるようにするテキストフィールドを表示する第3のGUIを起動する。例えば、ユーザは、対応するPFを、コンピュータプログラムの接続コード特定の場所に挿入するためにPFをリストから選択する。一実施形態では、コンピュータプログラムは、インタープリタによって解釈されるフォームであってよい。
【0021】
図2は、図1の方法を実行するために使用可能例示的なコンピュータシステム1000を示す。図2を参照すると、コンピュータシステム1000は、例えば、中央処理装置(CPU)1001、ランダムアクセスメモリ(RAM)1004、プリンタインターフェース1010、ディスプレイユニット1011、ローカルエリアネットワーク(LAN)データ伝送コントローラ1005、LANインターフェース1006、ネットワークコントローラ1003、内部バス1002、および例えばキーボード、マウス等の1つまたは複数の入力デバイス1009含む。図示されるように、システム1000は、リンク1007を介してデータ記憶デバイス、例えばハードディスク1008接続してもよい。上述されたGUIはディスプレイユニット1011上に表示可能である。上述されたCF50、PF70、プログラム、および、組み立てられたソフトウェアは、メモリ1004および/またはハードディスク1008に記憶される。
【0022】
図3は、PFをコード化する図1のステップS103を実行する本発明の例示的な実施形態による方法を示す。図3を参照すると、この方法は、計算目標データメッセージ(CGDM)の入力を受信するように部分関数を構成するステップ(S301)を含む。
【0023】
例示的な実施形態では、CGDMは、i)入力および出力部分、ii)名前フォーム(例えば、全ての値、および、後の計算において変数に割り当てられる値のサブ構造は、名前を有す)、および、iii)いくつかの構文規則(例えば、HTML、XML、またはJSON)に従った構造、を有する。2つのCGDMは、i)れらの入力および出力部分の両方が同じ構造を有し、かつii)該構造内の全ての名前が同じである場合、同じである。CGDMは、PFの引数として使用される。いずれのPFもを一つだけ持つことができる。PFは、1つまたは2つ以上のCGDMを処理できる。それぞれのCGDMは対応するVMSSを有する。VMSSは、CGDMの計算目標をどのように達成するかをPFに命令する。
【0024】
全てのPFは同じインターフェースを有する。例えば、それぞれの部分関数はCGDMで起動されるように構成される。CGDMは、部分関数の起動パラメータまたは引数と呼ばれる。CGDMは、入力パラメータX(例えば、入力:X)、および出力パラメータY(例えば、出力:Y)を含む。この場合、XおよびYは名前(キー)フォームを有する任意のデータ構造である。X部分において、名前は値を有し、Y部分の値は、部分関数によって埋められるように空白になっている。2つのCGDMは、入力部分および出力部分の両方が同じ構造を持ち、かつ該構造における全ての名前(キー)が同じである場合、同じである。それぞれのCGDMは、一意の名前を有する。この入力部分セットの全ての名前(キー)の値を有するCGDMは、CGDMのインスタンスと呼ばれる。PFは、値が埋められたCGDMの出力部分と同じデータ構造を返す。PFは、任意のCGDMを引数として受け入れる。
【0025】
PFは1つまたは複数の計算関数(CF)を包含する。任意の関数CFとすることができる。PFがCFを実行する方法は、CGDMだけでなく、可変マッチング構造(VMS)と呼ばれるデータ構造によっても決定されるため、PFは、いずれのCGDMも引数として受け入れ可能である。PFはCF呼び出し元を通してCFを実行する。CF呼び出し元は、引数として、CGDM、VMS、およびCFResults構造体を受け入れる。PFが呼び出すために、統一されたインターフェースが与えられる。CF呼び出し元は、i)CGDMおよびVMSに従ってCFおよび呼び出しの引数を準備し、ii)CGDMおよびVMSに従ってCGDMの出力部分を設定し、iii)後のCFの実行による使用を可能にするために、結果をCFResultsに保存する。
【0026】
本発明の一実施形態では、2つの型のCF関数が存在してもよい、i)完全CFと、ii)部分CFである。完全CFは、PFを呼び出さず、インターフェース要件は完全に完了している。部分CFはPFを呼び出し、インターフェース要件は、部分的に終わっている。インターフェース要件がどのように実行されるかは、どのPFが呼び出されるか、およびPFが何を行うように構成されているかに依る
【0027】
CFがPFを呼び出す時、CGDMを準備し、かつ、引数としてのCGDMを呼び出したPFに渡す。CGDMにおける値の命名は、一貫した命名規則に従。CFが呼び出すPFの名前、およびCFが作成するCGDMの名前は、CFのVMSにおいて指定可能である。
【0028】
VMSSはCFを接続する制御を行い、部分CFはPFを接続する制御を行う。ソフトウェアは、特定の設計に従って、PFおよびCFを接続するためにVMSおよびVMSSを操作することによって形成可能である。
【0029】
1つのCGDMについて、全てのPF(2つ以上のPFを伴う場合がある)およびCFの実行シーケンスを呼び出して、CGDMの計算構造の計算目標を達成する。
【0030】
図6Aは、部分関数に引数として渡されるCGDMの一例である。この例では、CGDMは、JavaScript(登録商標である)Object Notation(JSON)フォーマットを有する。CGDMは、1つまたは複数の入力キーペアおよび出力キーペアを含む。CGDMには、入力キーおよび出力キーペアを抽出するためにパーサーまたはインタープリタ使用できる識別子を含まれている場合がある
【0031】
図6Aに示される例において、CGDMにおける入力パラメータ識別子は「Input:」という名称が付けられ、出力パラメータ識別子は「Output:」という名称が付けられる。例えば、CGDMを構文解析するパーサーが「Input:」の識別子を認識後、パーサーは、次の左中括弧「{}と右中括弧「」」との間に位置する次の要素がキー値の入力パラメータのペアであるとみなすことができる。例えば、CGDMを構文解析するパーサーが「Output:」の識別子を認識後、パーサーは、次の左中括弧「{」と右中括弧「}」との間に位置する次の要素がキー出力パラメータペアであるとみなすすることができる。例えば、キーペアは、セミコロン「;」によって区切ることができ特定のキーペアのキーおよび値はコロン「:」によって区切ることができる
【0032】
図6Aは、入力パラメータキーペアを示すための「Input:」という用語の使用、出力パラメータキーペアを示すための「Output:」という用語の使用、キーペアの開始を示すための「{」という用語の使用、キーペアの終わりを示すための「}」という用語の使用、および、パーサーがキーと値とを区別できるようにするための「:」という用語の使用を示すが、本発明はこれらに限定されない。例えば、これらの用語は、作成者によって所望されるように、他の語または記号に変更されてよい。
【0033】
図3に戻って参照すると、この方法は、ユーザが計算関数(CF)の新しいインスタンスを呼び出すことを部分関数所望しているかどうかを判断するステップ(S302を含む。新しいインスタンス特定CFの挿入が初めてリクエストされたこと、または、リクエストされた挿入がCF(例えばCF2)のインスタンスを異なるCF(例えばCF1)の後に挿入させること、を意味する。説明を簡単にするために、図6Bに示されるような、第1の計算関数CF1および第2の計算関数CF2のみが利用可能であると仮定する。ユーザがCFの新しいインスタンスをリクエストしている場合、この方法は、特定のCFを識別するためにラベルを挿入する(S303)。例えば、ユーザ、第1の計算関数CF1が使用されることをリクエストしているため、この方法は、「CF1」などのラベルを可変マッチング構造シーケンス(VMSS)に挿入して、第1の計算関数CF1が呼び出されるように識別する。VMSSは、完成すると、ペアのシーケンスを含むことになり、この場合、それぞれのペアは所与のCF(例えば、CF1)およびVMS(例えば、CFName、VMS)の名前を含む。例えば、完成したVMSSは、{{CF1、VMS1}、…、{CFN、VMSN}}のペアを含むことができ、この場合Nは1またはそれ以上である。VMSSはCGDMに関連付けられ、VMSSにおける全てのVMSはCGDMの全ての名前キーの値を完全に埋める。すなわち、VMSSはCGDMの計算目標を満たす。つまり、VMSSは、PFに、CGDNの計算目標をどのように達成するかを命令する。
【0034】
次に、この方法は、CFインスタンスの入力パラメータをCGDM内の入力パラメータにマッピングし、かつ、CFインスタンスの出力パラメータをCGDM内の出力パラメータマッピングする可変マッチング構造(VMS)を、ユーザが構成できるようにするステップ(S304)含む。VMSは、PFに、1つのCFをどのように実行するかを命令する。
【0035】
例えば、図6Bは、それぞれのキーペアがセミコロン「;」で分離される複数のキーペアを有する第1のCF1 611のために構成される第1のVMS601の例を示す。例えば、第1のVMS601の第1のキーペア「a:x」における第1のキー「a」は、第1のCF1 611の第1の入力パラメータ「a」に対応し、第1のキーペア「a:x」における第2のキー「x」は図6Aに示されるCGDM600の第2の入力パラメータ「x:2」に対応する。例えば、第1のVMS601の第2のキーペア「b:y」における第1のキー「b」は第1のCF1 611の第2の入力パラメータ「b」に対応し、第2のキーペア「b:y」における第2のキー「y」は図6Aに示されるCGDM600の第3の入力パラメータ「y:3」に対応する。例えば、第1のVMS601の第3のキーペア「c:z」における第1のキー「c」は第1のCF1 611の出力パラメータ「c」に対応し、第3のキーペア「c:z」における第2のキー「z」は図6Aに示されるCGDM600の出力パラメータ「z:NULL」に対応する。図6Cは、CFに対する呼び出しの例を示す。CFの引数が複合型である場合、CGDMの入力部分において同じ複合型にマッピングされると、引数の名前がCであり、かつ同じ型(CGDMの入力部分のサブ構造)の名前がDであると仮定する場合に、マッピングは「C:D」と指定可能である。CGDMの入力部分における同じ複合型にマッピングされず、そのメンバがCGDMの入力部分において配布された名前にマッピングされる場合、複合型のそれぞれのメンバのマッピング指定する必要がある。複合型がTであり、かつCGDMの入力部分における名前がd1、d2、…であると仮定する場合、マッピングは「C、T(「member1:d1」、「member2:d2」…)」と指定可能である。Cが配列型である場合、マッピングは「C:Array[d1、d2、…]」と指定可能である。
【0036】
次に、この方法は、構成されたVMSを、部分関数CFに関連付けられたVMMSに挿入する(S305)。VMSは、識別されたCFに関連付けられていることをパーサーが認識できるように挿入される。例えば、ラべル「CF1」より下の図6Bに示される第1のVMS601は、PFがVMSSに挿入されておりかつ第1の計算関数CF1に関連付けられているように構成されるVMSの一例である。この方法は、次いで、ユーザが完了したかどうかを判定するステップ(S305)を含む。例えば、ユーザが計算関数(CF)を選択するためにGUIを用い、計算関数(CF)に入れ終わっていることを示すことができる。ユーザが別の計算関数(CF)、または、先に選択された計算関数(CF)の別のインスタンスを選択する場合にはこの方法はステップS302に進む。例えば、ユーザが同じCF(例えば、再びCF1)の別のインスタンスを入力し、CGDMの異なるパラメータをCFに送る場合この方法はステップS304に進むことになる。例えば、これによって、第1の計算関数CF1を識別する同じラベル(例えばCF1)の下第2のVMS602が挿入されることになる可能性がある。しかしながら、ユーザが新しい計算関数(例えば、CF2 612)を選択する場合、図6Bに示されるように、第2のラベル(例えばCF2)および第3のVMS603が挿入されることになる可能性がある。
【0037】
CGDMの入力から値を取ること以外に、CFの引数は、また、1つまたは複数の先に実行されたCFの結果から値を取ることができる。例えば、PFが第1のCFを実行する時、CFの実行の結果をPFの内部にあるデータ構造(例えば、CFResults構造)またはリストに記憶でき、それによって、PFが同じ第1のCFまたは第2のCFを再実行する場合、その結果は、対応するCFが必要に応じて該結果に基づいて演算できるように、どちらのCFにも利用可能である。図7に示されるように、PF701がPF呼び出しを通して呼び出される時、PF701はCFCaller関数を通してCFを実行する。CFCaller関数は、複数の利用可能なCFCaller関数を記憶する外部記憶領域702(例えば、CFCallerストア)からロードされてもよい。CFCaller関数は、入力として、CGDM、CFに関連付けられたVMSS703、およびCFResults構造704を受け取る。VMSS703は、外部記憶領域705(例えば、VMSSストア)からロードされてよい。CFCaller関数は、下記を行う。1)CFの引数を宣言し、かつVMSS703、CGDM、およびCFResults構造704内のCFResultsを使用してそれぞれの引数を初期化し、2)引数によってCFを実行し、3)その結果をCFResults構造704に加えて、VMSS703に従ってCGDMの出力(例えば、CGDM.output)を設定する。一実施形態では、それぞれのCFは、関連のCFCaller関数を有し、それぞれのCFは同じインターフェースを有する。VMSSストアは、PFが呼び出される全てのCGDMに対する全てのVMSSを包含する。CFCallストアは、PFが包含する全てのCFに関連付けられたCFCaller関数を包含する。
【0038】
図4は、本発明の例示的な実施形態に従って、受信されたCGDMのPF呼び出しを実行するための方法を示す。この方法は、CGResults構造704をクリアするステップ(S401)、CGDMの名前を使用してVMSSストア705から対応するVMSS703を検索するステップ(S402)、VMSS703におけるそれぞれの要素について、要素の名前部分を使用してCFCallerストア702からCFCaller関数を検索し、かつ要素のVMS部分、CGDM、およびCFResults構造704によって、検索されたCFCaller関数を呼び出すステップ(S403)、(この時値が埋められている)CGDMの出力をコピーするステップ(S404)、そのコピーを返すステップ(S405)と、を含む。
【0039】
CFは他のPFを呼び出すことができる。これを行う方法は、CGDMを作成し、かつ、引数として作成されたCGDMをこの呼び出しに渡す方法である。CFが、計算するCGDMにおける値を、作成するCGDMに渡す場合、CFは、計算するCGDMにあるのと同じ名前を使用する。CFが、CFResults構造704における値を、作成するCGDMに渡す場合、CFResults構造704にあるのと同じ名前を使用する。これは名前整合性規則と呼ばれる。CFが別のPFを呼び出すためのCGDMを作成する時、名前整合性規則に従うものとする。
【0040】
全てのPFが同じインターフェースを有するため、異なるPFを呼び出す際の違いは名前けである。PF名前引数は、呼び出すPF全てに対するCFに加えことが可能であり、その後、呼び出すPFはCFのVMSにおいて指定可能である。また、作成するCGDMの名前は、VMSにおいて指定可能である。そのため、CFが呼び出すのはどのPFか、および使用するCGDMの名前が何かについては、CFの開発後に決定可能である。
【0041】
一実施形態において、データ記憶パラメータの全ては、名前(キー)フォームである。データ記憶フォーマットは、CGDMと共に種々の構文規則を有することができる。
【0042】
データ記憶域およびCGDM内の名前は、異なるユーザよって異なる時間に作成される可能性があるため、矛盾する場合がある。名前値のセットは、セットにおける同じ名前が命名された値に対して同じ意味論的意味を記述し、かつ、セットにおける異なる名前が命名された値に対する異なる意味論的意味を記述する場合、整合性があると言われる。整合性のある名前値のセットは、名前空間(NS)を形成する。PFおよびこのCFは1つのNSにおいて演算する必要がある。CGDMおよびデータ記憶域が1つのNSない場合、変換をCGDMに適用して、それらを1つのNSに変換できる。1つのCGDMについて、CGDMの計算目標を達成するために全てのPFおよびCFの実行シーケンスが呼び出される。
【0043】
図5は、本発明の例示的な実施形態によるソフトウェア開発プロセスを示す。このプロセスは、ソフトウェアの全ての入力要件および出力要件をCGDMフォーマットに変換するステップ(S501)、その変換から生成されたそれぞれのCGDMの計算構造を設計し、マークアップ規則によってCGDMをマーキングし、必要に応じて新しいマークアップ規則を作成し、必要に応じて、プロパティシートを使用して新しいマークアップ規則によってCGDMをマーキングするステップ(S502)、設計された計算構造をサポートするようにデータ記憶域を設計するステップ(S503)、既存のPFおよび/またはCFを選択し、新しいマークアップ規則が加えられる場合、必要に応じて新しいPFおよび/またはCFを開発し、関わるCFに対して新しいCFCallerを開発するステップ(S504)、開発されたおよび/または選択されたPFならびにCFを接続するためにVMSおよびVMSSを作成するステップ(S505)を含む。
【0044】
一実施形態では、ステップS505は、入力部分の値、すなわち、CGDMの名前インスタンス(NI)なしでCGDMを呼び出すことによって実施される。NIは、入力部分および出力部分の両方に値のなCGDMである。一実施形態では、他のPFを呼び出すそれぞれのCFは開発モード(DV)処理を有する。DVにおいて、CGは、計算するCGDMのNIを取り、かつ、計算するCGDMに対して作成する全てのCGDMのNIを、(例えば、ファイルのような)持続的データ記憶域に出力する。出力されたNIは呼び出されたPFのCGDMのコンテンツを指定する。VMSおよびVMSSはそれに応じて作成可能である。
【0045】
図8は、本発明概念の例示の実施形態に従って、利用可能な部分関数(PF)の1つまたは複数を使用してソフトウェアを生成する方法を示す。この方法は、利用可能なPFからPFを選択するようにユーザにクエリを行うステップ(S801)と、入力名前(キー)ペアおよび出力キーペアを入力するようにユーザにクエリを行うステップ(S802)入力されたデータに基づいてCGDMをフォーマットするステップ(S803)と、入力引数としてフォーマットされたCGDMを使用してPF呼び出しを挿入するステップ(S804)、ユーザがPF呼び出しを完了したかどうかを判定するステップ(S805)を含む。ユーザが完了していない場合、この方法は、ステップS801に進み、新しいPFを選択するようにユーザにクエリを行う。ユーザが完了している場合、この方法は終了する。
【0046】
図9は、本発明の例示的な実施形態に従って、PF呼び出しを含むソフトウェアを解釈する方法を示す。この方法は、特定のPF、および、PF呼び出しに引数として渡されたCGDMを、識別するためにPF呼び出しを構文解析するステップ(S901)を含む。この方法は次いで、特定されたPFに関連付けられたVMSSをロードし、かつ、特定されたCGDM内の入力キーペアおよび出力キーペアを識別するステップ(S902)含む。この方法は、次いで、ロードされたVMSSの次の行を構文解析すステップ(S903)含む。この方法は次いで、構文解析された行がCFラベルを含むかどうかを判断する(S904)。例えば、次の行が図6Bに示されるVMSSの第1の行である場合、この方法は、CF1のCFラベルを識別したと結論付けることになる。CFラベルが識別されたと判断される場合、この方法は、判断されたCFラベルから呼び出すための特定のCFを識別し、かつ、VMSSの次の行をパースする。その後、この方法が、次の行がCFラベルでない(すなわち、次の行がVMSに対応する)と判断する場合、この方法は、VMSの現在のキーペアの第1のキーを特定されたCFの選択されたI/Oパラメータにマッチさせ、かつ、現在のキーペアの第2のキーを特定されたCGDMの選択されたI/Oキーにマッチさせる(S906)。例えば、VMS601がパースされ、かつ、パースされた現在のキーペアが「a:x」であり、特定されたCFがCF1 611である場合、方法は、現在のキーペア「a:x」の第1のキー「a」をCF1 611の入力パラメータにマッチさせ、かつ、現在のキーペアの第2のキー「x」をCGDM600の入力パラメータx:2の入力キー「x」にマッチさせる。次いで、この方法は、CFの選択されたI/Oパラメータが選択されたI/Oキーの値を渡されるように、特定されたCFへの呼び出しをフォーマットするステップ(S907)ことを含む。例えば、CFL1 611の入力パラメータ「a」は値「2」が渡されるが、これは、第1のキー「a」が「x」にマッチさせられ、xは2に設定される(例えば、「x:2」)からである。この方法は次いで、VMSのあらゆるキーペアに対するこれらのマッチングステップを繰り返す。この方法は、完了したかどうかを判断するために、VMSの最後のキーペアがパースされたかどうかを判断する(S908)。この方法が終えられていない場合、ステップS906に進むことによって、VMSの次のキーペアに進行する。この方法が完了している場合、ステップS902に進んで、VMSSの次の行を構文解析して、先に識別されたCFラベル下で新しいCFラベルまたは別のVMSのどちらかを見つける。
【0047】
図6AはCGDMのJSONフォーマットの使用を示すが、本発明はこれに限定されない。例えば、JSONフォーマットは、ハイパーテキストマークアップ言語(HTML)フォーマットまたは拡張マークアップ言語(XML)フォーマットと置き換え可能である。マークアップ規則は、CGDMの構文規則を使用してCGDMのコンテンツを拡張する規則として定義される。これにより、アルゴリズムの任意の入力インスタンスには、対応する拡張コンテンツが存在し、入力インスタンスおよびの全データ特徴は、拡張コンテンツから差し引かれる。マークアップ規則は、アルゴリズムに関連付けられる。
【0048】
本発明の一実施形態では、ソフトウェアへの入力データメッセージは、HTMLフォーマットであり、CGDMはJSONフォーマットであり、データ記憶域は、ウェブ開発環境を可能にするリレーショナルデータベースである。入力を処理する部分関数はウェブブラウザにおいて実行され、フロントエンド部分関数と呼ばれる場合がある。サーバ側で実行させる部分関数はバックエンド部分関数と呼ばれる場合がある。バックエンド部分関数はデータベースに接続可能である。
【0049】
HTML入力を処理する1つのPFは、線形カスケード入力を処理するものであってもよい。線形カスケード入力の例には、州を選択後、を選択し、次いで市を選択する入力ある。この入力は、<select>のリストおよび現在の選択のリストであり、出力は次のオプショ配列である。マークアップ規則は、リストを表現する任意の規則とすることができる。マークアップ規則の例には、第1のリストを<select Cascade=“cs1”cs1=”1”mName=”name1”…>とマーキングする、第2のリストを<select Cascade=”cs1”cs1=”2”mName =”name2”…>とマーキングする、第3のリストを<select Cascade=”cs1”cs1=”3”mName =”name3”… >とマーキングする、などがある。カスケードは計算名であり、Cascade=”cs1”はcs1=’n’であるインスタンスcs1を宣言し、その後、リストにおける位置を宣言する。PFは<select>要素のonSelectイベントによってトリガされる。同じonSelectイベントハンドラのcascadeHndlerは全ての<select>に対して設定される。cascadeHndlerはこの型の入力要件および出力要件をハンドリングする部分関数である。ハンドラーのアルゴリズムは以下になる。
Get instance name from Cascade=”instance_i”;
Get position number from instance_i=”n”;
Get selected value v and name n1 of the current <select>
Get name n2 of the next <select>
Send a data message of the form
{{ “input”:
{“n1” : v}
},
{ “output”: {
[{“n2”:0}]}
}}
to a backend component
Set return result to the next <select>
【0050】
1つのHTMLデータメッセージにおける任意の長さの任意の数のカスケード入力は、この部分関数によって処理することが可能である。
【0051】
入力の別のケースは、スターカスケード入力と呼ばれ、この場合、いくつかの<select>のオプションは、選択した布に基づいて利用可能なサイズおよび色のオプションが決定される場合のように、1つの<select>によって決定される。中央マークについて、<select star=”star1”star1=”name list of all end select node”>である。エンドノード<select>がマーキングされる必要はない。中央の<select>の選択が完了すると、以下のフォームのデータメッセージがバックエンドに送られる。
{
{“input”:
{“centerName” : “v”}
},
{ “output”: {
[{“n1”, “”}],
[{“n2”, “”}],

}}
}
この場合、n1およびn2はエンドノードの名前である。返された値が配列ではなく単一値であり、かつエンドノードがテキストまたは数入力である時、これはオートフィルになる。カスタマの名前が選定されると、そのアドレスがオートフィルされる。
【0052】
入力候補処理は、オートフィルの逆の操作である。現在の入力値およびいくつかの他の入力値を除いて、部署および役職の入力が、被雇用者の名前入力の候補制限するように、現在の入力のオプションを制限することができる。現在の入力値がテキストである時、候補値に関して、2つ以上の解釈がある場合がある。例えば、候補値が、このテキストから始まるか、またはテキストを含む場合がある。そのため、さらなる情報が以下のような値に対して提供される必要がある。
{
{“input”: {
{“otherValues1”: “v1”},
{“otherValues2”: “v2”},
{“currentValue”: {
{“value”: “v3”},
{“type”: “LIKE”}
}
}

},
{ “output”: {
[{“n1”, “”}]
}
}
}
ここで、n1は現在の入力要素の名前である。
【0053】
第1の要素<input rangeInput=”ri1”ri1=”1”…>、第2の要素<input rangeInput=“ri1”ri1=”2”…>、または、選択入力について、第1の要素<select rangeInput=”ri1”ri1=”1”…>、第2の要素<select rangeInput=”ri1”ri1=”2”…>といったマックアップ規則を有する範囲入力を実行可能である。アルゴリズムは、現在の入力チェックを受け入れる前に、他の入力によって設定された制約を満たすか、または、一方の入力が他の入力のオプションを制限するかどうかを確認する。入力フォーマット選定に起因して、日にち範囲入力、選択範囲入力、数値範囲入力のように、いくつかの異なるタイプの範囲入力が存在する場合がある。
【0054】
フォームは、いくつかの異なるタイプの入力要素(テキスト、数値、リストオプション、範囲入力、カスケード入力…)を包含する。フォーム送信のアクションは、全ての要素に対する(名前、値)ペアを収集することである。フォーム送信のマークアップ規則は、入力要素のタイプごとにタイプシンボルを定義するタイプが異なるということは、名前値へのアクセスに異なる方法を使用する必要があることを意味する。それぞれの入力要素に適切なタイプのマークを付ける。フォーム送信アルゴリズムは以下になる。
For each type {
Get all input element for the type
For each input element of the type {
Get the name and value, pack the name value into JSON format.
}
}
mark the data message as ADD or MODIFY
send the JSON data message to a backend address
【0055】
フォーム送信は、新しいデータの追加ADDまたは古いデータの修正MODIFYのどちらかである。修正のために、データは最初に、バックエンドからロードされる。このとき、いくつかの追加のデータ、キー、または参照番号もロードされる。次いで、データは修正され、バックエンドに送られる。追加のキーデータは、クッキーなどの同様の機構によって処理可能である。クッキーの1つの実行形態は、HTMLのいくつかの非表示要素を特殊なタグとともに使用することである。新しいデータを追加する場合、この追加のキーデータは使用されない。そのため、フォーム送信PFは、修正と追加とを区別することができる。PFのフォームは、定義されたタイプの任意の数の入力要素を持つ任意のフォームのフォーム送信を処理可能である。
【0056】
検索ページは、検索条件としての1つまたは複数のデータ入力要素、および、検索結果を表示するための2次元データグリッドを包含する。データグリッドのそれぞれの列には名前を付けることができる。データ検索を送信するために、バックエンドに送られるJSONデータメッセージは、2つの部分、つまり、以下に示されるような検索条件部分と空の2次元配列部分のデータグリッド部分を有する。
{
{“input”:{
{“name1”: “value1”},
{“name2”: {
{“Max”: {“value”: “v2”, “EQUAL”: “true”}},
{“Min”: {“value”: “v3”, “EQUAL”: “false”}}
} },

},
{“output”: {
[[{name4:0}, {name5:0},…]]
}}
}
ここで、name2は範囲値入力を指定し、EQUALは、trueが<=pr>=を意味し、falseが<or>を意味する。
【0057】
検索条件部分は、ADDのフォームと同じ方法で、タイプに名前を付け、マークを付け、パックされる
【0058】
バックエンドの1つの実施形態は、データ記憶域としてリレーショナルデータベースを選定することであり、データメッセージの間で送受信されるデータメッセージはJSONフォーマットである。リレーショナルデータベースと相互作用する必要があるPFの場合、データベーススキーマ名が使用される必要がある。データベーススキーマ名に対応するデータメッセージの作業名は、データベーススキーマ名に変換される。テーブルの列名はtableName.columnNameのフォームである。単一のテーブルにおける挿入を処理するPFは、以下のようにCGDMによって実行される。
{“input”: {
{“column1”: “table1.column1”},
{“column2”: “table1.Column2” },
{“column3”, “table1.Column3” },

} }
【0059】
1つのテーブルに挿入するために、それぞれの列はSQL挿入ステートメントによって同じように扱われるため、1つのタイプのデータある。かかる挿入を実行するCGDMは以下になる。
{ input: {
{“table1.column1”, “”},
{ “table1.Column2”, “” },
{ “table1.Column3”, “” },

}}
【0060】
マスター/詳細テーブルに挿入するために、CGDMは以下になる。
{“input”: {
{“Master”: {
{ “table1.column1”: “”},
{ “table1.Column2”:“”},
{ “table1.Column3”: “”}

}}
{ “Detail”: {
[{“table2.column1”: “”},
{ “table2.Column2”: “” },
{ “table2.Column3”: “” },…] }}
}}
ここで、CGDMは、マスターテーブルのデータ、および、詳細テーブルのデータの配列を含む。
【0061】
1つのテーブルへの更新を実行するPFは以下のようにCGDMを有する。
{“input”: {
“primarykey”: {
{ “table1.column1”: “”},
{ “table1.Column2”: “”},

}
},
{“values”: {
{ “table1.Column3”: “” },
{ “table1.Column4”: “”},

}}
}
【0062】
マスター/詳細テーブルへの更新を実行するPFは以下のようにCGDMを有する。
{“input”:{{“m_Primarykey”: {
{ “table1.column1”: “”},
{ “table1.Column2”: “”},

}
},
{“m_values”: {
{ “table1.Column3”: “”},
{ “table1.Column4”: “”},

}
},
{“d_Primarykey”: {
{ “table2.column1”: “”},
{ “table2.Column2”: “”}

}
},
{“d_values”: {
{ “table2.column3”: “”},
{ “table2.Column4”: “”}

}
},
{“d_data”: {
[{“table2.column1”: “”},{ “table2.Column2”: “”},…,
{ “table2.Column3”: “”},{ “table2.Column3”: “”}…]
}
}}
}
【0063】
以下の例では、SQL選択ステートメントが、Select [A: output section] from [B: table section]のような形式であり、ここで、[C: conditions section] は、[F: order section]によって並べ替えられた[E: aggregation condition]を含む[D: aggregation section]により分類することを想定している。この入力および出力のデータは、6つのセクションに分割される。セクションA、セクションBに表示されるテーブルの列、または、セクションBに表示されるテーブルの列SQL関数を含み、セクションB、テーブル結合関係を含み、セクションCは、同じ関係における、column=value または column>(=)value または column<(=)value、column LIKE value SQLFunction(column)のフォームを含む。セクションEは、SQLAggregateFunction(column)=or<(=)or>(=)valuesを含み、セクションFは、列を包含する、と仮定する。
【0064】
セクションBにおいて必要とされるテーブルとそれらの結合関係情報は、データベースのスキーマから取得可能であるが、結合タイプ情報はアプリケーションから取得する必要がある。配列構造は、選択ステートメントを実行するPFのCGDM内の2つのテーブルの関係を表すように選択できる。この選択ステートメントのCGDMは以下になる。
{{“input”:
{{“requirement”: {
[{ “tableA.column8”: “tableA.column8”},
{ “total1”: { “tableB.column4”:
{
“FUNC”: “SUM”
}}
},
…]}
},
{“table”: {
{[ “tableA”, “tableB”, “joinType”, “tableA.column1= tableB.column2”, “tableA.column3= tableB.column4”, …],
[ “tableC”, “tableD”, “joinType”, “tableC.column1= tableD.column2”, “tableC.column3= tableD.column4”, …],
…}}
},
{“condition”: {
{ “tableA.column5”: “v1”}, //default to tableA.column5=v1
{ “tableB.column1”: {
“value”: “v2”, //default to SUM(tableB.column1)=v2
“FUNC”: “SUM”
}
},
…}
},
{“groupby”: [
“tableA.column6”,
{ “tableB.column2”: {
“FUNC”: “DATE”
}
},
…]
},
{“having”: {
{ “tableB.column3”: {
“value”: “v3”,
“FUNC”: “MAX”
}
},
…}
},
{“orderby”: [
“tableA.column7”,
…]
}
}},
{“output”:
{“results”:
[{ “tableA.column8”: ‘’},
{ “total1”: ‘’},
…]}
}}
【0065】
入力要件は、SQL選択のセクションAに対応しており、かつ、SQL選択の出力を指定する。該要件は、配列フォーマットを指定する。{“tableA.column8”:“tableA.column8”}は、tableA.column8の値を取得し、「tableA.column8」という名前に設定することを意味する。ペアの、
{ “total1”: { “tableB.column4”:
{
“FUNC”: “SUM”
}}
}
は、SUM関数列、tableB.column4を適用し、その値を「total1」という名前に適用することを意味する。
【0066】
バックエンド計算タスクを達成するために2つ以上のPFを使用する実行について図10に示されるように、販売注文の出荷操作の場合を検討する。販売注文は、(部分払いまたは在庫品の制約のため)一部出荷可能であると仮定すると、販売注文は2回以上出荷される必要がある場合がある。着信するCGDMは以下になる。
{ “Order_Shipment_Data” :
{“input”: {
{“orderID”, “value1”}
}},
{“output”: {
{“order_info”: {
{“orderCode”:””}
{“salesmanName”:””},
{“customerName”:””}
}},
{“order_prod_info”: {
[[{“productName”:””}, {“productionDate”:””},
{“Quantity”:””},{“shippedQuantity”:””},{“quantityLeft”:””}]]
}}
}}
}
【0067】
入力は、注文idであり、必要とされる出力は、いくつかの注文情報、注文コード、販売員名およびカスタマ名、ならびに、製品情報、製品名、製造日、注文量、出荷量、および出荷残り数量のリストを含む。
【0068】
図10では、CGDMは、DataExpander PF10によって受信される。DataExpander PF10は、リレーショナルデータセット12に接続する。CGDMのためにWNSM100をマッピングする、機能させる名前空間は、以下になる。
{
{“orderID”, “order.id”};
{ “orderCode”, “order.code”}
{ “salesmanName”, “employee.name” }
{“customerName”, “customer.name”}
{“productName”, “product.name”}
{“productionDate”, “product.productionDate”}
{ “Quantity”, “order.Quantity” }
}
【0069】
マッピング後、CGDMは以下のようになる。
{ “Order_Shipment_Data” :
{“input”:
{“order.id”, “value1”}
},
{“output”: {
{“order_info”: {
{“order.code”: “”}
{“employee.name”: “”},
{“customer.name”: “”}
}},
{“order_prod_info”: {
[[{“product.name”: “”}, {“product.productionDate”: “”},
{“order.Quantity”: “”},{“shippedQuantity”: “”},{“quantityLeft”: “”}]]
}}
}}
}
【0070】
PF10は、SelectおよびPackerという2つのCFを有する。Select CFは、3つのインスタンス102、104、および106を実行する。Packer CFは1つのインスタンス108を実行する。Selectは、リレーショナルデータベースに対して上記の例のタイプSQL選択を行い、Packer CFは、この入力全てを、データメッセージ(例えば、CGDM)の対応する入力部分および出力部分にパッケージングし、データメッセージをLoopPF14に送る。PF14は、入力として配列AおよびBを受け取り、配列Cを出力する1つのインスタンスを実行するKeyMatchLoopと呼ばれる1つのCFを有する。A、B、およびCそれぞれの要素は、キー部分および値部分を有する。要素のキーは、名前値のシーケンスである。2つのキーは、2つのキーの名前シーケンスの長さが同じであり、シーケンスのそれぞれの位置の2つの名前と値のペアの名前が同じである場合、同じタイプである。AおよびBは同じタイプのキーを有する。KeyMatchLoopのアルゴリズムは以下になる。
For each element a of A
Create an element c with key part same as a
if there is an element b of B with a.key==b.key {
value part of c is computed from value parts of a
and b by computation rule1.
}
else {
value part of c is computed from value parts of a
and b by computation rule2.
}
add c to
【0071】
計算規則1および計算規則2は、Calculator PF16によって行われる。PF16は、Equal、Zero、およびMinusの3つの計算を有する。PF10に対するOrder_Shipment_DataのCGDMは以下になる。
{“Order_Shipment”:
{“Select.order”:
{
{ “input”: {
{ “requirement”: {
{“order.code”: “order.code”}
{“salesman.name”: “salesman.name”},
{“customer.name”: “customer.name”}
}},
{ “condition” : {
{“order.id”, “Order_Shipment_Data.input.‘order.id’” }
}},
{ “table” : {
{[“order”, “salesman”, “inner join”, “order.salesmanID=salesman.id”],
[“order”, “customer”, “inner join”, “order.customerID=customer.id”]}
}}
}},
{ “output”:
{ “result”: “Order_Shipment_Data.output.order_info”}
}}
}},

{“Select.orderProduct”:
{
{ “input”: {
{ “requirement”: {
[{“product.name”: “product.name”},
{“production.date”: “production.date”},
{“order_product.quantity”: “order_product.quantity”}]
}},
{ “condition” : {
{“order_product.orderId”,
“Order_Shipment_Data.input.‘order.id’” }
}},
{ “table” : {
[“order_product”, “product”, “inner join”,
“order_product.productId=production.id”]
}}
}},
{ “output”: {
“result”: “”}
}}
}}

{“Select.shipped”:
{
{ “input”: {
{ “requirement”: {
{“product.name”: “product.name”},
{“production.date”:“production.date”},
{“shippedQuantity”: {“shipment.Quantity”:
{
“FUNC”: “SUM”
}}
}
}},
{ “condition” : {
{“shipment.orderid”,“Order_Shipment_Data.input.‘order.id’” }
}},
{ “table” : {
[“shipment”, “product”, “inner join”, “shipment.productID=product.id”]
}}
{ “aggregate” : {
[“product.name”, “product.productiondate”]
}}
}},
{ “output”:
{ “result”: “”}
}
}}

{“packer”: {
{“input”: {
{“In”:
{
{“A”: “Select.orderProduct.output.Result”},
{“B”: “Select.shipped.output.Result”}
}},
{“Out”: {{“C”: “Order_Shipment_Data.output.order_prod_info”}}}
}},
{“output”: {
{“result” : “Order_Shipment_Data.output.order_prod_info”}
}}
}}
}
【0072】
データメッセージOrder_Shipment_Dataの出力部分のorder_prod_infoは、PF10がPF14に送るデータメッセージの出力部分を生成するための入力として使用される。PF10は、データメッセージOrder_Shipment_Data_FullをPF14に送る。
{“Order_Shipment_Data_Full”: {
{“input”: {
{“A”: [[{“product.name”: “v1”}, {“product.productionDate”: “v2”},
{“order_product.quantity”: “v3”}]]},
{“B”: [[{“product.Name”: “v4”}, {“product.productionDate”: “v5”},
{“shippedQuantity”: “v6”}]]}
}},
{“output”: {
{“C”: [[{“product.Name”: “”}, {“product.productionDate”: “”},
{“order.Quantity”: “”},{“shippedQuantity”: “”},{“quantityLeft”: “”}]]}
}}
}
}
【0073】
PF14に対するデータメッセージOrder_Shipment_Data_FullのCGDMは以下になる。
{“Loop”:{
{“input”: {
{“A”:
[“Order_Shipment_Data_full.Input.A”,
{“key”:[“product.name”, “product.productionDate”]},
{“value”:{{“shippedQuantity” } }]
},
{“B”:
[“Order_Shipment_Data_full.Input.B”,
{“key”:[“product.name”, “product.productionDate”]},
{“value”:{{“order_product.quantity”} }]
},
{ “C”:
[“Order_Shipment_Data_full.output.C”,
{“key”:[“product.name”, “product.productionDate”]},
{“value”:{{“order_product.quantity”},{“shippedQuantity”},{“quantityLeft”}}]
}
}},
{“output”:
{ “result”: “Order_Shipment_Data_full.output.C”}
}
}
}
【0074】
PF14はPF16に2つのデータメッセージを送る。
{“Order_data”: {
{“input”: {
{“A”:{“order_product.quantity”: “v1”}}
}},
{“output”: {
{“C”:{{“order_product.Quantity”: “”},{“shippedQuantity”: “”},{“quantityLeft”: “”}}}
}}
}
}

{“Order_Ship_data”: {
{“input”: {
{“A”: {“order_product.quantity”: “v1”}},
{“B”: {“shippedQuantity”: “v2”}}
}
{“output”: {
{“C”: {{“order_product.quantity”: “”},{“shippedQuantity”: “”},{“quantityLeft”: “”}}}
}}
}
}
【0075】
Order_Ship_dataについてのCGDMは以下になる。
{“Order_Ship_Data”: {
{“Equal.quantity”: {
{“input”: {
“X”:“A.order_product.quantity”
}},
{“output”: {
“Y”: “C.order_product.quantity” //Y=X
}}
}
},
{“Equal.quantityLeft”: {
{“input”: {
“X”:“A.order_product.quantity”
}},
{“output”: {
“Y”:“C.quantityLeft”
}}
}
}
{“Zero”: {
{“output”: {
“X”:“C.shippedQuantity” //X=0
}}
}
}
}}
【0076】
Order_dataについてのCGDMは以下になる。
{“Order_Data”: {
{“Equal.quantity”: {
{“input”: {
“X”:“A.order_product.quantity”
}},
{“output”: {
“Y”: “C.order_product.quantity”
}}
}
},
{“Equal.shippedQuantity”: {
{“input”: {
“X”:“B.shippedQuantity”
}},
{“output”: {
“Y”:“C.shippedQuantity”
}}
}
},
{“Minus”: {
{“input”: {
{“X”:“A.order_product.quantity”},
{“Y”:“B.shippedQuantity”}
}},
{“output”: {
“Z”:“C.quantityLeft” //Z=X-Y
}}
}
}
}}
【0077】
データメッセージOrder_Shipment_Dataの出力部分は、CFインスタンス106およびCFインスタンス108の出力部分によって形成される。そして、着信するデータメッセージOrder_Shipment_Dataの作業名空間に逆マッピングして、Order_Shipment_Dataの送信者に送ることができる。
【0078】
本発明の例示的な実施形態は、CGDMのマークアップおよびプロパティシートを利用する。この実施形態は線形カスケードに関して以下に論じられるが、本発明はデータの特定の構成に限定されない。線形カスケードは<select>要素のリストであり、これは、第1の要素から始まって最終の要素を除いたものであり、1つの<select>要素の選択された値が該リストにおける次の<select>のオプションを判断する。
【0079】
線形カスケード入力の1つの例は、Country−State−City入力であり、これによって、ユーザはCountryのオプションから国を選択でき、Stateのオプションを決定し、ユーザはStateのオプションから州を決定でき、Cityのオプションを決定する。ブラウザの実装形態において、County、State、およびCityはそれぞれ、<select>要素によって表される。Countryに対するイベントハンドラはCounty<select>要素にアタッチされ、Stateに対するイベントハンドラはState<select>要素にアタッチされる。例えば、「米国」などの国が選択される時、Countryのイベントハンドラは呼び出され、このイベントハンドラは「米国」の値を得て、{Country=“USA”、State[ ]}のメッセージを作成し、このメッセージをバックエンドプロセスに送って「米国」の全ての州を得て、State[ ]における値を記憶する。State[ ]の値は次いで、Stateを表す<select>に設定される。StateおよびCityに対するイベントハンドラ同様である。
【0080】
本発明の一実施形態では、カスケードはリストデータ構造によって表され、この場合、リストのそれぞれの要素は5つのメンバ、すなわち、ID、Next、SelectedValue、eventHandler、およびOptionsを有する。IDは要素の名前を保持し、Nextはリストの次の要素のNameの値を有し、SelectedValueは選択された値を保持し、eventHandlerは要素のイベントハンドラ関数を保持し、Optionsは値のセットを保持する。Optionsから値を選択し、かつSelectedValueを設定するアクションは、リストの要素に対して行われ得る。アクションを終えると、引数として要素を渡すことによって、eventHandlerの関数は呼び出される。
【0081】
IDは任意の名前を取ることができるため、アルゴリズムは抽象的である。れらは、Country、State、City、またはCompany、Department、Employee Name、またはCategory、Type、Product Nameとすることができる。アルゴリズムは、任意の数の要素が可能とされるため、一般化される。
【0082】
次に、リスト構造はHTML上でマーキングされる。IDおよびNextを除いて、<select>要素は他全てを有する。ここでのCGDMの定義において、それぞれの値は名前を有する必要があるため、CGDM上では、Nextのみが必要とされる。値の名前が、IDプロパティをHTMLタグの全ての要素に加えることによって実装されると仮定する。
【0083】
カスケードのマークアップ規則は、それぞれの<select>要素に対してNextプロパティを加えるためのものであり、この値はカスケードにおける次の<select>のIDの値である。1つのHTMLページにおける2つ以上のカスケードが可能である。
【0084】
一般に、マークアップ規則は、CGDMの構文規則を使用してCGDMのコンテンツを拡張するための規則として定義され、それにより、アルゴリズムの任意の入力インスタンスに対して、れに対応する拡張コンテンツが存在する。入力インスタンスおよびその全データの特徴は、拡張コンテンツから差し引かれる。マークアップ規則はアルゴリズムに関連付けられる。
【0085】
PF関数は、異なるカスケードにおいてさえも、全ての<select>要素選択イベントのイベントハンドラであってよい。この例では、PFにはcascadePFという名前が与えられる。cascadePFの入力は、選択された値、およびイベントを生成する<select>要素である。HTML全体のドキュメントオブジェクトモデル(DOM)構造はまた、cascadePFにアクセス可能である。PFのCGDMは、CGDM={{the selected <select> element}、DOM}と見なすことができ、入力部分は、{{the selected <select> element}、{All <select> element of the cascade}}であり、出力部分は、{{the next element of the selected <select> element}}である。
【0086】
全てのカスケードは、種々のHTMLページにおいてさえも、同じcascadePFを使用し、また、同じCGDM名を使用できるため、cascadePFのVMSSストアはいずれのルックアップに対しても1つのVMSSを返すように構成可能である。cascadePFの例示のCF関数は、initRestElement(CurrentElementName name)であり、これは、ID=nameの現在の要素について、次の要素から最後の要素まで全てに対するオプションを再設定し、Results r=getValuesFromBackend(Condition condition、Results r、BackendProc p、CGDMNamepCGDMName)、これは、CGDMをパッケージングし、バックエンドプロセスpを呼び出し、pCGDMNameという名前のCGDMを渡し、setOption(Results r)とする、つまり、ID=r.nameの<select>のオプションを設定する。CGDMは次のフォーマットを有する。
{pCGDMName: {
{Input: {Condition:{name:value}}}, {Output:{Results:{r:NULL}}
}
【0087】
cascadePFは<select>要素全てに対して使用できるため、異なる<select>要素に対して選択が行われる時、PFが受信する選択された<select>要素は異なる。そのため、直接可変マッピング(VM)は不可能である。しかしながら、CFの引数は、マークアップとCGDMから差し引くことができる。これを規則ベースのVM(RBVM)と呼ぶ。
【0088】
バックエンドには、handleDBSeletionと呼ばれるPFを有することができ、これは、設定されたSQL選択実含む。通常、<select>に対するオプションの値は、SQL選択を実行することによって取得可能である。cascadeOptionsCGDMをCGDMの名前として割り当て、getValuesFromBackendはhandleDBSelectionに渡される。
【0089】
RBVMを使用して、PFに対するVMSSは以下になる。
{initRestElement: RBVM}
{getValuesFromBackend: {{condition: RBVM }, {r : RBVM }, {p: handleDBSelection },{pCGDMName: cascadeOptionsCGDM }}}
{ setOptions: { {r: getValuesFromBackend.r}}
【0090】
CFの呼び出し元は以下になる。
initRestElementCaller(RBVM, CGDM, CFResults)
{
name = get the ID’s value of the selected <select> element

initRestElement(name);
}
getValuesFromBackendCaller(RBVM, CGDM, CFResults)
{
(name, value) = get the ID’s value and the selected value of the selected
<select> element

name = get the ID’s value of the next element of the selected <select> element

r = getValuesFromBackend(value, name, handleDBSelection, cascadeOptionsCGDM);

add r to CFResults.
}
setOptionsCaller(RBVM, CGDM, CFResults)
{
r = get getValuesFromBackend.r from CFResults

setOptions(r);
}
【0091】
RBVMの利点は、新しいカスケードが追加された時、またはカスケードの長さが延長され時、コードの規則処理部分が変更されないことである。選択したアルゴリズムが抽象的一般化されているため、全てのカスケードは同じコードを使用できる。
【0092】
CFCallersの実装は、マークアップ規則影響を受ける。CFの新しいCFCallerはマークアップ規則用に開発される必要がある。マークアップ規則に起因して、CFは2つ以上のCFCallerを有することができる。
【0093】
マークアップは、相互参照としてCGDMの値の名前を使用して、同等以上の表現力のある構文規則を有する別個のメッセージに対して行うことができる我々は、別個のマークアップメッセージを、CGDMのプロパティシート(PS)と呼ぶ。いずれのCGDMもこれに接続するPSを有することができる。開発において、CGDMの名前インスタンス(NI)が既知であるため、開発PSをCGDMに接続できる。
【0094】
本発明の例示の実施形態を説明したが、本発明は、開示された実施形態に限定されず、本開示の趣旨および範囲内に含まれるさまざまな修正および等価の配置構成に及ぶことが意図されることは、理解されたい。
【手続補正書】
【提出日】2020年11月9日
【手続補正1】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項1】
読み取り可能な記憶媒体と連結されてサービスを提供するコンポーネントベースのソフトウェアシステムのコンピュータプログラム(computer program)を組み立てる(assembling)方法であって、
前記方法は、
前記サービスの入力/出力(Input/Output, I/O)要件を、複数のI/Oキーと値のペア(I/O key-value pair)を含むそれぞれのデータメッセージ(data message)に変換(converting)するステップと、
前記データメッセージを入力引数(input argument)として受信するように前記プログラムの部分関数(Part Function, PF)を構成するステップと、
計算関数(Computation Function, CF)の引数にマッピング(mapping)されるとともに、前記I/Oキーと値のペアにマッピングされるキーペア(key-pair)を含む可変マッチング構造(Variable Matching Structure, VMS)セット(set)(Variable Matching Structure set, VMSS)を生成するステップと、
前記VMSSを用いて不完全な前記計算関数(CF)を呼び出す(call)ように、前記PFを構成するステップとを含み、
前記VMSSは、特定の計算関数(CF)のラベル、前記CFによって呼び出される前記PFの名前、前記CFによって呼び出される計算目標データメッセージ(Computation Global Data Message : CGDM)の名前、前記CFのインスタンスの入力パラメータ、および、前記CGDMのインスタンスの入力パラメータ、のうちの少なくとも一つを含み、
前記CFは、前記サービスに関連する動作を実行するように構成される
ことを特徴とするコンピュータプログラムを組み立てる方法。
【請求項2】
請求項1記載の方法であって、前記VMSSは、前記キーペアのサブセット(subset)を含むVMSを含み、
前記サブセットのキーペアのうちの第1のキーペアは、前記CFの入力引数にマッピングされる第1のキー、および、前記I/Oキーと値とのペアの中から入力キーと値のペアにマッピングされる第2のキーを含むことを特徴とするコンピュータプログラムを組み立てる方法。
【請求項3】
請求項2記載の方法であって、前記サブセットのキーペアのうちの第2のキーペアは、前記CFの出力引数にマッピングされる第3のキー、および、前記I/Oキーと値のペアのうち出力キーと値のペアにマッピングされる第4のキーを含むことを特徴とするコンピュータプログラムを組み立てる方法。
【請求項4】
請求項1記載の方法であって、前記VMSSを前記データメッセージの名前(name)により索引付け可能な(indexable)データ記憶部(data storage)に記憶させるステップをさらに含むことを特徴とするサコンピュータプログラムを組み立てる方法。
【請求項5】
サービスを実行するように構成されたコンピュータプログラムを実行する方法であって、前記コンピュータプログラムは、複数の入力/出力(I/O)キーと値のペアを含むデータメッセージを入力引数として受信するように構成された部分関数(PF)を含み、
前記方法は、
複数の要素(element)を含むデータ構造を前記データメッセージの名前を用いて検索(retrieving)するステップと、ここで前記各要素は、名前および可変マッチング構造(VMS)を含み、前記VMSSは、特定の計算関数(CF)のラベル、前記CFによって呼び出される前記PFの名前、前記CFによって呼び出される計算目標データメッセージ(Computation Global Data Message : CGDM)の名前、前記CFのインスタンスの入力パラメータ、および、前記CGDMのインスタンスの入力パラメータのうちの少なくとも1つを含み、
前記検索されたデータ構造内の前記要素毎に、計算関数(CF)を検索するために、前記要素の前記名前を用いるステップと、
前記要素の前記VMS及び前記データメッセージを用いて、前記検索されたCFを呼び出すステップと
を含むことを特徴とするコンピュータプログラムを実行する方法。
【請求項6】
請求項5記載の方法であって、
前記呼び出すステップは、
前記データメッセージから入力データを決定するステップと、
前記VMSから前記入力データのデータ部分(data part)に前記CFの引数をマッピングするステップと、
前記マッピングにしたがって、前記データ部分に前記CFを呼び出すステップと
を含むことを特徴とするコンピュータプログラムを実行する方法。
【請求項7】
請求項5記載の方法であって、
前記呼び出すステップは、前記検索されたCFの事前呼び出し(prior call)の結果を含む前記PF内の内部データ構造に格納されたデータをさらに用いる
ことを特徴とするコンピュータプログラムを実行する方法。
【請求項8】
請求項5記載の方法であって、
前記呼び出すステップは、第2のPFを呼び出す(invoke)ための複数の入力/出力(I/O)キーと値のペアを含む第2データメッセージとともに前記検索されたCFを呼び出すことを特徴とするサービスを実行するように構成されたコンピュータプログラムを実行させる方法。
【請求項9】
コンピュータ可読記憶媒体(computer readable storage medium)に格納された、サービスを実行するプログラムを組み立てるためのコンピュータプログラム(computer program)であって、前記コンピュータ可読記憶媒体は、コンピュータ可読記憶媒体に具体化されるプログラム命令を有し、プログラム命令は、以下の方法を実行するためにコンピュータによって実行可能であり、
前記方法は、
前記サービスの入力/出力(I/O)要件を、複数のI/Oキーと値のペアを含むそれぞれのデータメッセージに変換するステップと、
前記データメッセージを入力引数として受信するように前記プログラムの部分関数(PF)を構成するステップと、
計算関数(CF)の引数にマッピングされるとともに、前記I/Oキーと値のペアにマッピングされるキーペアを含む可変マッチング構造(VMS)セット(VMSS)を生成するステップと、
前記VMSSを用いて前記計算関数(CF)を呼び出すように、前記PFを構成するステップとを含み、
前記VMSSは、特定の計算関数(CF)のラベル、前記CFによって呼び出される前記PFの名前、前記CFによって呼び出される計算目標データメッセージ(Computation Global Data Message : CGDM)の名前、前記CFのインスタンスの入力パラメータ、および、前記CGDMのインスタンスの入力パラメータ、のうちの少なくとも1つを含み、
前記CFは、前記サービスに関連付けられた動作を実行するように構成される
ことを特徴とするコンピュータ可読可能記憶媒体に格納されたコンピュータプログラム。
【請求項10】
請求項9記載の方法において、前記VMSSはキーのペアのサブセットを含む音声メッセージシステムを含み、前記部分集合の鍵対のうちの第1の鍵ペアは、前記CFの入力引数にマッピングされる第1キー、そして前記I/Oキー値対の中から入力キー値ペアにマッピングされる第2キーを含むことを特徴とするコンピュータ読み取り可能な記憶媒体に格納されたコンピュータプログラム。
【請求項11】
請求項10記載の方法において、前記部分集合の鍵対のうちの第2の鍵ペアは、前記CFの出力引数にマッピングされる第3キー、そして前記I/Oキー値対のうち出力キー値ペアにマッピングされる第4キーを含むことを特徴とするコンピュータ読み取り可能な記憶媒体に格納されたコンピュータプログラム。
【請求項12】
請求項9記載の方法において、前記コンピュータプログラムは、上記VMSSを前記データメッセージのネームによって索引付け可能なデータストアに格納することを含むことを特徴とするコンピュータ可読記憶媒体に記憶されたコンピュータプログラム。
【請求項13】
コンピュータ可読記憶媒体に格納された、サービスを実行するように構成されたプログラムを実行するためのコンピュータプログラムであって、前記コンピュータプログラムは、複数の入力/出力(I/O)キーと値のペアを含むデータメッセージを入力引数として受信するように構成された部分関数(PF)を含み、前記コンピュータ可読記憶媒体は、コンピュータ可読記憶媒体に具体化されるプログラム命令を有し、プログラム命令は、以下の方法を実行するためにコンピュータによって実行可能であり、
前記方法は、
複数の要素)を含むデータ構造を前記データメッセージの名前を用いて検索するステップと、ここで前記各要素は、名前および可変マッチング構造(VMS)を含み、前記VMSSは、特定の計算関数(CF)のラベル、前記CFによって呼び出される前記PFの名前、前記CFによって呼び出される計算目標データメッセージ(Computation Global Data Message : CGDM)の名前、前記CFのインスタンスの入力パラメータ、および、前記CGDMのインスタンスの入力パラメータのうちの少なくとも1つを含み、
前記検索されたデータ構造内の前記要素毎に、計算関数(CF)を検索するために、前記要素の前記名前を用いるステップと、
前記要素の前記VMS及び前記データメッセージを用いて、前記検索されたCFを呼び出すステップと
を含むことを特徴とするコンピュータ可読記憶媒体に記憶されたコンピュータプログラム。
【請求項14】
請求項13記載のコンピュータプログラムであって、
前記呼び出すステップは、
前記データメッセージから入力データを決定するステップと、
前記VMSから前記入力データのデータ部分(data part)に前記CFの引数をマッピングするステップと、
前記マッピングにしたがって、前記データ部分に前記CFを呼び出すステップと
を含むことを特徴とするコンピュータ可読記憶媒体に記憶されたコンピュータプログラム。
【請求項15】
請求項13記載のコンピュータプログラムであって、
前記呼び出すステップは、前記検索されたCFの事前呼び出しの結果を含む前記PF内の内部データ構造に格納されたデータをさらに用いる
ことを特徴とするコンピュータ可読記憶媒体に記憶されたコンピュータプログラム。
【請求項16】
請求項13記載のコンピュータプログラムであって、
前記呼び出すステップは、第2のPFを呼び出す(invoke)ための複数の入力/出力(I/O)キーと値のペアを含む第2データメッセージとともに前記検索されたCFを呼び出すことを特徴とするコンピュータ可読記憶媒体に記憶されたコンピュータプログラム。