(57)【特許請求の範囲】
【請求項１】
第１のコンピューティングデバイスにより提供される第１のウェブサービスの第１のポートタイプと、第２のコンピューティングデバイスにより提供される第２のウェブサービスの第２のポートタイプとの適合性を調べる、コンピュータによって実施される方法であって、前記各ポートタイプは外部のウェブサービスによって呼び出されるウェブサービスの１つ以上の操作を定義し、前記方法は、
前記第１のコンピューティングデバイスまたは前記第２のコンピューティングデバイスのいずれか一方が、前記第１のウェブサービスの前記第１のポートタイプから第１のセーフティ（Ｓ１）を抽出し、前記第２のウェブサービスの前記第２のポートタイプから第２のセーフティ（Ｓ２）を抽出するステップであって、前記各セーフティは外部のウェブサービスが前記ウェブサービスの前記操作を呼び出す順序をプログラム的にそれぞれ定義しているステップと、
前記第１のコンピューティングデバイスまたは前記第２のコンピューティングデバイスのいずれか一方が、前記第１のセーフティを前記第２のセーフティにバインディング（Ｓ１：＝：Ｓ２）して、前記バインディングの結果から、ウェブサービス間に、前記第１のウェブサービスでメッセージを送受信する第１のポートと前記第２のウェブサービスでメッセージを送受信する第２のポートを経由した相互運用性が得られるかどうかを判定することによって、前記第２のセーフティとの前記第１のセーフティの適合性をテストするステップとを備え、
前記バインディングの結果が、前記第１のセーフティによって規定される前記操作の順序が前記第２のウェブサービスにとって許容可能で正当なものであり、かつ、前記第２のセーフティによって規定される前記操作の順序が前記第１のウェブサービスにとって許容可能で正当なものであって、前記２つのセーフティが前記第１のウェブサービスおよび前記第２のウェブサービスに対して相互に許容可能であることによって、前記第２のセーフティが前記第１のセーフティとプログラム的に合致していることを示すとき、前記第１のポートは前記第２のポートと結合可能となり、前記第1のウェブサービスは前記第２のウェブサービスにアクセスし、前記第２のウェブサービスは前記第１のウェブサービスにアクセスできることを特徴とする方法。
【請求項２】
前記第１のセーフティが、セーフティが非アクティブ状態であることまたは終了していることを示すストップセーフティ（０）であり、前記第２のセーフティが形式（Ｓ）である場合、前記バインディングの結果は前記第２のセーフティになることを特徴とする請求項１に記載の方法。
【請求項３】
前記第１のセーフティが、外部ウェブサービスがウェブサービスの前記操作または前記メッセージを呼び出す順序を示す順序のセーフティ（Ｍ．Ｓ）であって、Ｍは操作またはメッセージを表し、Ｓはその後に引き続く別のセーフティを表し、前記第２のセーフティが、２つのセーフティＳ０、Ｓ１の処理が同時に実行可能であって分散処理であることを示す並行セーフティ（Ｓ０｜Ｓ１）である場合、前記バインディングの結果は、選択可能な選択肢(((S0 /M)|S1):=:S)または((S0|(S1 /M)):=:S)を表す選択セーフティ(((S0 /M)|S1):=:S)+((S0|(S1 /M)):=:S)となることを特徴とする請求項１に記載の方法。
【請求項４】
前記第１のセーフティが、セーフティの中で選択可能な選択肢Ｓ０またはＳ１を示す選択セーフティ（Ｓ０+Ｓ１）であり、前記第２のセーフティが形式（Ｓ）である場合、前記バインディングの結果は、選択可能な選択肢((S0:=:S)または(S1:=:S))を表す選択セーフティ((S0:=:S)+(S1:=:S))となることを特徴とする請求項１に記載の方法。
【請求項５】
前記第１のセーフティが順序のセーフティである形式（Ｍ０.Ｓ０）であり、前記第２のセーフティが順序のセーフティである形式（Ｍ１.Ｓ１）であって、Ｍ０およびＭ１は操作またはメッセージを表し、Ｓ０およびＳ１はその後に引き続く別のセーフティを表し、
Ｍ０およびＭ１が引数であって、Ｍ０がＭ１の補数であるときに真のブール演算結果を返すｍａｔｃｈ関数（ｍａｔｃｈ（Ｍ０，Ｍ１））が定義されている場合、前記バインディングの結果は、関係(cut(MO, M1).(S0:=:S1))を有するセーフティに等しくされ、cut(MO, M1)はＭ０およびＭ１を排除するｃｕｔ関数であり、
ｍａｔｃｈ関数（ｍａｔｃｈ（Ｍ０，Ｍ１））が定義されていない場合は、前記バインディングの結果は未定義となることを特徴とする請求項１に記載の方法。
【請求項６】
前記第１のセーフティが、２つのセーフティの処理が同時に実行可能であって分散処理であることを示す並行セーフティ（Ｓ０｜Ｓ１）であり、前記第２のセーフティが別の並行セーフティ（Ｓ２｜Ｓ３）である場合、前記バインディングの結果は、各選択肢を形式（Ｓｉ，ｍ，ｎ，ｊ）で表したとき、セーフティの中で選択可能な選択肢を示す選択セーフティ((S0,2,3,l)+(S1,2,3,0)+(S2,0,1,3)+(S3,0,1,2))となり、ここで、特定の選択肢について関係((Si:=:(Sm|Sn)):=:Sj)が定義される場合、前記バインディングの結果は、関係((Si:=:(Sm|Sn)):=:Sj)になり、特定の選択肢について関係((Si:=:(Sm|Sn)):=:Sj)が定義されない場合、前記バインディングの結果は、別の関係((Si:=:(Sm|Sn))|Sj)になることを特徴とする請求項１に記載の方法。
【請求項７】
前記第１のセーフティが順序のセーフティである形式（Ｓ）であり、前記第２のセーフティが順序のセーフティである形式（Ｍ０．Ｓ／Ｍ１）であって、Ｍ０およびＭ１は操作またはメッセージを表し、Ｓ０およびＳ１はその後に引き続く別のセーフティを表し、
Ｍ０，Ｍ１を引数として、Ｍ０がＭ１の補数であるときは真のブール演算結果を出力し、Ｍ０がＭ１の補数でないときは偽のブール演算結果を出力するｍａｔｃｈ関数（ｍａｔｃｈ（Ｍ０，Ｍ１）が定義されている場合、前記バインディングの結果は、Ｍ０およびＭ１を排除するｃｕｔ関数（ｃｕｔ（Ｍ０，Ｍ１））に等しくされることを特徴とする請求項１に記載の方法。
【請求項８】
前記第１のセーフティが順序のセーフティである形式（Ｓ）であり、前記第２のセーフティが順序のセーフティである形式（Ｍ０．Ｓ／Ｍ１）であって、Ｍ０およびＭ１は操作またはメッセージを表し、Ｓ０およびＳ１はその後に引き続く別のセーフティを表し、
Ｍ０，Ｍ１を引数として、Ｍ０がＭ１の補数であるときは真のブール演算結果を出力し、Ｍ０がＭ１の補数でないときは偽のブール演算結果を出力するｍａｔｃｈ関数（ｍａｔｃｈ（Ｍ０，Ｍ１））が定義されていない場合、前記バインディングの結果は未定義となることを特徴とする請求項１に記載の方法。
【請求項９】
請求項１乃至８いずれかに記載の方法をコンピュータに実行させるためのコンピュータ実行命令を記憶したコンピュータ読取り可能記憶媒体。
【請求項１０】
ウェブサービス同士が通信するのを可能にするネットワークシステムにおいて、
第１の操作のセットを介してアクセスすることができる第１のサービスセットを提供し、第１のポートタイプを含む第１のウェブサービスであって、前記第１のポートタイプは、前記第１のサービスセットへの安全なアクセスをプログラム的に表現し、前記第１の操作のセットの許容できる呼び出しの順列をプログラム的に指定する第１のセーフティを含む第１のウェブサービスと、
第２の操作のセットを介してアクセスすることができる第２のサービスセットを提供し、第２のポートタイプを含む第２のウェブサービスであって、前記第２のポートタイプは、前記第２のサービスセットへの安全なアクセスをプログラム的に表現し、前記第２の操作のセットの許容できる呼び出しの順列をプログラム的に指定する第２のセーフティを含む第２のウェブサービスとを備え、
前記第１のセーフティによって規定される前記操作の順列が前記第２のウェブサービスにとって許容可能で正当なものであり、かつ、前記第２のセーフティによって規定される前記操作の順列が前記第１のウェブサービスにとって許容可能で正当なものであって、前記２つのセーフティが前記第１のウェブサービスおよび前記第２のウェブサービスに対して相互に許容可能であることによって、前記第２のセーフティが前記第１のセーフティとプログラム的に合致することができる場合、前記第２のウェブサービスは前記第１のサービスセットにアクセスし、前記第１のウェブサービスは前記第２のサービスセットにアクセスすることを特徴とするネットワークシステム。
【請求項１１】
ウェブサービス同士が通信するのを可能にするネットワークシステムにおいて、
第１のポートを経由して、サービスを提供する第１のウェブサービスであって、外部のウェブサービスによって呼び出される前記第１のウェブサービスの１つ以上の操作を定義する第１のポートタイプをおよび前記提供されるサービスにアクセスする順序をプログラム的に記述するセーフティ（Ｓ１）を含む第１のウェブサービスと、
第２のポートを経由して、前記第１のウェブサービスによって提供されるサービスを要求する第２のウェブサービスであって、外部のウェブサービスによって呼び出される前記第２のウェブサービスの１つ以上の操作を定義する第２のポートタイプをおよび前記第1のウェブサービスの前記セーフティとは別のセーフティ（Ｓ２）を含む第２のウェブサービスとを備え、
前記第２のウェブサービスは、前記提供されるサービスにアクセスすることができるように、前記第１のウェブサービスの前記セーフティを前記第２のウェブサービス前記別のセーフティにバインディング（Ｓ１：＝：Ｓ２）して得られるバインディングの結果から、前記第１のポートタイプが前記第２のポートタイプと適合性があると判断されるときに、ならびに、前記第１のセーフティによって規定される前記操作の順序が前記第２のウェブサービスにとって許容可能で正当なものであり、かつ、前記第２のセーフティによって規定される前記操作の順序が前記第１のウェブサービスにとって許容可能で正当なものであって、前記セーフティおよび前記別のセーフティが、前記第１のウェブサービスおよび前記第２のウェブサービスに対して相互に許容できるときに、前記第１のウェブサービスのセーフティを受容して前記第１のウェブサービスとの間に仮想コントラクトを形成し、前記第１のポートと前記第２のポートが結合されることを特徴とするネットワークシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、一般にはＷｅｂサービスに関し、より詳細にはＷｅｂサービス間の相互運用性に関する。
【背景技術】
【０００２】
本願は、２００２年９月３０日に出願された特許文献１および、２００３年１月７日に出願された特許文献２の利益を請求する。同特許出願はともに、参照により明示的に本明細書に組み込まれる。
【０００３】
インターネット上の分散コンピューティング化が進む動向の中において、ウェブサービスは、基本的な構成単位である。オープン標準ならびにソフトウェアアプリケーション間の通信および連携に関する関心により、ウェブサービスがアプリケーションの統合に適したプラットフォームとなりつつある環境が生み出された。アプリケーションは、存在する場所や実装方法に関係なく、連携して機能する様々な供給源からの複数のウェブサービスを使用して構築される。ウェブサービスは、ウェブサービスの内部の仕組みを知る必要なしに使用または再使用することができるブラックボックス機能に相当する。ウェブサービスのアーキテクチャの主な利点の１つは、このアーキテクチャが、異なるプラットフォームにおいて異なる言語で書かれたウェブサービスがメッセージを介して簡単に相互に通信できることである。さらに、相当数の企業と会社がすでにウェブインフラストラクチャと、そのようなインフラストラクチャを維持するための深い知識と経験を持つ人員を備えており、それにより、将来のアプリケーションのためのプラットフォームとしてウェブサービスをより柔軟に採用することが可能になっている。
【０００４】
ウェブサービスの例には、株価、天気予報、スポーツのスコアなど、容易にアプリケーションに取り込むことができる情報源が含まれる。情報源を超えて、関心を持つ者によって求められる情報を分析および集約し、関心を持つ者にその情報を提示するために複数のウェブサービスから構築することができる、１つの包括的分野のアプリケーションを想像することができる。例えば、株、４０１Ｋ、銀行口座、ローンなど、個人の全金融状況を要約した集計表を考えられたい。ウェブサービスを通じてそれらの情報を入手することができれば、表計算アプリケーションでその情報を継続的に更新することができる。現在、大半の情報は、ウェブ上における一貫性のない無秩序な要素の混合として入手することができるが、ウェブサービスは、すべての情報へのプログラム的なアクセスをより容易で信頼できるものにする。
【０００５】
ウェブサービスは種々に異なるが、ほぼすべてのウェブサービスには、次の３点が共通している。（１）ウェブサービスは、ＳＯＡＰ（シンプルオブジェクトアクセスプロトコル）などの標準的プロトコルを通じ、インタフェースのセットを介して、ユーザに役立つ機能を公開する。（２）ウェブサービスは、ＷＳＤＬ（ウェブサービス記述言語）を使用して、コントラクトと称される文書にインタフェースのセットを記述する。コントラクトは、ユーザがウェブサービスと対話をするクライアントアプリケーションを構築することができる程度の詳細さで書かれる。（３）ウェブサービスは登録されており、潜在的なユーザは、ＵＤＤＩ（ユニバーサル発見記述および統合）を使用してウェブサービスを見つけることができる。すなわち、ウェブサービスは、特定のＷＳＤＬコントラクトで記述され、ＵＤＤＩの特定の場所に登録された、特定のプロトコルを介してウェブ上に公開された１本のソフトウェアである。
【０００６】
上述のように、ＷＳＤＬコントラクトは、ユーザがクライアントアプリケーションを構築できるだけの詳細さでウェブサービスのインタフェースを記述している。より詳細には、ＷＳＤＬコントラクトは、特定のプロトコルで書かれたメッセージのセットと、それらのメッセージがやりとりされる方法を記述した文書である。すなわち、ＷＳＤＬコントラクトは、ウェブサービスが生成し受け取ることができるメッセージとして、ウェブサービスインタフェースを記述している。ＷＳＤＬコントラクトは、読み、編集をすることが可能であるが、大抵の場合は、ＷＳＤＬコントラクトは、ソフトウェアによって生成され、消費されることを意図されている。
【０００７】
ＷＳＤＬコントラクトの価値を理解するために、取引先の１つによって提供されるウェブサービス中のメソッドを呼び出したいユーザを考えられたい。ユーザは、そのメソッドによって生成され、受け付けられるいくつかのサンプルメッセージを、その取引先から入手することができる。次いで、ユーザは、与えられたサンプルメッセージに似たメッセージを生成し消費するアプリケーションを、書くことができる。しかし、この手法は、間違いを発生させる危険性をはらんでいる。例えば、ユーザがメッセージ中に顧客の識別「２８３７」を見た場合、その識別が実際には文字列であるにもかかわらず整数だと思い込む可能性がある。ＷＳＤＬコントラクトは、要求メッセージが含まなければならない内容と応答メッセージがどのように見えるかを、あいまいさのない表記で指定する。
【０００８】
メッセージフォーマットを記述するためにＷＳＤＬコントラクトが使用する表記法は、ＸＭＬスキーマ標準に基づいており、ＸＭＬスキーマは、どの特定のプログラミング言語にも依存せず、各種のプラットフォームおよびプログラミング言語からアクセスできるウェブサービスインタフェースを記述するのに適している。メッセージ内容の記述に加えて、ＷＳＤＬコントラクトは、そのサービスを入手できる場所とそのサービスと対話するために使用することができる通信プロトコルを、定義する。したがって、ＷＳＤＬコントラクトは、ウェブサービスとともに機能するアプリケーションを書くために必要とされるあらゆる事柄を定義している。
【０００９】
【特許文献１】米国特許出願第１０／２６２，５５１号  「Safe Interoperability Among Web Services」
【特許文献２】米国特許出願第１０／３３８，１６５号    「Type Checking for Safe Interoperability」
【発明の開示】
【発明が解決しようとする課題】
【００１０】
しかしながら、ＷＳＤＬコントラクトは、アプリケーションがウェブサービスと対話する方式を正確に定義する表現力に欠けている。用語「コントラクト」は、ソフトウェアエンティティ間の拘束力のある約束を意味するが、ウェブサービスと対話するアプリケーションは、ＷＳＤＬコントラクトの規定を無視しても構わない。そのため、ＷＳＤＬコントラクトは、張子の虎（paper tiger）に過ぎないように思われる。図１に示すシステム１００は、この問題をより詳細に示している。
【００１１】
システム１００は、クライアント１０２を含んでいる。このクライアント１０２は、ローカルエリアネットワークまたはインターネット１０４によって提供される共有ネットワーク資源にアクセスするコンピュータである。クライアント１０２とサーバ１０６には、複数のウェブサービス１０８、１１０が静的に格納されている。ウェブサービス１０８、１１０は、プログラム１０８Ａ、１１０Ａと、ＷＳＤＬコントラクト１０８Ｂ〜１１０Ｂから構成されている。
【００１２】
各々のＷＳＤＬコントラクトは、２つの主要部分に分けることができる。第１の部分は抽象的定義を含んでおり、第２の部分は具体的記述を含んでいる。抽象的定義は、プラットフォームに依存せず、言語に依存しない方法で、コントラクト要素を定義している。抽象的定義は、マシン固有あるいは言語固有の要素を含まない。これは、いくつかの異なるウェブサイトが実装することができるサービスの一式を定義するのを助ける。データのシリアライゼーションなどサイトに固有の要素は、具体的記述に委ねられる。抽象的定義には、タイプ、メッセージ、およびポートタイプの定義が含まれている。具体的記述は、バインディングとサービスを指定する。タイプの部分は、ＷＳＤＬコントラクトで使用されるデータ型を宣言する。メッセージ部分は、操作（ｏｐｅｒａｔｉｏｎ）（メソッド）へのパラメータを定義する。ポートタイプの部分は、ＷＳＤＬコントラクトで記述されるウェブサービスの外部にあるアプリケーション（および他のウェブサービス）によって呼び出すことができる１つまたは複数の操作（オペレーション）を定義する。バインディングの部分は、操作に対する呼び出しと応答がプロトコルに従ってネットワーク１０４を通じてどのように送受信されるかを指定することを目的とする１つまたは複数のバインディング要素を有することができる。サービス部分は、１つまたは複数のサービス要素を有し、各サービス要素は、ポート要素を含み、各ポート要素は、バインディング部分のバインディング要素を参照する。
【００１３】
構造１１２は、コントラクト１０８Ｂのコントラクト要素間の関係を示し、ブロック図の形で示されている。ポートタイプ１１２Ｄは、いくつかの操作要素を宣言する。ポートタイプ中の操作要素は、準備操作１１２Ｅ、「ｄｏ  ｗｏｒｋ」操作１１２Ｆ、「クリーンアップ」操作１１２Ｇなど、ポートタイプで宣言されるすべてのメソッドを呼び出す構文を定義する。したがって、ポートタイプ中の各操作要素は、メソッドの名前、パラメータ（メッセージを使用する）、および各パラメータのタイプを定義する。１つのＷＳＤＬコントラクトにはいくつかのポートタイプがあってよい。各ポートタイプは、いくつかの関連する操作をまとめる。
【００１４】
バインディング要素１１２Ｃは、ポートタイプ１１２Ｄの各操作１１２Ｅ〜１１２Ｇに使用されるプロトコル、シリアライゼーション、符号化を指定する。ポート要素１１２Ｂは、ＵＲＬ（ユニフォームリソースロケータ）の使用を介して、インターネット上の場所を一対一の対応関係でバインディング１１２Ｃに関連付ける。サービス要素１１２Ａは、ポート１１２Ｂなどポート要素の一式を含んでいる。１つのＷＳＤＬコントラクトには２つ以上のサービス要素があってよい。各サービス要素を使用して、ＵＲＬの宛先に従って複数のポートをまとめることができる。例えば、開発者は、単に別のサービス要素を使用することにより、すべてのサービス要素をリダイレクトすることができ、外部のウェブサービスは、なおウェブサービスと対話することができる。サービス要素の別の使用法は、基礎となるプロトコルに従ってポートを分類するものである。例えば、開発者は、すべてのＨＴＴＰポートを１つのサービス要素に入れ、すべてのＳＭＴＰポートを別のサービス要素に入れることができる。そして、外部のウェブサービスは、ＷＳＤＬコントラクト１０８Ｂから、そのウェブサービスが対応することができるプロトコルに一致するサービスを探し出すことができる。
【００１５】
上で指摘したように、ＷＳＤＬコントラクト１０８Ｂは、「準備」操作１１２Ｅ、「ｄｏ  ｗｏｒｋ」操作１１２Ｆ、「クリーンアップ」操作１１２Ｇなどのいくつかの操作を含み、それらの操作は、ウェブサービス１０８から提供されるサービスにアクセスするために呼び出すことができる。しかし、「準備」操作１１２Ｅは、「ｄｏ  ｗｏｒｋ」操作１１２Ｆより前に呼び出されるべきであり、「ｄｏ  ｗｏｒｋ」操作１１２Ｆは、「クリーンアップ」操作１１２Ｇを呼び出す前に呼び出されなければならない。従来のＷＳＤＬコントラクトは、この順序付けの情報を、ウェブサービス１０８のサービスを望む可能性のあるウェブサービス１１０など他のウェブサービスに伝える表現力に欠けている。例えば、ウェブサービス１１０は、初めに準備操作１１２Ｅを呼び出す代わりに、「クリーンアップ」操作１１２Ｇを初めに呼び出すことを選択する可能性がある。これは、ウェブサービス１０８の内部の実行状態を破壊する可能性があるため、ウェブサービス１０８の操作にとって壊滅的となる恐れがある。さらに、ウェブサービス１１０が悪意のあるものであると想定する。その場合、ウェブサービス１１０は、順序を無視して操作１１２Ｅ〜１１２Ｇを呼び出して単にウェブサービス１０８の適正な操作を完全に破壊することにより、ウェブサービス１０８のこの脆弱性を悪用することができる。ウェブサービスがこのように不適切に利用されることができてしまうと、ウェブサービスの信頼性が疑われ、ウェブサービスの利用が減って、やがては市場から消滅してしまうことが予想される。
【００１６】
したがって、ウェブサービスが他のウェブサービスと安全にやり取りすることを可能にし、同時に既存のウェブサービスに伴う前述および他の問題を回避しあるいは低減する、より好適な方法およびシステムが必要とされている。
【課題を解決するための手段】
【００１７】
本発明によれば、本発明の方法の形態は、第１のウェブサービスの第１のポートタイプと第２のウェブサービスの第２のポートタイプとの適合性を調べる、コンピュータによって実施される方法である。この方法は、第１のウェブサービスの第１のポートタイプから第１のセーフティを抽出し、第２のウェブサービスの第２のポートタイプから第２のセーフティを抽出するステップを備える。この方法はさらに、第１のセーフティを第２のセーフティと結び付けて、結び付けの結果ウェブサービス間に相互運用性が得られるかどうかを判定することにより、第１のセーフティと第２のセーフティとの適合性をテストするステップを備える。
【００１８】
本発明によれば、ウェブサービスの安全な相互運用性を改善する、システム、方法、およびコンピュータ読取り可能媒体が提供される。本発明のシステム形態は、コンピューティングサービスを提供する第１のウェブサービスと、第１のウェブサービスによって提供されるコンピューティングサービスを要求する第２のウェブサービスを備える。第１のウェブサービスは、メッセージを送受信する第１のポートを含み、第２のウェブサービスは、メッセージを送受信する第２のポートを含む。第１のポートは、第１のポートタイプを含み、第２のポートは、第２のポートタイプを含む。第２のポートは、第２のポートタイプが第１のポートタイプと適合性がある場合に、第１のウェブサービスによって提供されるサービスに安全にアクセスするために第１のポートと結合する（ｆｕｓａｂｌｅ）ことができる。
【００１９】
本発明のさらなる態様によれば、本発明のさらなるシステム形態は、第１のサービスのセットを提供する第１のウェブサービスと、第２のサービスのセットを提供する第２のウェブサービスとを備える。第１のウェブサービスは、第１のセーフティ（第１のサービスセットへの安全なアクセスをプログラム的に表す）を含み、第２のウェブサービスは、第２のセーフティ（第２のサービスセットへの安全なアクセスをプログラム的に表す）を含む。第２のセーフティが第１のセーフティとプログラム的に合致することができる場合は、第２のウェブサービスは、第１のサービスセットにアクセスし、第１のウェブサービスは、第２のサービスセットにアクセスする。
【００２０】
本発明のさらなる態様によれば、本発明の別のシステム形態は、サービスを提供する第１のウェブサービスを備える。第１のウェブサービスは、提供されるサービスにアクセスする順序をプログラム的に記述するセーフティを含む。このシステムはさらに、第１のウェブサービスによって提供されるサービスを使用することを要求する第２のウェブサービスを備える。第２のウェブサービスは、提供されるサービスにアクセスすることができるように、第１のウェブサービスのセーフティを受容して第１のウェブサービスとの間に仮想コントラクトを形成する。
【００２１】
本発明のさらなる態様によれば、本発明のコンピュータに読取り可能な形態は、ウェブサービスが別のウェブサービスとの安全な相互運用性を評価するために使用するのに適した、カスタマイズ可能なタグ方式のデータ構造を記憶する。より詳細には、このデータ構造は、ウェブサービスによって呼び出すことができる操作を示すポートタイプタグと、ウェブサービスが操作を呼び出す順序をプログラム的に指定するセーフティを示すセーフティタグとを備える。
【００２２】
本発明のさらなる態様によれば、本発明の方法の形態は、コンピュータシステムにおいて実施することができる。この方法は、ウェブサービスによって呼び出されることができる操作のセットを作成するステップと、操作のセットの許容できる呼び出しの順列を指定するセーフティを作成するステップを備える。
【００２３】
本発明の前述の態様とそれに伴う利点の多くは、添付図面と併せて以下の詳細な説明を参照することで、より容易に理解されるだろう
【発明を実施するための最良の形態】
【００２４】
図２に、ウェブサービスのプログラムを実行し、安全な相互運用性のためにウェブサービスの仕様を検証するなど、本発明の特定の態様を実施するのに適したコンピューティングシステム環境２００の例を示す。コンピューティングシステム環境２００は、適切なコンピューティング環境の一例に過ぎず、本発明の使用または機能の範囲について限定を示唆するものではない。また、コンピューティング環境２００は、図示し、ここに説明する構成要素の１つまたは組み合わせに関連する依存性または必要条件を有するものとも解釈すべきでない。
【００２５】
本発明は、多数の他の汎用または特定目的のコンピューティングシステム環境または構成において動作する。本発明に使用するのに適する可能性がありよく知られるコンピューティングシステム、環境、および／または構成の例には、これらに限定しないが、パーソナルコンピュータ、サーバコンピュータ、ハンドヘルドあるいはラップトップデバイス、マルチプロセッサシステム、マイクロプロセッサを利用したシステム、セットトップボックス、プログラム可能な家庭電化製品、ネットワークＰＣ、ミニコンピュータ、メインフレームコンピュータ、上記のシステムまたはデバイスを含む分散コンピューティング環境などがある。
【００２６】
本発明は、コンピュータによって実行されるプログラムモジュールなどのコンピュータ実行可能命令との一般的な関連において説明する。一般に、プログラムモジュールには、特定のタスクを行うか、特定の抽象データ型を実施するルーチン、プログラム、オブジェクト、コンポーネント、データ構造などが含まれる。
【００２７】
本発明は、通信ネットワークを通じて結ばれた遠隔の処理装置によってタスクが行われる分散コンピューティング環境で実施することもできる。分散コンピューティング環境においては、プログラムモジュールは、メモリ記憶装置を含むローカルおよびリモート両方のコンピュータ記憶媒体に置くことができる。
【００２８】
図２に示すコンピューティングシステム環境は、コンピュータ２１０の形態の汎用コンピューティングデバイスを含んでいる。コンピュータ２１０の構成要素には、これらに限定しないが、処理装置２２０、システムメモリ２３０、およびシステムメモリを含む各種のシステム構成要素を処理装置２２０に結合するシステムバス２２１が含まれる。システムバス２２１は、各種のバスアーキテクチャのいずれかを使用したメモリバス、あるいはメモリコントローラ、周辺バス、およびローカルバスを含む数種のバス構造のいずれでもよい。限定ではなく一例として、そのようなバスアーキテクチャには、ＩＳＡ（Industry Standard Architecture）バス、ＭＣＡ（Micro Channel Architecture）バス、ＥＩＳＡ（Enhanced ISA）バス、ＶＥＳＡ（Video Electronics Standards Association）ローカルバス、および、メザニンバスとも称されるＰＣＩ（Peripheral Component Interconnect）バスがある。
【００２９】
コンピュータ２１０は、通常、各種のコンピュータ読取り可能媒体を含む。コンピュータ読取り可能媒体は、コンピュータ２１０によってアクセスできる利用可能な媒体でよく、揮発性および不揮発性の媒体、取り外し可能および取り外し不能の媒体を含む。限定ではなく例として、コンピュータ読取り可能媒体は、コンピュータ記憶媒体と通信媒体からなることができる。コンピュータ記憶媒体には、コンピュータ可読命令、データ構造、プログラムモジュール、あるいは他のデータなどの情報を記憶するための方法または技術として実施された、揮発性および不揮発性、取り外し可能および取り外し不能の媒体が含まれる。コンピュータ記憶媒体には、これらに限定しないが、ＲＡＭ、ＲＯＭ、ＥＥＰＲＯＭ、フラッシュメモリ、または他のメモリ技術、ＣＤ−ＲＯＭ、デジタル多用途ディスク（ＤＶＤ）、または他の光ディスク記憶、磁気カセット、磁気テープ、磁気ディスク記憶、または他の磁気記憶装置、あるいは他のコンピュータ記憶媒体が含まれる。通信媒体は、通常、コンピュータ可読命令、データ構造、プログラムモジュール、または他のデータを、情報伝達媒体を含む搬送波や他のトランスポート機構などの変調データ信号として実施する。用語「変調データ信号」とは、信号中に情報を符号化するような方式でその特性の１つまたは複数を設定または変化させた信号を意味する。限定ではなく例として、通信媒体には、有線ネットワークや直接配線接続などの有線媒体と、音波、ＲＦ、赤外線、他の無線媒体などの無線媒体が含まれる。上記の媒体の組み合わせもコンピュータ読取り可能媒体の範囲に含まれる。
【００３０】
システムメモリ２３０は、読み取り専用メモリ（ＲＯＭ）２３１およびランダムアクセスメモリ（ＲＡＭ）２３２など、揮発性メモリおよび／または不揮発性メモリの形態のコンピュータ記憶媒体を含む。起動時などにコンピュータ２１０の要素間の情報転送を助ける基本ルーチンを含んだ基本入出力システム２３３（ＢＩＯＳ）は、通常、ＲＯＭ２３１に記憶される。ＲＡＭ２３２は、通例、処理装置２２０から即座にアクセスできる、かつ／または処理装置２２０によって現在操作中のデータおよび／またはプログラムモジュールを保持する。限定ではなく例として、図２には、オペレーティングシステム２３４、アプリケーションプログラム２３５、他のプログラムモジュール２３６、およびプログラムデータ２３７を示す。
【００３１】
コンピュータ２１０は、他の取り外し可能／取り外し不能、揮発性／不揮発性のコンピュータ記憶媒体も含むことができる。単なる例として、図２には、取り外し不能、不揮発性の磁気媒体の読み書きを行うハードディスクドライブ２４１、取り外し可能、不揮発性の磁気ディスク２５２の読み書きを行う磁気ディスクドライブ２５１、および、ＣＤ−ＲＯＭや他の光学媒体などの取り外し可能、不揮発性の光ディスク２５６の読み書きを行う光ディスクドライブ２５５を示す。例示的な動作環境で使用することができるこの他の取り外し可能／取り外し不能、揮発性／不揮発性のコンピュータ記憶媒体には、これらに限定しないが、磁気テープカセット、フラッシュメモリカード、デジタル多用途ディスク、デジタルビデオテープ、固体素子ＲＡＭ、固体素子ＲＯＭなどがある。ハードディスクドライブ２４１は、通例、インタフェース２４０など不揮発性メモリインタフェースを通じてシステムバス２２１に接続され、磁気ディスクドライブ２５１および光ディスクドライブ２５５は、通例、インタフェース２５０などの取り外し可能メモリインタフェースによりシステムバス２２１に接続される。
【００３２】
上記で説明し、図２に示すこれらのドライブとそれに関連付けられたコンピュータ記憶媒体は、コンピュータ可読命令、データ構造、プログラムモジュール、および他のデータの記憶をコンピュータ２１０に提供する。図２では、例えば、ハードディスクドライブ２４１にオペレーティングシステム２４４、アプリケーションプログラム２４５、他のプログラムモジュール２４６、およびプログラムデータ２４７が記憶されている。これらのコンポーネントは、オペレーティングシステム２３４、アプリケーションプログラム２３５、他のプログラムモジュール２３６、およびプログラムデータ２３７と同じでも異なってもよいことに留意されたい。ここでは、オペレーティングシステム２４４、アプリケーション２４５、他のプログラムモジュール２４６、プログラムデータ２４７には、それらが少なくとも異なるコピーであることを表すために異なる参照符号を付している。ユーザは、キーボード２６２やポインティングデバイス２６１などの入力装置を通じてコンピュータ２１０にコマンドと情報を入力することができ、ポインティングデバイス２６１は、一般にはマウス、トラックボール、タッチパッドと呼ばれる。他の入力装置（図示せず）には、マイクロフォン、ジョイスティック、ゲームパッド、衛星受信アンテナ、スキャナなどがある。これらおよび他の入力装置は、多くの場合、システムバスに結合されたユーザ入力インタフェース２６０を通じて処理装置２２０に接続されるが、パラレルポート、ゲームポート、ユニバーサルシリアルバス（ＵＳＢ）などの他のインタフェースおよびバス構造で接続してもよい。モニタ２９１または他のタイプの表示装置も、ビデオインタフェース２９０などのインタフェースを介してシステムバス２２１に接続される。モニタ以外に、コンピュータは、スピーカ２９７やプリンタ２９６などの他の周辺出力装置も含むことができ、それらは、入出力周辺インタフェース２９５を通じて接続することができる。
【００３３】
コンピュータ２１０は、リモートコンピュータ２８０などの１つまたは複数のリモートコンピュータとの論理接続を使用するネットワーク環境で動作することができる。リモートコンピュータ２８０は、パーソナルコンピュータ、サーバ、ルータ、ネットワークＰＣ、ピアデバイス、または他の一般的なネットワークノードであり、図２にはメモリ記憶装置２８１しか示さないが、通例は、コンピュータ２１０との関連で上述した要素の多くまたはすべてを含む。図２に示す論理接続は、ローカルエリアネットワーク（ＬＡＮ）２７１とワイドエリアネットワーク（ＷＡＮ）２７３を含むが、他のネットワークを含むこともできる。このようなネットワーク環境は、オフィス、企業内のコンピュータネットワーク、イントラネット、インターネットに一般的に見られるものである。
【００３４】
ＬＡＮネットワーキング環境において使用される場合、コンピュータ２１０は、ネットワークインタフェースあるいはアダプタ２７０を通じてＬＡＮ２７１に接続される。ＷＡＮネットワーキング環境において使用される場合、コンピュータ２１０は、通例、インターネットなどのＷＡＮ２７３を通じて通信を確立するためのモデム２７２または他の手段を含む。モデム２７２は内蔵型でも外付け型でもよく、入出力周辺インタフェース２９５または他の適切な機構を介してシステムバス２２１に接続することができる。ネットワーク環境では、コンピュータ２１０との関連で図示するプログラムモジュールまたはその一部は、遠隔のメモリ記憶装置に保存することができる。限定ではなく例として、図２ではリモートアプリケーションプログラム２８５がメモリ装置２８１にある。図のネットワーク接続は例示的なものに過ぎず、コンピュータ間に通信リンクを確立する他の手段を使用して良いことは理解されるだろう。
【００３５】
図３Ｂに、コンピューティングデバイスで実行することができるウェブサービス３００の一連の命令であるプログラム３００Ａと、ウェブサービス３００のインタフェースの記述である仕様３００Ｂ（図には「スペック」と示す）とを含むウェブサービス３００を示す。仕様３００Ｂは、ＷＳＤＬコントラクトと異なり、外部のウェブサービスがウェブサービス３００の操作を呼び出せる順序を記述するセーフティ規則（以降「セーフティ」という）を含んでいる。言い換えれば、各セーフティは、ウェブサービス３００によって提供されるサービスに外部のウェブサービスがアクセスするため、呼び出すことができるウェブサービス３００の操作の、許容されるあるいは正当な呼出しの順列を記述している。それらのセーフティが、ウェブサービス３００のサービスの利用を望む外部のウェブサービスにとって許容できない場合は、仮想コントラクトは形成されない。逆に、外部のウェブサービスにとってセーフティが許容できる場合は、仮想コントラクトが形成され、外部のウェブサービスとウェブサービス３００間の安全な相互運用性が可能となる。
【００３６】
図３Ａは、ウェブサービス３００の構造３０２を説明するブロック図を示す。サービス要素３０２Ａは、ポートのセット（図示せず）をまとめることにより、仕様３００Ｂで記述される他のサービスを分類的に区別する。各ポートは、ポートタイプに関連付けられる。構造３０２は、ポートタイプ３０２Ｂを有する。ポートタイプ３０２Ｂは、準備操作３０２Ｄ、ｄｏ  ｗｏｒｋ操作３０２Ｅ、クリーンアップ操作３０２Ｆなどの複数の操作を宣言する。説明を明確にするために、以下の説明では次の用語は下記のように使用される。用語「操作（ｏｐｅｒａｔｉｏｎ）」は、用語「メッセージ」と同義で使用される（これに対し、ＷＳＤＬコントラクトの用語「メッセージ」は操作への引数のみを意味する）。用語「パラメータ」は、操作への引数を意味するものとして使用される。用語「バインディング」は、２つのセーフティ間のプログラム上の関係を意味するものとして使用される。これについては下記で説明する（これに対し、ＷＳＤＬコントラクトの用語「バインディング」は、ポートタイプと特定の転送プロトコルとの関連付けを意味する）。
【００３７】
操作３０２Ｄ〜３０２Ｆが呼び出される順序は、（１）S=prepare.SW、（２）SW=（dowork）.SW+(cleanup)の形式を有するセーフティ３０２Ｃによって指定される。セーフティ３０２Ｃは、仕様３００Ｂの中の部分３０４によりテキストで表現される。図３Ｃを参照されたい。行３０４Ａは、ポートタイプの定義の開始を宣言するキーワードｐｏｒｔｔｙｐｅと、ポートタイプの名前である識別子「start_work_stop」と、そのポートタイプをプログラム的に定義するテキストのブロックの範囲を区切る開き中括弧「｛」含んでいる。「｛」は、これは対応する閉じ中括弧「｝」を持っている。行３０４Ｂは、文字列をパラメータとして取る準備操作３０２Ｄを宣言する。行３０４Ｃは、ｄｏｗｏｒｋ操作３０２Ｅとそのパラメータである文字列を宣言する。行３０４Ｃは、文字列パラメータを有するクリーンアップ操作３０２Ｆを宣言する。
【００３８】
行３０４Ｂ〜３０４Ｄで宣言されるこれらの操作は、外部のウェブサービスがウェブサービス３００のサービスにアクセスするために利用できる操作である。一部のウェブサービスについては、操作は、それらのウェブサービスと適正に相互運用性を持つように特定の順序で呼び出されなければならない。例えば、ウェブサービス３００では、準備操作３０２Ｄは、ｄｏｗｏｒｋ操作３０２より前に呼び出されなければならず、ｄｏｗｏｒｋ操作３０２Ｅは、クリーンアップ操作３０２Ｆを呼び出す前に呼び出されなければならない。この順序付けの情報を伝達できるように、本発明により１つまたは複数のセーフティを形成することができる。行３０４Ｅ、３０４Ｆを参照されたい。セーフティの順列のニュアンスは、図４に示す人間が読むことのできる構文４００（下記で説明する）か、または図７Ａに示すモデル構文７０２（下記で説明する）を使用して表現することができる。
【００３９】
行３０４Ｅ、３０４Ｆのセーフティは、次の２つの文で表すことができる。（１）S=prepare.SW、（２）SW=（dowork）.SW＋（cleanup）。文字Ｓは、第１のセーフティの名前であり、文字ＳＷは第２のセーフティの名前である。各等号「＝」は、そのセーフティが、等号「＝」の右側にある規則と等しくされることを意味する。セーフティＳのピリオド「．」の前には準備操作３０２Ｄがあり、これは、準備操作３０２Ｄを初めに呼び出し、その後セーフティＳＷが有効になることを意味する。ｄｏｗｏｒｋ操作３０２Ｅの後、セーフティＳＷの前にあるピリオド「．」は、ｄｏｗｏｒｋ操作３０２Ｅが呼び出され、その後セーフティＳＷの反復を行えることを意味する。すなわち、ｄｏｗｏｒｋ操作３０２Ｅの後にあるフレーズ「．ＳＷ」は、ｄｏｗｏｒｋ操作３０２Ｅのゼロ回または１回以上の呼び出しが可能であることを意味する。プラス記号「＋」は、準備操作３０２Ｄの呼び出しに続いてｄｏｗｏｒｋ操作３０２Ｅまたはクリーンアップ操作３０２Ｆのいずれかを呼び出してよいことを意味する。セーフティＳＷの文の最後に置かれたクリーンアップ操作３０２Ｆは、クリーンアップ操作３０２Ｆが最後に呼び出されるべきである、または、ウェブサービス３００のサービスを使用して外部のウェブサービスによって呼び出されるべきであることを意味する。セーフティＳおよびＳＷの後にある各セミコロン「；」は、行３０４Ｅ、３０４Ｆのセーフティの文の終わりを意味する。
【００４０】
ポートタイプとセーフティは、図４に示す人間が読むことのできる構文４００を使用して表現することができる（そしてその後仕様３００Ｂなどウェブサービスの仕様の中に入れられることが好ましい）。行４００Ａは、ポートの定義：porttype designator ｛signature*；safety｝を含み、ｐｏｒｔｔｙｐｅは、ポートタイプの定義の開始を宣言するキーワードであり、designatorはポートタイプの識別子であり、開き中括弧と閉じ中括弧の対は、ポートタイプを定義する表示の範囲を区切り、セーフティは、署名（signature）によって記述される操作を呼び出す順序を定義する規則を意味する。各署名（署名は２つ以上あってよい。そのことはアステリスク記号「＊」で示されている）は、行４００Ｂに示す構文表現「designator([designator:lineartype, designator:lineartype])」を有する。ここで、最初のdesignatorは、特定の操作の識別子であり、括弧の対で囲まれた２番目および３番目のdesignatorは、その操作のパラメータの識別子を表し、２つのlineartypeは、各パラメータのデータ型を定義する（説明を簡潔にするために、行４００Ｂの署名には２つのみのパラメータスロットを定義するが、３つ以上のパラメータスロットが可能である）。コロン「：」は、コロンの左側にあるパラメータのdesignatorが、コロンの右側で宣言されるデータ型を有することを意味し、コンマ「，」は、１つのパラメータと別のパラメータを区切り、括弧の対「（）」は、その操作で使用されるパラメータとそのタイプを区切る。
【００４１】
行４００Ｃ〜４００Ｉは、各種タイプのセーフティを定義する。行４００Ｃではストップセーフティが宣言される。ストップセーフティは、セーフティの非アクティブ状態または終了を表す。行４００Ｄで宣言される順序のセーフティは、ウェブサービスの操作あるいはメッセージを呼び出す順序を定義する。行４００Ｅで宣言される選択セーフティは、セーフティ中で選択することができる選択肢を表す。行４００Ｇでは、同時に行われる２つのセーフティの分散処理を表す並行セーフティが定義される。その使用がセーフティ中で再帰的である変数を定義する再帰セーフティが、行４００Ｈで宣言される。行４００Ｉで宣言される参照セーフティは、他のセーフティとともに使用される名前をセーフティに与えることができることを意味する。行４００Ｊは、ストップセーフティが記号ゼロ「０」からなることを示す。順序のセーフティは、機能の署名と、次いでピリオド「．」と、その後に続く別のセーフティで構成される。行４００Ｋを参照されたい。選択のセーフティは、プラス記号「＋」で区切られた２つのセーフティから構成される（行４００Ｌ参照）。行４００Ｎで定義される並行セーフティは、垂直記号「｜」で区切られた２つのセーフティからなる。再帰セーフティは、キーワード「ｒｅｃ」と、その後の識別子を囲む一対の括弧と、それに続くピリオドと別のセーフティ規則とからなる。行４００Ｏを参照されたい。再帰セーフティを使用すると、セーフティ（S=prepare.SW; SW=(dowork).SW+(cleanup))を、セーフティ(prepare.rec(SW).((dowork).SW+(cleanup)))と同じ意味に書くことができる。行４００Ｐは、参照セーフティは単にdesignatorであることを示し、designatorは、名前あるいは識別子である。
【００４２】
人間が読むことのできる構文４００を使用すると、セーフティの表現上のニュアンスを指定して、ウェブサービス間の安全な相互運用性を強化することができる。各セーフティは、ウェブサービスの仕様のポートタイプ定義に置かれることが好ましい。説明を分かりやすくするために、人間が読むことのできる構文４００を図４以降の図に示す。より制約はあるが同等の表現力があるのは、図７Ａに示すモデル構文７０２（下記に説明する）である。人間が読むことのできる構文とモデル構文７０２はいずれも、カスタマイズが可能なタグ方式の適切な言語を使用して形成することができる。適切な言語の１つにＸＭＬスキーマ言語がある。カスタマイズ可能なタグ方式の言語を使用することにより、本発明により形成されるセーフティを、ＷＳＤＬコントラクトの既存のポートタイプ定義に適合させることができる。
【００４３】
図５Ａにファイルサーバウェブサービス５０２をブロック図の形態で示す。ファイルサーバウェブサービスは、ネットワーク上の他のウェブサービスにファイルストレージサービスを提供する。ディスクサーバと異なり、ファイルサーバウェブサービス５０２は、ファイルを記憶するだけでなく、ファイルを管理し、他のウェブサービスがファイルを要求し、ファイルに変更を加えるのに従って秩序を維持する。ウェブサービス５０２は、ファイルに対する複数の（時には同時の）要求に対処するタスクに対応するために、プロセッサおよび制御ソフトウェア、ならびに記憶用のディスクドライブと対話をする。
【００４４】
ファイルサーバウェブサービス５０２は、諸要素（図示せず）の中でも特にサービス要素５０２Ａとポートタイプ５０２Ｂを含む。ポートタイプ５０２Ｂは、ｏｐｅｎ操作５０２Ｄ、ｒｅａｄ操作５０２Ｅ、ｗｒｉｔｅ操作５０２Ｆ、ｃｌｏｓｅ操作５０２Ｇなどの複数の操作を定義する。これらの操作５０２Ｄ〜５０２Ｇはさらに、ファイルサーバウェブサービスの仕様の部分５０４で定義される。図５Ｂを参照されたい。ポートタイプ５０２Ｂはセーフティ５０２Ｃも定義し、セーフティ５０２Ｃは、操作５０２Ｄ〜５０２Ｇを介してファイルサーバウェブサービス５０２Ｄによって提供されるサービスに外部のウェブサービスがアクセスする順序を指定する。セーフティ５０２Ｃはさらに部分５０４の中で定義される。行５０４Ｆ、５０４Ｇを参照されたい。ファイルサーバウェブサービス５０２のポート５０２Ｈは、操作５０２Ｄ〜５０２Ｇを呼び出すことによりファイルサーバウェブサービス５０２Ｂのサービスにアクセスするために、他のウェブサービスが結合することを可能にする（下記、より詳細に説明する）。
【００４５】
部分５０４は、ファイルサーバウェブサービスの仕様の多数のポートタイプのうち、１つのポートタイプの定義に的を絞っている。行５０４Ａは、キーワードｐｏｒｔｔｙｐｅと、その後の識別子「ｆｉｌｅｓｅｒｖｅｒ」と、ファイルサーバポートタイプ５０２Ｂの定義の範囲を区切る開き中括弧と閉じ中括弧の対とを含んでいる。行５０４Ｂは、ファイル名をパラメータとするｏｐｅｎ操作５０２Ｄの署名を宣言する。すべての事例において、ファイルサーバウェブサービス５０２のサービスを使用するには、外部サービスは、ｏｐｅｎ操作５０２Ｄを介して、開くファイルの名前を指定する。したがって、ｏｐｅｎ操作５０２Ｄは、１回ごとの特定のファイルサーバセッションにおいて、外部のウェブサービスによって呼び出される最初の操作となる。行５０４Ｃでｒｅａｄ操作５０２Ｅが宣言される。ｒｅａｄ操作は、クライアントのポートをパラメータとして取る。ｒｅａｄ操作５０２Ｅが外部のウェブサービスによって呼び出されると、ファイルサーバウェブサービス５０２は、開かれたファイルからデータのまとまりを読み出し、読み出したデータを所与のクライアントのポートに送信する。外部のウェブサービスは、行５０４Ｄで宣言されるｗｒｉｔｅ操作５０２Ｆを介して、開かれたファイルに情報を書き込むこともできる。ｗｒｉｔｅ操作は、データをパラメータとして取る。このデータは、ｗｒｉｔｅ操作で、開かれたファイルに書き込まれる。開かれたファイルにすべての所望の操作が実行されると、行５０４Ｅで宣言されるｃｌｏｓｅ操作５０２Ｇを介して、開かれたファイルを閉じることができる。ｃｌｏｓｅ操作５０２Ｇはファイル名を引数として取るので、閉じるファイルが分かる。
【００４６】
行５０４Ｆ〜５０４Ｇは、ファイルサーバポートタイプ５０２Ｂのセーフティを含む。行５０４Ｆはセーフティ文：S=open.Srwを含み、Ｓはセーフティ規則であり、ｏｐｅｎは、ｏｐｅｎ操作５０２Ｄがファイルサーバセッションで呼び出される最初の操作であることを意味する。ピリオド「．」は、ｏｐｅｎ操作５０２Ｄの呼び出しの後にさらにセーフティがあることを意味し、Ｓｒｗは、行５０４Ｇでさらに定義される第２のセーフティを参照する。行５０４Ｇは、次のセーフティ文：Srw=read.Srw+write.Srw+closeを含み、Ｓｒｗは第２のセーフティを表し、ｒｅａｄ．Ｓｒｗは、ｒｅａｄ操作５０２Ｅの呼び出しを表す。その後に再び第２のセーフティが続き（再帰）、ｗｒｉｔｅ．Ｓｒｗは、ｗｒｉｔｅ操作５０２Ｆの呼び出しを意味し、その後に第２のセーフティが再帰的に続き、ｃｌｏｓｅは、ｃｌｏｓｅ操作５０２Ｇの呼び出しを表す。プラス記号「＋」は、外部のウェブサービスがｒｅａｄ操作５０２Ｅ、ｗｒｉｔｅ操作５０２Ｆ、またはｃｌｏｓｅ操作５０２Ｇの中から呼び出すのに行うことができる選択肢を意味している。
【００４７】
システム５００は、仮想コントラクトが作成された後のウェブサービス５０２、５０８の相互運用性を示す。図５Ｃを参照されたい。ウェブサービス５０２、５０８の間のポート５０２Ｈ、５０８Ａのポートタイプに適合性がある場合に、仮想コントラクトが作成される。より詳細には、仮想コントラクトは、ポート５０２Ｈ、５０８Ａのポートタイプのセーフティがウェブサービス５０２と５０８の両方にとって許容できる時に作成される。仮想コントラクトは物理的に存在するものではなく、ウェブサービス５０２、５０８間の安全な相互運用性を保証する形でポートタイプのセーフティが互いに合致する場合に存在する。図を見やすくするために、ファイルサーバウェブサービス５０２の要素の多くは図５Ｃに示さない。ファイルサーバウェブサービス５０２は、携帯電話５０６などのコンピューティングデバイスで実行することができ、クライアントウェブサービス５０８は、携帯情報端末５１０などのコンピューティングデバイスにおいて実行することができ、ストアウェブサービス５１２は、デスクトップコンピュータ５１４などのコンピューティングデバイスで実行することができる。
【００４８】
図５Ｃにおいては、クライアントウェブサービス５０８のポート５０８Ａは、ファイルサーバウェブサービス５０２のポート５０２Ｈと結合（ｆｕｓｅｄ）される。クライアントウェブサービス５０８とファイルサーバウェブサービス５０２間のこの結合は、クライアントウェブサービス５０８が、ファイルサーバのポートタイプ５０２Ｂのセーフティに準拠する意思があることを示した後に可能となる。ポート５０８Ａと５０２Ｈが結合すると、クライアントウェブサービス５０８は、ファイルサーバポートタイプのセーフティによって指定される方式によって、ファイルサーバウェブサービス５０２の操作５０２Ｄ〜５０２Ｇにアクセスし、呼び出すことができる。
【００４９】
ここで、クライアントウェブサーバ５０８は、既にｏｐｅｎ操作５０２Ｄを呼び出してファイルを開いているとする。クライアントウェブサーバ５０８は、ｒｅａｄ操作５０２Ｅを呼び出して読み出されたデータを取得することができる。ｒｅａｄ操作５０２Ｅを呼び出す際、クライアントウェブサービス５０８は、ｒｅａｄ操作５０２Ｅを呼び出した後に読み出されたデータを受け取るポート５０８Ｂを与える。ファイルサーバウェブサービス５０２は、読み出されたデータをポート５０８Ｂに送信するポート５０２Ｉを含んでいる。ただし、ポート５０８Ｂがクライアントウェブサービス５０８にある現実のポートである必要はない。ポート５０８Ｂは、ストアウェブサービス５１２などの別のウェブサービスによって仮想的に与えられることができる。クライアントウェブサービス５０８とストアウェブサービス５１２の間に仮想コントラクトが形成されて、クライアントウェブサービス５０８によって要求される特定の方式によって情報を記憶している可能性がある。クライアントウェブサービスは、ポート５０８Ｂをｒｅａｄ操作５０２Ｅへのパラメータとして与える代わりに、ストアウェブサービス５１２のポート５１２Ａを与えることができる。すなわち、ｒｅａｄ操作５０２Ｅにより読み出されたデータは、自動的にストアウェブサービス５１２に転送される。これは、ファイルサーバウェブサービス５０２に知られずに行うことができる。したがって、各ポートは、ウェブサービスの通信の可能性を拡張するためにウェブサービスに与えることができる転送可能な量になる。この例では、ファイルサーバウェブサービス５０２の当初の範囲は、クライアントウェブサービス５０８との対話に限定さている。しかし、ポート５１２Ａがクライアントウェブサービス５０８を介してファイルサーバウェブサービス５０２に転送される際には、拡大され、ストアウェブサービス５１２を含むことができる。
【００５０】
ストアウェブサービス５１２とのファイルサーバウェブサービス５０２の結合のようなウェブサービスの結合は、本発明により形成されるセーフティの使用を通じて仮想コントラクトを介して達成される。このウェブサービスの結合は、ウェブサービスの安全な相互運用性を高めて、各ウェブサービスが単独で提供できる機能よりも多くの機能を生み出す。さらに、ウェブサービスの結合はプログラム的に形成されるので、ウェブサービスのセーフティが準拠される場合は、ウェブサービスの信用性、信頼性、可用性が高まる。本発明により形成されるプログラム的な結合は、ウェブサービスの相互運用性における誤り、要求の損失、無効な要求が生じた場合の障害、あるいは破損した永続データを低減あるいは解消する。
【００５１】
図３Ａ〜図３Ｃに関連する上記の説明は、ウェブサービスの仕様にセーフティの概念を導入する。ポートタイプは、所望のウェブサービスによって提供されるサービスに、外部のウェブサービスがアクセスするために呼び出すことができる操作の宣言を含むので、セーフティはポートタイプの中に置かれることが好ましい。これも上で述べたように、セーフティは、外部のウェブサービスが、所望のサービスを得るために所望のウェブサービスの操作を呼び出すべき順序を記述する。外部のウェブサービスが初めに別のウェブサービスのセーフティに準拠することができない場合は、２つのウェブサービス間には拘束力のある同意（仮想コントラクト）は存在せず、準拠しないウェブサービスは、相手のウェブサービスのサービスを呼び出すことができない。２つのウェブサービス間における仮想コントラクトの作成の一例は、上において図５Ａ〜図５Ｃとともに述べた。クライアントウェブサービス５０８は、ファイルサーバウェブサービス５０２のセーフティに準拠することが可能なので、クライアントウェブサービス５０８のポート５０８Ａは、ファイルサーバウェブサービス５０２のポート５０２Ｈと結合させることができる。このような結合により、クライアントウェブサービス５０８は、ポート５０２Ｈにおいてファイルサーバウェブサービス５０２のサービスを呼び出すことができる。より詳細には、仮想コントラクトは、クライアントウェブサービス５０８のポート５０８Ａのポートタイプが、ファイルサーバウェブサービス５０２のポート５０２Ｈのポートタイプとプログラム的に適合性がある（すなわちそのセーフティに準拠する）ときに作成することができる。図６Ａ〜図６Ｉに関連する説明では、２つのウェブサービス間において仮想コントラクトを形成するのではなく、本発明により形成される３つのウェブサービス（購入者ウェブサービス６０２、納入者ウェブサービス６０６、および発送者ウェブサービス６１０）間の拘束のある同意を対象としている。ただし、仮想コントラクトは、各ウェブサービスが他の関係ウェブサービスのセーフティに準拠することが可能であれば、関係するウェブサービスの数には関係なく形成することができる。
【００５２】
購入者ウェブサービス６０２は、諸要素（図示せず）の中でも特にサービス要素６０２Ａとポートタイプ要素６０２Ｂを含む。ポートタイプ６０２Ｂは、購入開始操作６０２Ｄ、購入確認操作６０２Ｅ、および操作６０２Ｄ〜６０２Ｅの呼び出しを指定するセーフティ６０２Ｃを含んでいる。購入者ウェブサービス６０２は、そのデータ型がポートタイプ６０２Ｂであるポート６０２Ｆも含んでいる。図６Ａを参照されたい。購入者ウェブサービスの仕様の一部６０４を図６Ｂに示す。行６０４Ａは、キーワードｐｏｒｔｔｙｐｅと、ポートタイプの識別子「ｐｕｒｃｈａｓｅｒ」と、購入者ポートタイプ６０２Ｂの定義の範囲を区切る対応する閉じ中括弧を持った開き中括弧「｛」とを含んでいる。行６０４Ｂは、購入開始操作６０２Ｄの署名を含み、操作６０２Ｄは２つのパラメータを有する。パラメータの１つは、「ＰＯ」と表される購入注文パラメータである。もう１つのパラメータは、事前出荷通知「〜ＡＳＮ」であり、チルダ「〜」は、購入者ウェブサービス６０２が、パラメータＡＳＮで表されるデータを消費することを意味する。行６０４Ｃは、購入確認操作６０２Ｅの署名を含み、操作６０２Ｅは、「ｉｎｖｏｉｃｅ」パラメータと「ｇｏｏｄｓ」パラメータを取る。ｉｎｖｏｉｃｅパラメータは、購入者ウェブサービス６０２がｉｎｖｏｉｃｅパラメータで表されるデータを消費することを意味するチルダ「〜」で修飾される。ＰＯパラメータと商品パラメータは、ともにチルダでは修飾されず、したがって、購入者ウェブサービス６０２がそれらのパラメータで表されるデータの生成側あるいは供給側であることを表している。行６０４Ｄは、購入者ポートタイプ６０２Ｂのセーフティを含む。簡潔に述べると、購入開始操作６０２Ｄの呼び出しは購入確認操作６０２Ｅの呼び出しの前に行われなければならず、購入確認操作６０２Ｅの後に操作６０２Ｄ、６０２Ｅの呼び出しの反復が続く。
【００５３】
図６Ｃに納入者ウェブサービス６０６をブロック図の形態で示す。納入者ウェブサービス６０６は、諸要素（図示せず）の中でも特にサービス要素６０６Ａとポートタイプ要素６０６Ｂを含む。ポートタイプ６０６Ｂは、納入者ウェブサービス６０６のポート６０６Ｆのデータ型である。ポートタイプ６０６Ｂは、ＰＯ受け取り操作６０６Ｄ、納品伝票送付操作６０６Ｅ、および、操作６０６Ｄ、６０６Ｅの呼び出しの順序を指定するセーフティ６０６Ｃを含んでいる。納入者ウェブサービス６０６は、そのデータ型がポートタイプ６０６Ｂであるポート６０６Ｆも含んでいる。納入者ウェブサービスの仕様の一部分６０８を図６Ｄに示す。行６０８Ａは、納入者ポートタイプ６０６Ｂの宣言を含み、納入者ポートタイプ６０６Ｂの宣言の範囲を区切る、対応する閉じ中括弧を持つ開き中括弧「｛」を含む。行６０８Ｂは、ＰＯ受け取り操作の署名を含み、この操作は購入注文「〜ＰＯ」をパラメータとして取る。チルダは、納入者ウェブサービス６０６が、購入注文〜ＰＯパラメータで表されるデータを消費することを意味する。行６０８Ｃは、納品伝票送付操作６０６Ｅの署名を含み、操作６０６Ｅは納品伝票をパラメータとして取る。行６０８Ｄは、納入者ポートタイプ６０６Ｂのセーフティを含む。簡潔に述べれば、ＰＯ受領操作６０６Ｄは、納品伝票送付操作６０６Ｅの呼び出しの前に呼び出され、納品伝票送付操作６０６Ｅの後に操作６０６Ｄ、６０６Ｅの呼び出しの反復が続くことができる。
【００５４】
図６Ｅに示すように、発送者ウェブサービス６１０は、諸要素（図示せず）の中でも特にサービス要素６１０Ａとポートタイプ要素６１０Ｂを含んでいる。ポートタイプ６１０Ｂは、発送者ウェブサービス６１０のポート６１０Ｆのデータ型を記述する。ポートタイプ６１０Ｂは、出荷通知操作６１０Ｄ、受領確認操作６１０Ｅ、および、操作６１０Ｄ、６１０Ｅの呼び出しの順序を指定するセーフティ６１０Ｃを含んでいる。発送者ウェブサービスの仕様の一部６１２を図６Ｆにテキスト形態で示す。行６１２Ａは、発送者ポートタイプ６１０Ｂの宣言と、発送者ポートタイプ６１０Ｂの宣言の範囲を区切る対応する閉じ中括弧「｝」を含む開き中括弧「｛」とを含んでいる。行６１２Ｂは、出荷通知操作６１０Ｄの署名を含み、この操作は、事前出荷通知「ＡＳＮ」をパラメータとして取る。事前出荷通知ＡＳＮはチルダで修飾されないので、発送者ウェブサービス６１０は、ＡＳＮパラメータで表されるデータの生成側あるいは供給側となる。行６１２Ｃは、受領確認操作６１０Ｅの署名を含み、この操作は、「〜ｇｏｏｄｓ」を引数として取る。識別子「ｇｏｏｄｓ」の前にあるチルダは、発送者ウェブサービス６１０が、「ｇｏｏｄｓ」パラメータで表されるデータの消費側であることを意味する。行６１２Ｄは、発送者ポートタイプ６１０Ｂのセーフティを含む。簡潔に述べれば、出荷通知操作６１０Ｄの呼び出しは、受領確認操作６１０Ｅの呼び出しの前に行われ、その後操作６１０Ｅ、６１０Ｅの呼び出しの反復を行うことができる。
【００５５】
購入者ウェブサービス６０２、納入者ウェブサービス６０６、発送者ウェブサービス６１０の複合を表すプログラムの一部６１４を図６Ｇに示す。行６１４Ａは、購入者ウェブサービス６０２の署名を含み、このサービスは、購入者のポートタイプ６０２Ｂを有する「ＰＣ」と表されるポートを有する。行６１４Ｂは、納入者ウェブサービス６０６の署名を含み、サービス６０６は、納入者のポートタイプ６０６Ｂを有する「ＰＳ」と表されるポートを有する。行６１４Ｃは、発送者ウェブサービス６１０の署名を含み、ウェブサービス６１０は、発送者のポートタイプ６１０Ｂを有する「ＰＨ」と表されるポートを有する。
【００５６】
行６１４Ｉは、ウェブサービスの定義またはウェブサービスの複合の開始を示すキーワードｓｅｒｖｉｃｅと、ウェブサービス６０２、６０６、６１０の複合の名前を表す識別子「scm-purchaser-supplier-shipper」と、ウェブサービスの複合の定義の範囲を区切る、対応する閉じ中括弧「｝」を有する開き中括弧「｛」と含む。行６１４Ｊは、ポートの一意の名前を定義し、そのポートを特定のポートタイプに関連付けるキーワードｎｅｗと、購入者ポートタイプ６０２Ｂの新しいポート「ＰＣ」と、納入者ポートタイプ６０６Ｂの新しいポート「ＰＳ」と、発送者ポートタイプ６１０Ｂの新しいポート「ＰＨ」と、それら新しいポートＰＣ、ＰＳ、ＰＨの操作の範囲を区切る、対応する閉じ中括弧「｝」を有する開き中括弧「｛」とを含む。行６１４Ｋは、開き中括弧「｛」とそれに対応する閉じ中括弧「｝」との間に表されるサービスとプロセスが並行して実行されることを意味するキーワードｐａｒａｌｌｅｌを含む。
【００５７】
行６１４Ｌは、「scm_purchaser-supplier」と称される別のウェブサービス複合の呼び出しを含み、このサービスは、ポートＰＣ、ＰＳをパラメータとして取る。主題を外れるが、ウェブサービスの複合「scm_purchaser-supplier」の定義は、行６１４Ｄで開始する。行６１４Ｄは、ウェブサービスの定義またはウェブサービスの複合が始まることを示すキーワードｓｅｒｖｉｃｅと、ウェブサービスの複合の名前を示す識別子「scm_purchaser-supplier」と、購入者ポートタイプ６０２Ｂのポート６０２ＦであるパラメータＰＣと、納入者ポートタイプ６１０Ｂのポート６１０ＦであるパラメータＰＳと、ウェブサービスの複合scm_purchaser-supplierの定義の範囲を区切る、対応する閉じ中括弧「」」を有する開き中括弧「｛｝とを含む。行６１４Ｅは、開き中括弧「｛｝と閉じ中括弧「」」の間に定義されるウェブサービスとプロセスが並行して実行されることを意味するキーワードｐａｒａｌｌｅｌを含む。行６１４Ｆは、ＰＣと表されるポート６０２Ｆによって購入者ウェブサービス６０２を呼び出す。行６１４Ｇは、ＰＳと表されるポート６０６Ｆによって納入者ウェブサービス６０６を呼び出す。行６１４Ｈは、本発明により形成される結合機構を呼び出して、ポート６０２Ｆ（ＰＣと表される）とポート６０６Ｆ（ＰＳと表される）を結合する。ポート６０２Ｆと６０６Ｆを結合できるかどうかは、購入者ウェブサービス６０２のポートタイプ６０２Ｂが納入者ウェブサービス６０６のポートタイプ６０６Ｂと適合性があるかどうかによって決まる。より詳細には、購入者ウェブサービス６０２のセーフティ６０２Ｃを納入者ウェブサービス６０６のセーフティ６０６Ｃと合致させて、入力から保護されたプロセスを生成することができる場合に、ポート６０２Ｆと６０６Ｆの結合が可能となる。すなわち、セーフティ６０２Ｏと６０６Ｃを合致させることができる場合は、購入者ウェブサービス６０２と納入者ウェブサービス６０６の間でポート６０２Ｆと６０６Ｆを結合することはプログラム的に安全となる。購入者ウェブサービス６０２と納入者ウェブサービス６０６の間の安全な相互運用性のために、仮想コントラクトが作成することができる。これについては図８Ａ〜図８Ｏとともに、以下に詳細に説明する。
【００５８】
ウェブサービスの複合scm_purchaser_supplier_shipperの定義に戻ると、行６１４Ｍは発送者ウェブサービス６１０の呼び出しを含んでおり、サービス６１０はＰＨと表されるポート６１０Ｆをパラメータとして取る。行６１４Ｎは、ポート６０２Ｆ（ＰＣ）とポート６１０Ｆ（ＰＨ）の間での本発明により形成される結合機構の呼び出しを含む。セーフティあるいはポートタイプ間に適合性がないためにポート間の結合が実現することができない場合は、ポートは結合されない。
【００５９】
図６Ｈは、購入者ウェブサービス６０２、納入者ウェブサービス６０６、および発送者ウェブサービス６１０を含むシステム６００における操作の呼び出しの動的な視覚表現である。システム６００は、購入開始操作６０２Ｄの呼び出しと、購入注文（ＰＯ）の生成とともに実行を開始する。次いで、購入者ウェブサービス６０２は、納入者ウェブサービス６０６のＰＯ受領操作６０６Ｄを呼び出し、生成された購入注文（ＰＯ）を与え、その購入注文（〜ＰＯ）は納入者ウェブサービス６０６によって消費される。次いで、納品伝票の生成に伴い、納品伝票送付操作６０６Ｅが呼び出される。納入者ウェブサービス６０６は次いで、購入注文操作６０２Ｅまたは購入者ウェブサービス６０２を呼び出し、生成された納品伝票（ｉｎｖｏｉｃｅ）を与え、生成された納品伝票（〜ｉｎｖｏｉｃｅ）が購入者ウェブサービス６０２によって消費される。次いで、納入者ウェブサービス６０６は発送者ウェブサービス６１０の出荷通知操作６１０Ｄを呼び出し、事前出荷通知（ＡＳＮ）を与える。次いで発送者ウェブサービス６１０は、事前出荷通知（ＡＳＮ）を購入者ウェブサービス６０２に与え、購入者ウェブサービス６０２は事前出荷通知（〜ＡＳＮ）を消費する。購入者ウェブサービス６０２は次いで、発送者ウェブサービス６１０の受領確認操作６１０Ｅを呼び出し、商品の受領（ｇｏｏｄｓ）を与える。そして、発送者ウェブサービス６１０は商品の受領（ｇｏｏｄｓ）を与え、その商品の受領（〜ｇｏｏｄｓ）が購入者ウェブサービス６０２によって消費される。
【００６０】
図６Ｈの前述の説明は、セーフティ６０２Ｃ、６０６Ｃ、６１０Ｃによって指定される呼び出しの順序を具体的に示している。ただし、ウェブサービス６０２〜６１０間の相互運用性は、メッセージの生成と消費を考察することにより、より良く理解することができる。図６Ｉを参照されたい。システム６００は、購入者ウェブサービス６０２のポート６０２Ｆにおいて購入注文（ＰＯ）が生成され、その購入注文（ＰＯ）が消費される場である納入者ウェブサービス６０６のポート６０６Ｆに送信されると開始する。購入注文（ＰＯ）の生成は、購入開始操作６０２Ｄのパラメータリストのチルダ「〜」がない識別子ＰＯによって表される。購入注文（ＰＯ）の完了は、パラメータ〜ＰＯを有するＰＯ受領操作６０６Ｄで表される。ポート６０２Ｆが購入注文（ＰＯ）を送信しているが、事前出荷通知（〜ＡＳＮ）を受け取っていないため、購入開始操作６０２Ｄで広く表される第１のプロセスは、非アクティブになる（セーフティ６０２Ｃのため）。ポート６０６Ｆが購入注文（〜ＰＯ）を受け取っているので、ＰＯ受領操作６０６Ｄで広く表される第２のプロセスは、納品伝票送付操作６０６Ｅによって広く表される第３のプロセスに継続する（セーフティ６０６Ｃのため）。第３のプロセスがアクティブな状態で、ポート６０６Ｆにおいて納品伝票が生成され、購入者ウェブサービス６０２のポート６０２Ｆに送信され、ウェブサービス６０２で納品伝票が消費される。これでセーフティ６０６Ｃが満たされたことになる。納品伝票の生成は、納品伝票送付操作６０６Ｅで表され、納品伝票の完了は、購入確認操作６０２Ｅで表される。ポート６０２Ｆが事前出荷通知（〜ＡＳＮ）を受け取っていないため、購入確認操作６０２Ｅで広く表される第４のプロセスは、（セーフティ６０２Ｃのために）非アクティブになる。納入者ウェブサービス６０６がポート６０６Ｆにおいて購入注文（ＰＯ）を受け取ると、納入者ウェブサービス６０６と発送者ウェブサービス６０２の間でミニ通信が行われる。事前出荷通知（ＡＳＮ）は、ポート６１０Ｆにおいて発送者ウェブサービス６１０によって生成され、購入者ウェブサービス６０２のポート６０２Ｆに送られ、ウェブサービス６０２で消費される。ポート６１０Ｆが事前出荷通知（ＡＳＮ）を送っているので、出荷通知操作６１０Ｄで広く表される第５のプロセスは、受領確認操作６１０Ｅによって広く表される第６のプロセスへと継続するが（セーフティ６１０Ｃのため）、ポート６１０Ｆが商品の受領（〜ｇｏｏｄｓ）を受け取っていないので、第６のプロセスは非アクティブになる。ポート６０２Ｆが事前出荷通知（〜ＡＳＮ）を受け取っているので、購入開始操作６０２Ｄで広く表される第１のプロセスはアクティブになり、購入確認操作６０２Ｅで広く表される第４のプロセスに続く（セーフティ６０２Ｃのため）。事前出荷通知（ＡＳＮ）の生成は、出荷通知操作６０２Ｄで表され、事前出荷通知（ＡＳＮ）の完了は、購入開始操作６０２Ｄによって表される。ポート６０２Ｆが事前出荷通知（〜ＡＳＮ）を受け取っているので、購入確認操作６０２Ｅで広く表される第４のプロセスは（セーフティ６０２Ｃのために）アクティブになる。第４のプロセスがアクティブな状態で、購入者ウェブサービス６０２のポート６０２Ｆで商品の受領（ｇｏｏｄｓ）が生成され、発送者ウェブサービス６１０のポート６１０Ｆに送られ、ウェブサービス６１０で消費される。商品の受領（ｇｏｏｄｓ）の生成は、購入確認操作６０２Ｅで表され、商品の受領（ｇｏｏｄｓ）の完了は、受領確認操作６１０Ｅで表される０２Ｅで表され、商品の受領（ｇｏｏｄｓ）の完了は、受領確認操作６１０Ｅで表される。セーフティ６０２Ｃは、商品の受領（ｇｏｏｄｓ）が生成されることによって満たされる。ポート６１０Ｆが商品の受領（〜ｇｏｏｄｓ）を受け取り、それによりセーフティ６１０Ｃが満たされるので、受領確認操作６１０Ｅで広く表される第６のプロセスはアクティブになる。上記の説明は、本発明によって形成されるセーフティを使用して処理上のニュアンスが表される場合のメッセージと操作の固有の同期（アクティブな状態と非アクティブな状態）を示す。
【００６１】
ポートタイプのモデル構文７０２を図７Ａに示す。モデル構文７０２の各種の要素は、人間が読むことのできる構文４００の要素（行４００Ｃ〜４００Ｐに記述されるセーフティの構文カテゴリ）と同様である。文字ＰＴ  ７０２Ｅは、ポートタイプの定義：porttype name {(M;)* S;}を含み、ｐｏｒｔｔｙｐｅは、ポートタイプの定義の開始を宣言するキーワードであり、ｎａｍｅはポートタイプの名前であり、開き中括弧と閉じ中括弧の対はポートタイプを定義する表示の範囲を区切り、文字Ｍはメッセージ（下記で説明する）を含み、文字Ｓ（下記で説明する）は１つまたは複数のセーフティを表す。文字Ｓ  ７０２Ａは、モデル構文７０２の各種要素で定義される、名前が付けられたセーフティの集まりを表す。記号「０」７０２Ｂは、非アクティブなセーフティあるいはストップセーフティを表す。フレーズ「Ｍ．Ｓ」７０２Ｃは、順序のセーフティを表し、文字Ｍは、メッセージタイプ７０２Ｉを表し、その後に別のセーフティ７０２Ａが続く。フレーズ「Ｓ０＋Ｓ１」７０２Ｄは、セーフティＳ０を実行するか、セーフティＳ１を実行するかで行われる選択を表す。フレーズ「Ｓ０｜Ｓ１」７０２Ｆは、セーフティＳ０とＳ１の並行した実行を意味する。フレーズ「ｒｅｃ（Ｋ）．Ｓ」７０２Ｇは、セーフティＳにおける名前Ｋ  ７０２Ｊの再帰を意味する。フレーズ「Ｋ」７０２Ｈは、セーフティ７０２Ａに名前を与えることができることを意味する。
【００６２】
図７Ｂにシステム７００を示している。これは、第１のウェブサービス７０６と第２のウェブサービス７１０の間の相互運用性を示し、第１のウェブサービス７０６は、セーフティＳ１  ７０６Ｄ、メッセージ１操作７０６Ｂ、メッセージ２操作７０６Ｃ、およびポート７０６Ｄを有する。第２のウェブサービス７１０は、セーフティＳ２  ７１０Ａ、メッセージ３操作７１０Ｂ、メッセージ４操作７１０Ｃ、およびポート７１０Ｄを含む。図７Ｂでは、第１のウェブサービス７０６と第２のウェブサービス７１０が結合線７０３で結合される。
【００６３】
図８Ａ〜図８Ｏに、第１のウェブサービス７０６と第２のウェブサービス７１０などウェブサービス間に相互運用性を形成する方法８００を示す。説明を分かりやすくするために、以下の方法８００の説明では、図７Ａ〜図７Ｂに示すモデル構文７０２とシステム７００とともに説明した各種の要素を参照する。方法８００は、開始ブロックから継続端子（「端子Ａ」）と終了端子（「端子Ｂ」）の間に定義された方法ステップのセット８０２に進む。方法ステップのセット８０２においては、第１および第２のウェブサービス７０６、７１０のウェブサービスプログラムに対応するウェブサービス仕様の作成を記述する。
【００６４】
端子Ａ（図８Ｂ）から、方法８００はブロック８０８に進み、開発者が第１のウェブサービス７０６の仕様の抽象的定義を作成する。仕様の抽象的定義は、データ型、メッセージ、およびポートタイプの定義を含む。次いで、開発者は、仕様の具体的記述を作成する。ブロック８１０を参照されたい。具体的記述は、プロトコル、シリアライゼーション、およびデータの符号化が指定されるバインディング（下記の本発明により形成されるバインディング機構と混同されないよう）を含む。具体的記述にはサービス要素が含まれ、これは、各バインディングのポートアドレスを指定する。開発者は次いで、第１のウェブサービス７０６の仕様のメッセージ１操作７０６Ｂおよびメッセージ２操作７０６Ｃなどの操作の呼び出しを支配するセーフティＳ１  ７０６Ａを作成する。ブロック８１２を参照されたい。次いで、開発者は、セーフティＳ１  ７０６Ａ（以降「Ｓ１」）をポート６０６Ｄのポートタイプの定義に入れることが好ましい。ブロック８１４を参照されたい。ステップ８０８〜８１４を繰り返して、セーフティＳ２  ７１０Ａ（以降「Ｓ２」）を含む第２のウェブサービス７１０の仕様を作成する。次いで方法８００は終了端子Ｂに進む。
【００６５】
終了端子Ｂ（図８Ａ）から、方法８００は、継続端子（「端子Ｃ」）と終了端子（「端子Ｄ」）の間に定義された方法ステップのセット８０４に進む。方法ステップのセット８０４は、第１のウェブサービス７０６による第２のウェブサービス７１０の発見と、第２のウェブサービス７１０が第１のウェブサービス７０６と安全に対話する能力の検証を記述する。
【００６６】
端子Ｃ（図８Ｃ）から、方法８００はブロック８１６に進み、第１のウェブサービス７０６が、適切な発見サービスを介して、第２のウェブサービス７１０の仕様を使用してポート７１０Ｄのポートタイプを発見する。適切な発見サービスの１つにはＵＤＤＩサービスがあるが、他のサービスも可能である。第１のウェブサービス７０６は、次いで、第１のウェブサービス７０６の仕様から、ポート７１０Ｄと結合されるポート７０６Ｄのポートタイプを選択する。ブロック８１８を参照されたい。第１のウェブサービス７０６は、次いでポート７０６ＤのポートタイプのセーフティＳ１とポート７１０ＤのポートタイプのセーフティＳ２を抽出する。ブロック８２０を参照されたい。次いで、プロセス８００は、別の継続端子（「端子Ｃ１８」）に入る。端子Ｃ１８から、プロセス８００はブロック８２  ２に入り、第１のウェブサービス７０６は、セーフティＳ１、Ｓ２をバインディング関係（Ｓ１：＝：Ｓ２）に置くことを試みることにより、ポート７０６Ｄと７１０Ｄとの相互運用性を確認する。判定ブロック８２４で、第１のウェブサービス７０６は、セーフティＳ１が、非アクティブ状態あるいはストップセーフティを表す形式「０」であるかどうかを調べる。判定ブロック８２４のテストで答がＹＥＳである場合、方法８００は、別の継続端子（「端子Ｃ１」）に進む。そうでなく、答がＮＯである場合、方法８００は別の端子（「端子Ｃ２」）に進む。
【００６７】
端子Ｃ１（図８Ｄ）から、方法８００は別の判定ブロック８２６に進み、第１のウェブサービス７０６は、セーフティＳ２が形式「Ｓ」７０２Ａであるかどうかを判定する。答がＮＯの場合は、別の継続端子（「端子Ｃ１９」）に入る。そうでなく、判定ブロック８２６のテストで答がＹＥＳである場合は、セーフティＳ１とセーフティＳ２とのバインディング関係（０：＝：Ｓ）がＳ２と等しくされる。ブロック８２８を参照されたい。ブロック８２８から、方法８００は、別の継続端子（「端子Ｃ２０」）に進む。
【００６８】
端子Ｃ２（図８Ｄ）から方法８００は別の判定ブロック８３０に進み、第１のウェブサービス７０６が、セーフティＳ１が形式「Ｍ．Ｓ」７０２Ｃであるかどうかを判定する。答がＹＥＳの場合は別の継続端子（「端子Ｃ３」）に入る。そうでなく答えがＮＯである場合は、方法８００は、別の継続端子（「端子Ｃ４」）に入る。
【００６９】
端子Ｃ３（図８Ｅ）から方法８００は別の判定ブロック８３２に進み、第１のウェブサービス７０６が、セーフティＳ２が、並行セーフティを意味する「Ｓ０｜Ｓ１」の形式７０６Ｆであるかどうかを判定する。答がＮＯの場合、プロセス８００は端子Ｃ１９に入る。そうでなく、判定ブロック８３２のテストで答がＹＥＳの場合はブロック８３４に入り、セーフティＳ２にバインディングされたセーフティＳ１（Ｍ．Ｓ：＝Ｓ０｜Ｓ１）が、２つの選択肢(((S0/M)(S1):=:S)+((S0｜(S１/M)):=:S)と等しくされる。そしてこの２つの選択肢の１つが選択される。ブロック８３６を参照されたい。次いで、方法８００は、継続端子１８に入ってブロック８２２にループバックし、上記のステップが反復される。
【００７０】
端子Ｃ４（図８Ｅ）から方法８００は別の判定ブロック８３８に進み、第１のウェブサービス７０６が、セーフティＳ１が、選択セーフティ７０２Ｄを意味する「Ｓ０＋Ｓ１」の形式であるかどうかを判定する。答がＹＥＳの場合は、別の継続端子（「端子Ｃ５」）に入る。そうでない場合、方法８００は、別の継続端子（「端子Ｃ６」）に進む。
【００７１】
端子Ｃ５（図８Ｆ）から方法８００は別の判定ブロック８４０に進み、第１のウェブサービス７０６が、セーフティＳ２が「Ｓ」の形式７０２Ａであるかどうかを判定する。答えがＮＯの場合、方法８００は継続端子Ｃ９に入る。そうでなく答えがＹＥＳの場合は、セーフティＳ２にバインディングされたセーフティＳ１((S0 + S1):=:S))が２つの選択肢((S0:=: S)+(S1:=:S))と等しくされる。ブロック８４２を参照されたい。次いで２つの選択肢の１つが選択される。ブロック８４４を参照されたい。次いで、方法８００は継続端子Ｃ１８に入ってブロック８２２にループバックし、上記のステップが繰り返される。
【００７２】
端子Ｃ６（図８Ｆ）から方法８００は別の判定ブロック８４６に入り、第１のウェブサービス７０６は、セーフティＳ１が順序のセーフティ７０２Ｃを意味する「Ｍ０．Ｓ０」の形式であるかどうかを判定する。判定ブロック８２６のテストで答えがＮＯの場合は、別の継続端子（「端子Ｃ８」）に入る。そうでなく答えがＹＥＳである場合、方法８００は、別の継続端子（「端子Ｃ７」）に進む。
【００７３】
端子Ｃ７（図８Ｇ）から方法８００は別の判定ブロック８９８に進み、第１のウェブサービス７０６が、セーフティＳ２が「Ｍ１．Ｓ１」の形式７０２Ｃであるかどうかを判定する。答えがＮＯの場合、方法８００は端子Ｃ１９に進む。そうでなく、答えがＹＥＳの場合はブロック８４８に入り、第１のウェブサービス７０６が、Ｍ０、Ｍ１を引数とするｍａｔｃｈ関数が定義されているかどうかを判定する。ブロック８４８を参照されたい。ｍａｔｃｈ関数の単純な実装には、Ｍ０がＭ１の補数である場合は真のブール演算結果を返すことが含まれる。そうでない場合、ｍａｔｃｈ関数は、偽のブール演算結果を返す。判定ブロック８４８のテストの答えがＮＯの場合は、セーフティＳ２に結び付けられたセーフティＳ１（Ｍ０，Ｓ０：＝：Ｍ１．Ｓ１）が未定義であることになる。ブロック８９４を参照されたい。方法８００は次いで端子Ｃ２０に進む。判定ブロック８４８のテストの答えがＹＥＳの場合は、選択肢「cut (MO, M1).(SO:=:S１)」が選択され、ｃｕｔは、Ｍ０とＭ１を引数とする関数である。ｃｕｔ関数の好ましい実装の１つを図６Ａ〜図６Ｉに示し、これは、購入者、納入者、および発送者のウェブサービス間の相互運用性を示す。タイプとそれに対応するメッセージタイプを一致させるｍａｔｃｈ関数が定義され、その対（タイプとそれに対応するタイプ）を排除するｃｕｔ関数が定義されている場合、購入者ウェブサービスの操作は結合になる。すなわち、購入者ウェブサービスは、購入注文（ＰＯ）が消費され、事前出荷通知（ＡＳＮ）が供給されるのを待ってから、セーフティ中で進行する。次いで、方法８００は端子Ｃ１８に進んでブロック８２２にループバックし、上記の方法ステップが反復される。
【００７４】
端子Ｃ８（図８Ｌ）から方法８００は別の判定ブロック８５２に進み、第１のウェブサービス７０６が、セーフティＳ１  ７０６Ａが並行セーフティ７０２Ｆを意味する「Ｓ０｜Ｓ１」の形式であるかどうかを判定する。答えがＮＯの場合、方法８００は別の継続端子（「端子Ｃ１１」）に進む。そうでなく答えがＹＥＳである場合は、別の継続端子（「端子Ｃ９」）に入る。
【００７５】
端子Ｃ９（図８Ｈ）から方法８００は別の判定ブロック８５４に進み、第１のウェブサービス７０６が、第２のウェブサービス７１０のセーフティＳ２が、並行セーフティ７０２Ｆの形式である形式「Ｓ２｜Ｓ３」であるかどうかを判定する。判定ブロック８５４のテストの答えがＮＯの場合、方法８００は端子Ｃ１９に進む。そうでなく、答えがＹＥＳである場合、方法８００はブロック８５６に入る。このブロックで、セーフティＳ２に結び付けられたセーフティＳ１((S0｜S1):=:(S2｜S3))が、４つの選択肢のセット(SO,2,3,1)+(S1,2,3,0)+(S2,0,1,3)+(S3,0,1,2)に等しくされる。これらの４つの選択肢はそれぞれ、Ｓｉ，ｍ，ｎ，ｊの形式にすることができる。ブロック８５８を参照されたい。４つの選択肢それぞれにテストを行って、特定の選択肢に関係(Si:=:(Sm｜Sn)):=:Sjが定義されるかどうかを判定する。判定ブロック８６０を参照されたい。判定ブロック８６０のテストで答えがＹＥＳの場合は、その特定の選択肢が、関係（Si:=:(Sm|Sn)）:=:Sjと等しくされる。ブロック８６２を参照されたい。次いで方法８００は別の継続端子（「端子Ｃ１０」）に進む。答えがＮＯの場合は、ブロック８６４に入り、特定の選択肢が、関係(Si:=:(Sm|Sn))|Sjと等しくされる。方法８００は次いでこの場合も端子Ｃ１０に進む。
【００７６】
端子Ｃ１０（図８Ｉ）から方法８００はブロック８６６に進み、４つの選択肢(S0,2,3,1)+(S1,2,3,0)+(S2,0,1,3)+(S3,0,1,2)の１つが選択される。プロセス８００は次いで端子Ｃ１８に進んでブロック８２２にループバックし、上記の方法ステップが繰り返される。
【００７７】
端子Ｃ１１（図８Ｉ）から方法８００は別の判定ブロック８６８に進み、第１のウェブサービス７０６が、セーフティＳ１が、再帰セーフティ７０２Ｇを意味するrec(K).SOの形式であるかどうかを判定する。判定ブロック８６８のテストの答えがＮＯの場合は、別の継続端子（「端子Ｃ１２」）に入る。そうでなく答えがＹＥＳの場合は別の判定ブロック８７０に入り、第１のウェブサービス７０６は、セーフティＳ２が「Ｓ」の形式７０２Ａであるかどうかを調べる。判定ブロック８７０のテストの答えがＮＯの場合、方法８００は端子Ｃ１９に入る。代わりに答えがＹＥＳの場合、方法８００はブロック８７２に進み、セーフティＳ２に結び付けられたセーフティＳ１(rec(K).S0:=:S)が、(S0{rec(K).S0/K}:=:S)と等しくされる。構文フレーズS0{rec(K).S0/K}は、セーフティＳ０の中に、モデル構文７０２で定義される名前であるＫの言及があり、Ｋがrec(K).S0に置き換えられることを意味する。次の例を考えられたい。フレーズ「S0{rec(K).S0/K}」をセーフティの文「S0=open.close.S0」に適用した場合、その結果は、S0= open.close.rec(S0).open.close.S0になる。このように、この例における「Ｓ０」は、再帰セーフティ「ｒｅｃ（Ｋ）」のＫである。次いで方法８００は端子Ｃ１８に進んでブロック８２２にループバックし、上記の方法ステップが繰り返される。判定ブロック８７０のテストの答えがＮＯの場合、方法８００は端子Ｃ１９に進む。
【００７８】
端子Ｃ１２（図８Ｊ）から方法８００は別の判定ブロック８７４に進み、第１のウェブサービス７０６が、セーフティＳ１が「Ｓ」の形式７０２Ａであるかどうかを調べる。答えがＮＯの場合方法８００は端子Ｃ１９に進む。そうでなく答えがＹＥＳの場合は、別の判定ブロック８７６に入る。この判定ブロックで、第１のウェブサービス７０６は、セーフティＳ２が「０／Ｓ０」の形式であるかどうかを判定する。答えがＮＯの場合、方法８００は別の継続端子（「端子Ｃ１３」）に進む。そうでなく判定ブロック８７６のテストの答えがＹＥＳの場合は、セーフティＳ２に結び付けられたセーフティＳ１（S:=:0/S0)が未定義であることになる。ブロック８７８を参照されたい。方法８００は次いで端子Ｃ２０に進む。
【００７９】
端子Ｃ１３（図８Ｋ）から方法８００は別の判定ブロック８８０に進み、第１のウェブサービス７０６は、セーフティＳ２が「Ｍ０．Ｓ／Ｍ１」の形式であるかどうかを検証する。答えがＮＯの場合、方法８００は、別の継続端子（「端子Ｃ１４」）に進む。答えがＹＥＳの場合、第１のウェブサービス７０６は、Ｍ０とＭ１を引数とするｍａｔｃｈ関数が定義されているかどうかを判定する。ブロック８８２を参照されたい。ｍａｔｃｈ関数の単純な実装には、Ｍ０がＭ１の補数である場合は真のブール演算結果を返すことが含まれる。そうでない場合、ｍａｔｃｈ関数は、偽のブール演算結果を返す。判定ブロック８８２のテストの答えがＮＯの場合は、セーフティＳ２に結び付けられたセーフティＳ１(S:=:M0.S/M1)が定義されていない。ブロック８８６を参照されたい。方法８００は次いで端子Ｃ２０に進む。判定ブロック８８２のテストの答えがＹＥＳの場合は、セーフティＳ２が「cut (MO, M1).S」と等しくされ、ｃｕｔは、Ｍ０、Ｍ１を引数とする関数である。ｃｕｔ関数の好ましい実装の１つを図６Ａ〜６Ｉに示し、これは、購入者、納入者、発送者のウェブサービス間の相互運用性を示す。タイプとそれに対応するメッセージタイプを一致させるｍａｔｃｈ関数が定義されており、その対（タイプとそれに対応するタイプ）を除外するｃｕｔ関数が定義されている場合、購入者ウェブサービスの操作は結合になる。すなわち、購入者ウェブサービスは、購入注文（ＰＯ）が消費され、事前出荷通知（ＡＳＮ）が与えられるのを待ってからセーフティ中で進行する。次いで、プロセス８００は端子Ｃ１８に進んでブロック８２２にループバックし、ここで上記の方法ステップが繰り返される。
【００８０】
端子Ｃ１４（図８Ｌ）から方法８００は別の判定ブロック８８８に進み、第１のウェブサービス７０６は、セーフティＳ２が「(SO+S1)/M」の形式であるかどうかを判定する。答えがＹＥＳの場合は、セーフティＳ２が２つの選択肢(SO/M)+(S1/M)と等しくされる。ブロック８９０を参照されたい。これら２つの選択肢の１つが選択される。ブロック８９２を参照されたい。次いで方法８００は端子Ｃ１８に進んでブロック８２２にループバックし、上記の方法ステップが繰り返される。判定ブロック８８８のテストの答えがＮＯの場合、方法８００は、別の継続端子（「端子Ｃ１６」）に進む。
【００８１】
端子Ｃ１６（図８Ｍ）から方法８００は別の判定ブロック８９９に進み、第１のウェブサービス７０６は、セーフティＳ２が(SO|S1)/Mの形式を有するかどうかを判定する。答えがＮＯの場合方法８００は別の継続端子（「端子Ｃ１７」）に進む。そうでなく答えがＹＥＳの場合は、セーフティＳ２が２つの選択肢(SO/M)＆(S１/M)と等しくされる。ブロック８９７を参照されたい。次いで、方法８００はブロック８９５に進み、２つの選択肢の１つが選択される。次いで方法８００は端子Ｃ１８に進んでブロック８２２にループバックし、上記の方法ステップが繰り返される。
【００８２】
端子Ｃ１７（図８Ｎ）から方法８００は別の判定ブロック８９３に進み、第１のウェブサービス７０６は、セーフティＳ２がrec(K).S/Mの形式であるかどうかを判定する。答えがＹＥＳの場合は、セーフティＳ２が、(S{rec(K).(S/K)}/M)と等しくされる。ブロック８９１を参照されたい。方法８００は次いで端子Ｃ１８に進んでブロック８２２にループバックし、上記の方法ステップが繰り返される。そうでなく判定ブロック８９３のテストの答えがＮＯの場合は、端子Ｃ１９に入る。
【００８３】
セーフティＳ１またはセーフティＳ２がモデル構文７０２に従わないので、端子Ｃ１９（図８Ｎ）から、第１のウェブサービス７０６は、構文エラーが発生したと判定する。ブロック８８９を参照されたい。セーフティＳ１、Ｓ２が計算できる形式でないため、ポート７０６Ｄと７１０Ｄの結合は可能でない。方法８００は次いで処理を終了する。端子Ｃ２０（図８Ｎ）から方法８００はブロック８８７に進み、ここで一時的なセーフティＳ３が、セーフティＳ１とそのセーフティ間のバインディング関係の結果と等しくなるように設定される(Ｓ３=Ｓ１:=:Ｓ２)。次いで方法８００は終了端子Ｄに入る。
【００８４】
終了端子Ｄから方法８００は、継続端子（「端子Ｅ」）と終了端子（「端子Ｆ」の間に定義された方法ステップのセット８０６に進む。方法ステップのセット８０６は、第１のウェブサービス７０６と第２のウェブサービス７１０の間に安全な相互運用性を可能にする適切な方式でセーフティＳ１とセーフティＳ２を合致させることができる場合は、第１のウェブサービス７０６と第２のウェブサービス７１０の間に、拘束力を持つ同意である仮想コントラクトを作成する。
【００８５】
端子Ｅ（図８Ｏ）から方法８００は別の判定ブロック８８５に進み、第１のウェブサービス７０６は、セーフティＳ３（セーフティＳ１とセーフティＳ２のバインディング関係の結果）がゼロに等しいかどうかを判定する。判定ブロック８８５のテストの答えがＹＥＳの場合は、第１のウェブサービス７０６のポート７０６Ｄを第２のウェブサービス７１０のポート７１０Ｄと結合することができる。ブロック８８１を参照されたい。２つのポートをこのように結合することができる場合、第１のウェブサービス７０６と第２のウェブサービス７１０の相互運用性は安全である。用語「安全」とは、入力から保護されるプロセスがある、すなわちすべての出力が入力を満たしていること、または、メッセージを受け取り、それを処理するために第１のウェブサービス７０６または第２のウェブサービスのいずれかの入力が常に利用できるのでデッドロックがないことを意味する。ポート７０６Ｄと７１０Ｄが結合されると、第２のウェブサービス７１０は、第１のウェブサービス７０６と通信を開始して所望のサービスを供給または入手することができる。ブロック８７９を参照されたい。方法８００は次いで終了端子Ｆに進んで処理を終了する。
【００８６】
判定ブロック８８５のテストの答えがＮＯの場合は、別の判定ブロック８８３に入り、第１のウェブサービスが、ある程度安全でないポート７０６Ｄと７１０Ｄの結合を許容できるかどうかを判定する。答えがＹＥＳの場合は、方法ステップ８８１、８７９が繰り返される。そうでなく判定ブロック８８３のテストの答えがＮＯである場合は、ポート７０６Ｄと７１０Ｄは結合されず、方法８００は終了端子Ｆに進んで処理を終了する。
【００８７】
本発明の好ましい実施形態を図示し、説明したが、本発明の趣旨および範囲から逸脱せずに各種の変更を加えてよいことは理解されよう。
【００８８】
添付Ａ
１．サービス、ポート、およびポートタイプ
１．１  プロセスとしてのサービス。この項目に割かれた紙面では、モバイルプロセスの理論を真に紹介することはできない。興味のある読者は、この主題についての充実した文献を見つけることができ、その文献を研究されることを勧める。具体的には、Ｍｉｌｎｅｒの「The Polyadic Pi Calculus: A Tutorial」が、筆者らがこれまでに読んだ中でなお最良の入門書である。
【００８９】
ウェブサービスによって採用される単純なオントロジーは、モバイルプロセスの代数的な扱いに採用される基本的なオントロジーと同じであるとだけ述べておく。すなわち、ｐｉ  ｃａｌｃｕｌｕｓ（およびその同類）は、この状況でしばしば名前と呼ばれるポートの抽象化を中心として構築される。プロセスは、ポートの集まりにおける入出力要求に対する同期の制約の観点から構築される。
【００９０】
例えば、対称的バージョンのｐｉ  ｃａｌｃｕｌｕｓは、次のクラスのプロセスを提供する。
【００９１】
【数１】
0004555221.tif 000002
【００９２】
例１．１．１  次の例は、初期化された後、反復される作業要求またはfinalize要求を受け付けることが可能となるサービスの実装の骨子を提供する。
(new init s)x[init s].(rec(k).(new work wr fin fr)(x[work wr].k+x[fin fr]))) 
ウェブサービスと、プロセス代数的な世界の見方とのこの一致は、偶然ではない。一方の開発に携われる人々が、もう一方の開発に携わる。例えば、この記事の第１の著者は、ＷＳＤＬ仕様の共同著者でもある。
【００９３】
２．セーフティを有するポートタイプ
２．１  セーフティの表現。我々は、当該ポートで予期されるプロトコルの仕様で、ポートタイプを拡張することを提案する。詳細には、順序、選択、並行、および再帰を基本的な言語植字工として含む、小規模な文脈自由言語を提案する。この言語のｔｅｒｍｉｎａｌは、ポートタイプに関連付けられたメッセージタイプから得られる。
【００９４】
具体的には、Ｍが、タイプＰのポートで到着することが予想されるメッセージタイプの集合であり、Ｋが名前の可算集合である場合、所与のＫのＭに対する適正なセーフティ表現の集合（ＬＫ（Ｍ）と表される）は、次のように再帰的に定義される。
【００９５】
【数２】
0004555221.tif 000003
【００９６】
所見２．１．１  この定義は、メッセージタイプの集合中でパラメトリックであることに留意されたい。したがって、この定義は、メッセージタイプの定義に使用されるシステムにあまり依存しない。例えばＸＳＤなどの形式の整ったスキーマ定義で十分である。
【００９７】
所見２．１．２  同様に、ＸＳＤスキーマによるセーフティ表現のセットのコーディングはかなり単純であり、追加的な洞察は提供しないが、ページをかなり雑然とさせ、本旨をあいまいにする。むしろ、より人間が読むことが可能な構文を導入することが簡便である。
【００９８】
所見２．１．３  プロセス代数に精通した読者は、この言語は名称変更および制約も新しい名前の構築も含まないので、ｆｕｌｌ  ＣＣＳあるいはｐｉ  ｃａｌｃｕｌｕｓに比べて絶対的に表現力が低いことに気づかれよう。
【００９９】
２．１．１  モデル構文
【０１００】
【数３】
0004555221.tif 000004
【０１０１】
２．２  例
例２．２．１  次の典型例は、サービスが初期化されなければならず、その後、反復される作業要求またはｆｉｎａｌｉｚｅ要求を受け付けることが可能となる例である。
【０１０２】
ポートタイプ
【０１０３】
【表１】
0004555221.tif 000005
【０１０４】
この例を上記の実装と比較されたい。ある実装がタイプの記述に従うどうかの準拠の問題はこの記事では扱わないが、セーフティとコードを簡単に比較することで、それがどのように実現されるかについての示唆を少なくともいくらか得られるはずである。
【０１０５】
例２．２．２  この例では、購入者、納入者、および発送者間の単純化した３者間コントラクトの例を示す。我々は、ポートがどこで結合され、それをチェックすることが意味をなす理由についてのコンテクストを提供するのに十分なサービスレベルのコンポジション情報を含めている。しかし、この論文の主旨は、ポートのセーフティである。したがって、サービスレベルのコンポジション構文は、説明しないでおく。
【０１０６】
購入者は、購入を開始し、購入注文を提供し、事前出荷通知を受け取るのを待つ。購入者は、納品伝票を受け取り、商品の受け取りの通知を供給することを望む。納入者は、購入注文を待ってから納品伝票を提供する。発送者は、ＡＳＮを提供し、商品受け取りの通知を待つ。
【０１０７】
【表２−１】
0004555221.tif 000006
【０１０８】
【表２−２】
0004555221.tif 000007
【０１０９】
２．３  タイプチェックアルゴリズム    ２つの形のタイプチェックを行わなければならない。１つでは、所与のサービス実装が、通知（または要求）されるポートタイプの集まりに準拠するかどうかをチェックする。これは、実装言語の選択がないためここで指定することはできない。もう１つのチェックでは、２つのポートタイプを与えられて、１つのポートをもう一方のポートに「バインディング」することが安全であることをチェックする。
【０１１０】
所見２．３．１  このアルゴリズムは、メッセージタイプ中でパラメトリックである。ｃｕｔまたはｍａｔｃｈの概念は、タイプシステム中で定義可能でなければならない。
【０１１１】
このアルゴリズムは、方程式として与えることができる。次のように、Ｓ１：＝：Ｓ２を再帰的に定義する。
【０１１２】
【数４】
0004555221.tif 000008
【０１１３】
所見２．３．２  ｍａｔｃｈとｃｕｔの単純な解釈は、メッセージタイプを原子と見なすことによって与えることができる。したがって、次のようになる。
【０１１４】
【数５】
0004555221.tif 000009
【０１１５】
しかし、購入者、納入者、発送者の例で、ｍａｔｃｈが、タイプメッセージ要素と要素の副基準標本を一致させるように定義され、ｃｕｔがそれらの対を除外する場合は、購入者セーフティの操作が、実際に結合になることが理解される。すなわち、購入者は、実際に、ＰＯが消費され、かつＡＳＮが与えられるのを待ってから、セーフティ中で進行する。
【０１１６】
定義２．３．３  ポートｐ０が、セーフティＳ０を有するタイプであり、同様にポートｐ１がＳ１を有し、Ｓ＝（Ｓ０：＝：Ｓ１）であるとする。Ｓ＝０の場合は、ｐ０とｐ１を安全に融合できることになる。そうでない場合、Ｓは、ｐ０とｐ１を融合することが安全でない理由となる。
【０１１７】
この定義を正当とする根拠は、これである。
【０１１８】
法則２．３．４  （Ｓ０：＝：Ｓ１）≠０の場合、Ｓ０は、Ｓ１と合致しない入出力操作を提供する。
【図面の簡単な説明】
【０１１９】
【図１】従来のウェブサービスシステムを示すブロック図である。
【図２】例示的なコンピューティングデバイスのブロック図である。
【図３Ａ】ウェブサービスの操作を呼び出す順序を定義するセーフティを含むウェブサービスの仕様の作成を説明するブロック図である。
【図３Ｂ】ウェブサービスの操作を呼び出す順序を定義するセーフティを含むウェブサービスの仕様の作成を説明するブロック図である。
【図３Ｃ】ウェブサービスの操作を呼び出す順序を定義するセーフティを含むウェブサービスの仕様の作成を説明するブロック図である。
【図４】ウェブサービス間の相互運用性の同意で使用されるセーフティを表現するために最終的に処理および実行できる一連の命令を定義するために使用することが可能な人工言語である、例示的プログラミング言語の構文を説明するテキスト図である。
【図５Ａ】２つのウェブサービス間の仮想コントラクトの形成に従ってポートが融合された場合の２つのウェブサービスの安全な相互運用性を説明するブロック図である。
【図５Ｂ】２つのウェブサービス間の仮想コントラクトの形成に従ってポートが融合された場合の２つのウェブサービスの安全な相互運用性を説明するブロック図である。
【図５Ｃ】２つのウェブサービス間の仮想コントラクトの形成に従ってポートが融合された場合の２つのウェブサービスの安全な相互運用性を説明するブロック図である。
【図６Ａ】３つのウェブサービス間の安全な相互運用性のための仮想コントラクトの作成を説明する図であり、それぞれのウェブサービスが仮想コントラクトで別のウェブサービスにサービスまたはリソースを提供する図である。
【図６Ｂ】３つのウェブサービス間の安全な相互運用性のための仮想コントラクトの作成を説明する図であり、それぞれのウェブサービスが仮想コントラクトで別のウェブサービスにサービスまたはリソースを提供する図である。
【図６Ｃ】３つのウェブサービス間の安全な相互運用性のための仮想コントラクトの作成を説明する図であり、それぞれのウェブサービスが仮想コントラクトで別のウェブサービスにサービスまたはリソースを提供する図である。
【図６Ｄ】３つのウェブサービス間の安全な相互運用性のための仮想コントラクトの作成を説明する図であり、それぞれのウェブサービスが仮想コントラクトで別のウェブサービスにサービスまたはリソースを提供する図である。
【図６Ｅ】３つのウェブサービス間の安全な相互運用性のための仮想コントラクトの作成を説明する図であり、それぞれのウェブサービスが仮想コントラクトで別のウェブサービスにサービスまたはリソースを提供する図である。
【図６Ｆ】３つのウェブサービス間の安全な相互運用性のための仮想コントラクトの作成を説明する図であり、それぞれのウェブサービスが仮想コントラクトで別のウェブサービスにサービスまたはリソースを提供する図である。
【図６Ｇ】３つのウェブサービス間の安全な相互運用性のための仮想コントラクトの作成を説明する図であり、それぞれのウェブサービスが仮想コントラクトで別のウェブサービスにサービスまたはリソースを提供する図である。
【図６Ｈ】３つのウェブサービス間の安全な相互運用性のための仮想コントラクトの作成を説明する図であり、それぞれのウェブサービスが仮想コントラクトで別のウェブサービスにサービスまたはリソースを提供する図である。
【図６Ｉ】３つのウェブサービス間の安全な相互運用性のための仮想コントラクトの作成を説明する図であり、それぞれのウェブサービスが仮想コントラクトで別のウェブサービスにサービスまたはリソースを提供する図である。
【図７Ａ】ウェブサービス間の相互運用性の同意で使用されるセーフティを形成するための別の例示的プログラミング言語の構文を説明する図である。
【図７Ｂ】ウェブサービス間の相互運用性の同意で使用されるセーフティを形成するための別の例示的プログラミング言語の構文を説明する図である。
【図８Ａ】ウェブサービス間のポートタイプの適合性を検証してウェブサービス間に安全な相互運用性を形成するための、本発明により形成される例示的方法を説明する方法図である。
【図８Ｂ】ウェブサービス間のポートタイプの適合性を検証してウェブサービス間に安全な相互運用性を形成するための、本発明により形成される例示的方法を説明する方法図である。
【図８Ｃ】ウェブサービス間のポートタイプの適合性を検証してウェブサービス間に安全な相互運用性を形成するための、本発明により形成される例示的方法を説明する方法図である。
【図８Ｄ】ウェブサービス間のポートタイプの適合性を検証してウェブサービス間に安全な相互運用性を形成するための、本発明により形成される例示的方法を説明する方法図である。
【図８Ｅ】ウェブサービス間のポートタイプの適合性を検証してウェブサービス間に安全な相互運用性を形成するための、本発明により形成される例示的方法を説明する方法図である。
【図８Ｆ】ウェブサービス間のポートタイプの適合性を検証してウェブサービス間に安全な相互運用性を形成するための、本発明により形成される例示的方法を説明する方法図である。
【図８Ｇ】ウェブサービス間のポートタイプの適合性を検証してウェブサービス間に安全な相互運用性を形成するための、本発明により形成される例示的方法を説明する方法図である。
【図８Ｈ】ウェブサービス間のポートタイプの適合性を検証してウェブサービス間に安全な相互運用性を形成するための、本発明により形成される例示的方法を説明する方法図である。
【図８Ｉ】ウェブサービス間のポートタイプの適合性を検証してウェブサービス間に安全な相互運用性を形成するための、本発明により形成される例示的方法を説明する方法図である。
【図８Ｊ】ウェブサービス間のポートタイプの適合性を検証してウェブサービス間に安全な相互運用性を形成するための、本発明により形成される例示的方法を説明する方法図である。
【図８Ｋ】ウェブサービス間のポートタイプの適合性を検証してウェブサービス間に安全な相互運用性を形成するための、本発明により形成される例示的方法を説明する方法図である。
【図８Ｌ】ウェブサービス間のポートタイプの適合性を検証してウェブサービス間に安全な相互運用性を形成するための、本発明により形成される例示的方法を説明する方法図である。
【図８Ｍ】ウェブサービス間のポートタイプの適合性を検証してウェブサービス間に安全な相互運用性を形成するための、本発明により形成される例示的方法を説明する方法図である。
【図８Ｎ】ウェブサービス間のポートタイプの適合性を検証してウェブサービス間に安全な相互運用性を形成するための、本発明により形成される例示的方法を説明する方法図である。
【図８Ｏ】ウェブサービス間のポートタイプの適合性を検証してウェブサービス間に安全な相互運用性を形成するための、本発明により形成される例示的方法を説明する方法図である
【図１】
0004555221.tif 000010
【図２】
0004555221.tif 000011
【図３Ａ】
0004555221.tif 000012
【図３Ｂ】
0004555221.tif 000013
【図３Ｃ】
0004555221.tif 000014
【図４】
0004555221.tif 000015
【図５Ａ】
0004555221.tif 000016
【図５Ｂ】
0004555221.tif 000017
【図５Ｃ】
0004555221.tif 000018
【図６Ａ】
0004555221.tif 000019
【図６Ｂ】
0004555221.tif 000020
【図６Ｃ】
0004555221.tif 000021
【図６Ｄ】
0004555221.tif 000022
【図６Ｅ】
0004555221.tif 000023
【図６Ｆ】
0004555221.tif 000024
【図６Ｇ】
0004555221.tif 000025
【図６Ｈ】
0004555221.tif 000026
【図６Ｉ】
0004555221.tif 000027
【図７Ａ】
0004555221.tif 000028
【図７Ｂ】
0004555221.tif 000029
【図８Ａ】
0004555221.tif 000030
【図８Ｂ】
0004555221.tif 000031
【図８Ｃ】
0004555221.tif 000032
【図８Ｄ】
0004555221.tif 000033
【図８Ｅ】
0004555221.tif 000034
【図８Ｆ】
0004555221.tif 000035
【図８Ｇ】
0004555221.tif 000036
【図８Ｈ】
0004555221.tif 000037
【図８Ｉ】
0004555221.tif 000038
【図８Ｊ】
0004555221.tif 000039
【図８Ｋ】
0004555221.tif 000040
【図８Ｌ】
0004555221.tif 000041
【図８Ｍ】
0004555221.tif 000042
【図８Ｎ】
0004555221.tif 000043
【図８Ｏ】
0004555221.tif 000044