(57)【要約】本発明は、埋め込み式コンピュータステーションのリソースなどの単純な通信リソースを用いた直接的な転送を提供するような構造化ソフトウェアオブジェクトの生データストリームへの変換およびこの逆の変換のため、ならびに前記ソフトウェアオブジェクトのリセットまたはこれらに割り当てられたメモリ空間の再利用のための反復式プロシージャに関する。本プロシージャは、線形データシーケンスの形式で端末と情報を交換することが可能な少なくとも１つのプロセッサを含んだ埋め込み式プラットフォーム２または携帯オブジェクトによって使用することができる。本プロシージャは、一方では線形データシーケンス配置と、他方ではオブジェクト指向のソフトウェアオブジェクトを記述または表現している構造化配置との間で、ある方向または他の方向でデータセットを変換するためのステップを含む。
2005519376.tif 000002
【特許請求の範囲】
【請求項１】
１つまたは複数の線形データシーケンスの形式で端末との情報の交換が可能な、少なくとも１つのプロセッサ、記憶設備、および通信リソースを組み込んだ携帯オブジェクトを備えた、「埋め込み式プラットフォーム」と呼ばれる、コンピュータステーション（２）によって使用するためのデータ変換プロシージャであって、一方で線形データシーケンスを備える配置と、他方でオブジェクト指向のプログラミング言語の基準に従って構造化または階層化された１つまたは複数のソフトウェアオブジェクトを記述または表現している構造化配置との間で、ある方向または他の方向への、データセットの変換ステップを含むことを特徴とするデータ変換プロシージャ。
【請求項２】
オブジェクト指向のプログラミング言語の基準に従って構造化または階層化された１つまたは複数のソフトウェアオブジェクト（３１、４１）を備えるか表現している、送信される第１のデータセットを、このオブジェクトを記述または表現している構造化配置から前記第１のデータセットを表現している線形データシーケンスに変換またはシリアライゼーションするステップと、
埋め込み式プラットフォーム（２）から、少なくとも１つのホスト（１）へ、すなわちある端末または該端末に接続されたコンピュータステーションへ、又は、前記ホスト（１）から埋め込み式プラットフォーム（２）へ、通信リソース（２００または１００）によって前記線形データシーケンスを送信するステップと、
この線形データシーケンスを、第１のデータセットを再生するまたは表現する１つまたは複数の構造化ソフトウェアオブジェクト（３４または４４）に配置されたデータセットに送信後変換するまたはデシリアライゼーションするステップと、
を含むことを特徴とする請求項１に記載のプロシージャ。
【請求項３】
ホスト端末（１）は埋め込み式プラットフォーム（２）に対して送信機能と呼ばれるソフトウェアエージェント（１０１）を用いて情報を送信し、前記情報は埋め込み式プラットフォーム内に保存された少なくとも１つの宛先ソフトウェアエージェント（２２１）によって前記データに関するプロセス（２２１０）を起動することが可能でありかつ少なくとも１つのアプリケーション（２１）の一部を形成している応答機能（２０１）によって埋め込み式プラットフォーム内で受信され、
前記宛先ソフトウェアエージェントについての応答機能（２０１）によって受信された、線形データシーケンスに配置されているデータセット（３２）を、宛先エージェント（２２１）の代わりに通信エージェント（２１１）によって受信するステップと、
オブジェクト指向のプログラミング言語の基準に従って構造化または階層化された少なくとも１つのソフトウェアオブジェクト（３４）にこのデータセットを変換するステップと、
前記構造化ソフトウェアオブジェクト（３４）を宛先エージェント（２２１）に送信し、前記オブジェクトに従い、前記宛先エージェントによってプロセス（２２１０）を起動するステップと、
を含むことを特徴とする、請求項１から２のいずれか一項に記載のプロシージャ。
【請求項４】
応答機能（２０１）によってホスト（１）の送信機能（１０１）から、少なくとも１つの送信パラメータ（３２）の形式の少なくとも１つのデータ項目を受信し、このパラメータを埋め込み式プラットフォーム（２）内で保存されるか又は実行される通信エージェント（２１１）に送信するステップと、
応答エージェント（２０１）によって送信された少なくとも１つの送信パラメータ（３２）を、通信エージェント（２１１）によって、線形データシーケンスに配置されたデータセットに変換または連結し、これらのデータを埋め込み式プラットフォーム（２）内の入力ストリーム（３３）内に保存するステップと、
埋め込み式プラットフォーム（２）内で保存されるか又は実行されるシリアライゼーションエージェント（２１２）によって、前記入力ストリーム（３３）内に保存されたデータの少なくとも一部を、少なくとも１つの構造化ソフトウェアオブジェクト（３４）を備えるまたは表すデータセットに変換またはデシリアライゼーションするステップと、
前記構造化ソフトウェアオブジェクト（３４）またはその参照を宛先エージェント（２２１）によって受信するステップと、
を含むことを特徴とする請求項１から３のいずれか一項に記載のプロシージャ。
【請求項５】
構造化ソフトウェアオブジェクト（４１）またはその表現を、埋め込み式プラットフォーム（２）内で実行されるか又は保存されるアプリケーション（２２）の一部を形成するソフトウェアエージェント（２２１）から、前記埋め込み式プラットフォーム内で実行されるか又は保存されるシリアライゼーションエージェント（２１２）に送信するステップと、
前記構造化ソフトウェアオブジェクト（４１）を前記シリアライゼーションエージェント（２１２）によって線形データシーケンスに配置されたデータセットに変換またはシリアライゼーションし、これらのデータを埋め込み式プラットフォーム内の出力ストリーム（４２）内に保存するステップと、
埋め込み式プラットフォーム（２）内で保存されるか又は実行される通信エージェント（２２１）によって、前記出力ストリーム（４２）内に保存されたデータの少なくとも一部を応答機能（２０１）により送信されることが可能な応答パラメータの組（４３）に変換するステップと、
それ自体の主導でまたはホスト端末（１）の送信機能（１０１）に応答して、応答機能（２０１）によって、前記応答パラメータ（４３）を埋め込み式プラットフォーム（２）からホスト端末（１）に送信するステップと、
を含むことを特徴とする請求項１から４のいずれか一項に記載のプロシージャ。
【請求項６】
入力ストリーム（３３）または出力ストリーム（４２）内に保存された線形データシーケンスは、タグと呼ばれる１つまたは複数のデータ項目を用いて構造化または階層化された１つまたは複数のソフトウェアオブジェクト（３１または４１）を表しており、その各々が前記線形データシーケンスのデシリアライゼーションに関して実行される所与のアクションを表している１つまたは複数の所与の値を有していることを特徴とする請求項１から５のいずれか一項に記載のプロシージャ。
【請求項７】
少なくとも１つのタグは、
線形データシーケンスによって表された構造化オブジェクトの構造に新たなエレメントを追加するアクションと、
ソースオブジェクトと呼ばれるエレメントまたはオブジェクトを、構造化オブジェクトを構成するエレメントのすべてまたは一部分の値のソースとして参照するアクションと、
後続の１つまたは複数のデータ項目が構造化オブジェクトを構成するエレメントのコンテンツを表していることを指示するアクションと、
構造化オブジェクトを構成するエレメントについてのコンテンツが存在しないことを指示するアクションと、
のうちの１つを表すように定義されていることを特徴とする請求項１から６のいずれか一項に記載のプロシージャ。
【請求項８】
シリアライゼーションエージェント（２１２）は、ソースオブジェクトと呼ばれる構造化オブジェクト（４１）を１つの線形データセット（４２）に、シリアライゼーションプロシージャと呼ばれるプロシージャに従って、シリアライズし、前記構造化ソースオブジェクト（４１）の構造またはツリー構造を構成する、エレメントと呼ばれる、オブジェクトのうちの少なくとも１つ（４１０から４１４）を、
シリアライゼーションエージェント（２１２）によって、前記構造化オブジェクト（４１）の構造またはツリー構造を構成するカレントオブジェクトと呼ばれるエレメント（４１０、４１４）のタイプ（４１００）を検出するステップと、
新たなエレメントの追加を指示しているタグを表すデータ項目、続いてカレントオブジェクトのタイプ（ＴＹＯＢＪ）を表すデータ項目を、出力ストリーム（４２）内に保存するステップと、
出力ストリーム内に、カレントオブジェクトタイプ（ＴＹＯＢＪ）と関連付けされた、タイプシリアライゼーションエージェント（ＴＭ０、ＴＭ１、ＴＭ２）によって、該ストリーム内にすでに存在するエレメントの後に保存するステップであって、
構造化オブジェクト（４１）のすべてまたは一部分（４１２、４１３、４１１）の値を表しているデータ項目（４２４、４２５、４２９）によるか、
あるオブジェクト（４１０）に対する参照を、構造化オブジェクト（４１）のすべてまたは一部分（４１４）の値のソースとして指示するタグ（４２１１）を表しているデータ項目（４２１１、４２１２）であって、該タグの後には前記ソースオブジェクト（４１０）を特定しているデータ項目（４２１２）が続いているようなデータ項目によるか、
のいずれかによっている保存ステップと、
によって処理することを特徴とする請求項１から７のいずれか一項に記載のプロシージャ。
【請求項９】
シリアライゼーションプロシージャは構造化オブジェクト（４１）を出力ストリーム（４２）に変換し、各カレントオブジェクトのタイプを、その保存箇所が保存された順序と逆の順序で読み取られるタイプスタックと呼ばれるメモリスタック（ＴＹＳＴ）内に各反復ごとに保存することを特徴とする請求項１から８のいずれか一項に記載のプロシージャ。
【請求項１０】
シリアライゼーションエージェント（２１２）は、線形データセットを少なくとも１つの構造化された結果オブジェクト（３４）に、デシリアライゼーションプロシージャと呼ばれるプロシージャによってデシリアライズし、入力ストリーム（３３）内に保存された各データ項目を、
シリアライゼーションエージェントによって、直前に処理を受けたデータに続いて入力ストリーム内に保存された少なくとも１つのデータ項目を読み取るステップと、
このデータ項目を解析しかつ前記データ項目に対応するアクションを実行するステップと、
によって処理することを特徴とする請求項１から９のいずれか一項に記載のプロシージャ。
【請求項１１】
デシリアライゼーションプロシージャが、カレントオブジェクトと呼ばれるエレメントをロードすること、すなわち前記カレントオブジェクトのすべてまたは一部分に対して直接または間接的な値を割り当てることを含み、前記エレメントは構造化された結果オブジェクト（３４）の構造のすべてまたは一部を構成し、カレントオブジェクトのロードの終了によって、
タイプスタック（ＴＹＳＴ）と呼ばれるメモリ構造の次の箇所内に保存されたオブジェクトタイプを表すデータ項目（ＴＹＴ２）を読み取り、かつこの箇所から該データ項目を削除すること、
タイプスタックから読み取られたデータ項目（ＴＹＴ２）によって表されるタイプを、新たなカレントオブジェクトタイプ（ＴＹＯＢＪ）として保存すること、
を起動することを特徴とする請求項１から１０のいずれか一項に記載のプロシージャ。
【請求項１２】
デシリアライゼーションプロシージャによって作成された構造化オブジェクト（３４）は、タイプスタック（ＴＹＳＴ）が空であるときに、完了と見なされて、前記オブジェクトについての宛先であるソフトウェアエージェント（２２１）またはアプリケーション（２２）に送信されることを特徴とする請求項１から１１のいずれか一項に記載のプロシージャ。
【請求項１３】
新たなエレメントを指示する、「ＮＥＷ」タグと呼ばれるタグを表すデータ項目（３２１、３２６）に対応するデシリアライゼーションアクションは、
入力ストリーム内で少なくとも１つの連続するデータ項目（３２２、３２７）を読み取るステップと、
タイプスタック（ＴＹＳＴ）と呼ばれるメモリスタック内の前記連続するデータ項目（３２２、３２７）によって表されるオブジェクトタイプを、すでに保存された可能性があるタイプに続いて保存するステップと、
を含むことを特徴とする請求項１から１２のいずれか一項に記載のプロシージャ。
【請求項１４】
デシリアライゼーションプロシージャによって使用されるタイプスタック（ＴＹＳＴ）は、ＬＩＦＯタイプのスタック、すなわちその箇所が保存したときの順序と逆の順序で読み取られるスタックを備えることを特徴とする請求項１から１３のいずれか一項に記載のプロシージャ。
【請求項１５】
デシリアライゼーションプロシージャは、構造化された結果ソフトウェアオブジェクト（３４）の構造を構成しているエレメント（４１０または４１４）を、新たなメモリ空間の割り当てまたは開放された割り当ての再使用によって作成するためのステップを有し、前記作成は、作成されるエレメントのタイプに対応するタイプマネージャエージェント（ＴＭ０、ＴＭ１、ＴＭ２）によって実行されることを特徴とする請求項１から１４のいずれか一項に記載のプロシージャ。
【請求項１６】
構造化された結果ソフトウェアオブジェクト（３４）の構造を構成しているエレメント（４１０、４１４）を作成するステップは、前記エレメントの作成を指示するデータ項目（３２２、３２７）を読み取るステップと、この同じエレメントについての第１のロードステップとの間に発生することを特徴とする請求項１から１５のいずれか一項に記載のプロシージャ。
【請求項１７】
単純データ項目と呼ばれるデータ項目（３２４、３２５、３２９）、すなわちタグを表していないデータ項目に対応するアクションは、このデータ項目の値をカレントオブジェクトに割り当てられたメモリ空間内に保存するステップを含むことを特徴とする請求項１から１６のいずれか一項に記載のプロシージャ。
【請求項１８】
デシリアライゼーションプロシージャの間に、構造化された結果オブジェクト（３４）の構造を構成している少なくとも１つのエレメント（４１０）にオブジェクトインデックス（４１０２）が割り当てられ、前記オブジェクトインデックスは、前記エレメントが別のオブジェクトまたはエレメント（４１４）によって指定または参照されることが可能なように、前記エレメントを一意の方式で特定することを特徴とする請求項１から１７のいずれか一項に記載のプロシージャ。
【請求項１９】
参照を指示している「ＲＥＦ」タグと呼ばれるタグを表すデータ項目（３２１１）に対応するアクションは、
入力ストリーム（３２）内の少なくとも１つの連続するデータ項目（３２１２）を読み取るステップと、
カレントオブジェクト（３４４）に割り当てられたメモリ空間（３４４１）内に、カレントオブジェクトのすべてまたは一部分の値のソースとしてオブジェクト（３４０）を指定するデータ項目を、すでに保存されているデータ項目に続いて保存するステップとを含み、前記ソースオブジェクトまたはエレメント（３４０）は前記連続するデータ項目（３２１２）によって特定されることを特徴とする請求項１から１８のいずれか一項に記載のプロシージャ。
【請求項２０】
カレントオブジェクトのロードは、割り当てられたメモリ空間内に保存されたデータが所与の長さに対応したときに終了したと見なされ、前記長さは埋め込み式プラットフォーム内のジェネリックなタイプマネージャエージェント（ＴＭＧ）によって又はタイプマネージャエージェント（ＴＭ０、ＴＭ１、ＴＭ２）によって、カード（２）内の記憶装置から読み取られることを特徴とする請求項１から１９のいずれか一項に記載のプロシージャ。
【請求項２１】
埋め込み式プラットフォーム（２）による所与の長さの線形データシーケンス（４２）のホスト（１）への送信は、データ読み取りプロシージャと呼ばれる反復式プロシージャによって実行され、反復式プロシージャは、
すでに受信されたデータの長さを表している少なくとも１つの送信パラメータを伴う通信コマンドをホストによって送信するステップと、
埋め込み式プラットフォームによって送信パラメータを受信し、送信される線形データシーケンスと比較するステップと、
そのホストによってすでに受信されたデータの直後に続く１つまたは複数のデータ項目を表している少なくとも１つのリターンパラメータ（４３）の送信によって通信コマンドに応答するステップと、
この通信コマンドのリターンパラメータ（４３）をホストによって受信し、これが表しているデータをすでに受信されたデータに続いて保存するステップと、
の再帰的ステップを含むことを特徴とする請求項１から２０のいずれか一項に記載のプロシージャ。
【請求項２２】
埋め込み式プラットフォーム（２）による所与の長さの線形データシーケンス（４３）のホスト（１）からの受信は、データ書き込みプロシージャと呼ばれる反復式プロシージャに従って実行され、
すでに送信された送信される線形データシーケンスのうちの部分の直後に続く１つまたは複数のデータ項目を表している少なくとも１つの第１の送信パラメータ（３２）、ならびに必要に応じて、送信されるシーケンス内での第１の送信パラメータによって表されるデータの位置、またはすでに送信されたデータの長さを表している第２の送信パラメータを備えた通信コマンドをホストによって送信するステップと、
埋め込み式プラットフォームによって１つまたは複数の通信コマンド送信パラメータ（３２）を受信するステップと、
埋め込み式プラットフォームの入力ストリーム（３３）内に、すでに受信されたデータに続いて、第１の送信パラメータ（３２）によって表されるデータを保存するステップと、
の再帰的ステップを含むことを特徴とする請求項１から２１のいずれか一項に記載のプロシージャ。
【請求項２３】
データ書き込みプロシージャはさらに、
埋め込み式プラットフォームによって第２の送信パラメータを比較し、すでに受信されたデータの長さと比較するステップと、
埋め込み式プラットフォームによって、すでに受信されたデータの長さ又はこの比較の結果を表すデータ項目のいずれか、あるいはこの両者を表す少なくとも１つの応答パラメータを戻すステップと、
を含むことを特徴とする請求項１から２２のいずれか一項に記載のプロシージャ。
【請求項２４】
シリアライゼーション、デシリアライゼーション、データ読み取りまたはデータ書き込みのプロシージャのうちの少なくとも２つが、前記プロシージャの各々の少なくとも１つのステップの連続的実行を含むステップを反復することによって並列に実行またはインターリーブされることを特徴とする請求項１から２３のいずれか一項に記載のプロシージャ。
【請求項２５】
入力ストリームまたは出力ストリームあるいはこれらの両者は、前記２つのストリームが同じ循環式構造を共有することが可能である、循環式メモリ構造の形式で保存されることを特徴とする請求項１から２４のいずれか一項に記載のプロシージャ。
【請求項２６】
埋め込み式プラットフォームは、プログラマにより作成された少なくとも１つのアプリケーションを保存しかつ実行することが可能なプログラム可能環境を有し、その通信機能が標準ＩＳＯ７８１６で定義されるＡＰＤＵフォーマットと互換性をもつことを特徴とする請求項１から２５のいずれか一項に記載のプロシージャ。
【請求項２７】
受信したオブジェクトについてのデシリアライゼーションおよび処理のオペレーションは、構造化オブジェクトの受信を指示する少なくとも１つのデータ項目を含んだ少なくとも１つのＡＰＤＵフォーマットコマンドを受信することによって起動されることを特徴とする請求項２６に記載の変換プロシージャ。
【請求項２８】
埋め込み式プラットフォームはＪａｖａＣａｒｄ（登録商標）標準と互換性があるプログラム可能環境を有していることを特徴とする請求項１から２７のいずれか一項に記載のプロシージャ。
【請求項２９】
ホストまたは埋め込み式プラットフォーム上で実行されるアプリケーションの少なくとも１つは、Ｊａｖａ（登録商標）言語でプログラムされていることを特徴とする請求項１から２８のいずれか一項に記載のプロシージャ。
【請求項３０】
データ読み取り、データ書き込み、デシリアライゼーションまたはシリアライゼーションのプロシージャがホストまたは埋め込み式プラットフォーム内に保存された少なくとも１つのクラス内の実装によって実行され、前記実装は、
オブジェクトに対するシリアライゼーションプロシージャを利用し、続いてデータ書き込みプロシージャおよびデシリアライゼーションプロシージャによって、構造化オブジェクト（３１）を埋め込み式プラットフォームの少なくとも１つのエージェント（２２１）に送信するオブジェクト書き込みコマンドと、
シリアライゼーションプロシージャを利用し、続いてデータ読み取りプロシージャおよびデシリアライゼーションプロシージャによって、埋め込み式プラットフォームの少なくとも１つのエージェント（２２１）から構造化オブジェクト（４１）を読み取るオブジェクト読み取りコマンドと、
このコンポーネントの構造の解析後に、前記オブジェクトの各コンポーネントに割り当てられたメモリ空間の解放またはデアロケーションについての保存ステップを含む、シリアライゼーションプロシージャを利用することにより、埋め込み式プラットフォーム内に保存された構造化オブジェクトについてのデアロケーションコマンドと、
所与の線形データシーケンスから非実体的コンテンツを有するオブジェクトを作成するためにデシリアライゼーションプロシージャを利用して、構造化オブジェクトによって解放されたメモリ空間についてのハウスキーピングまたは消去コマンドと、
この同じオブジェクトを表す線形データシーケンスを作成するために、前記ソースオブジェクトをデアロケーションすることなく、シリアライゼーションプロシージャを利用し、次いで、そのコンテンツがソースオブジェクトのコンテンツと同一である別の構造化オブジェクトを作成するために、前記線形データシーケンスからのデシリアライゼーションプロシージャを利用することにより、ソースオブジェクトと呼ばれる構造化オブジェクトについての複製コマンドと、
のうちの少なくとも１つを含むことを特徴とする請求項１から２９のいずれか一項に記載のプロシージャ。
【請求項３１】
埋め込み式プラットフォームのプログラミング言語は、ＡＰＤＵメッセージを受信するとアプリケーション内でユーザ定義可能なプロセスを起動するＰｒｏｃｅｓｓＡＰＤＵ抽象メソッドを記述している第１のクラス（ＩＯＡｐｐｌｅｔ）を含み、そのプログラムコードは、第１のクラス（ＩＯＡｐｐｌｅｔ）を継承する第２のクラス（ＯｂｊｅｃｔＩＯＡｐｐｌｅｔ）内で、前記ＰｒｏｃｅｓｓＡＢＤＵ抽象メソッドの実装として、前記埋め込み式プラットフォーム内に保存されている埋め込み式プラットフォーム内のデシリアライゼーションオペレーションを実行し、前記プログラムコードはＰｒｏｃｅｓｓＯｂｊｅｃｔメソッドをコールし、それはこの同じ実施クラス（ＯｂｊｅｃｔＩＯＡｐｐｌｅｔ）内の１つの抽象メソッドとして記述されることを特徴とする請求項３０に記載のプロシージャ。
【請求項３２】
埋め込み式プラットフォームのプログラミング言語は、ＡＰＤＵフォーマットのメッセージをホストに送信するＳｅｎｄＡＰＤＵメソッドを記述している第１のクラス（ＩＯＡｐｐｌｅｔ）を含んでおり、このプログラムコードは、前記第１のクラス（ＩＯＡｐｐｌｅｔ）を継承する第２のクラス（ＯｂｊｅｃｔＩＯＡｐｐｌｅｔ）内で、ＳｅｎｄＡＰＤＵメソッドをコールする少なくとも１つのＳｅｎｄＯｂｊｅｃｔメソッドの実装として、保存されている埋め込み式プラットフォーム内でシリアライゼーションオペレーションを実行することを特徴とする請求項（Ｊａｖａｃａｒｄ）に記載のプロシージャ。
【請求項３３】
埋め込み式プラットフォーム内で保存されるか又は実行されるカードエージェントと呼ばれる少なくとも１つのソフトウェアエージェントと、ＡＡＡ−ＭＯＭタイプソフトウェアインフラストラクチャに従って非同期のメッセージによって通信するコンピュータネットワークに属する少なくとも１つのホスト内で保存されるか又は実行されるカードエンジンプロキシエージェントと呼ばれる少なくとも１つのソフトウェアエージェントと、の間の通信のために使用されており、前記カードエンジンプロキシエージェントは前記ネットワークの別のエージェントとの通信においてカードエージェントについての媒介として動作し、前記エージェントは、前記ソフトウェアインフラストラクチャの仕様に従って動作しかつ少なくとも１つの分散式アプリケーションに属することを特徴とする請求項１から３２のいずれか一項に記載のプロシージャ。
【請求項３４】
埋め込み式プラットフォームと呼ばれるコンピュータステーション（２）を備えており、１つまたは複数の線形データシーケンスの形式で端末との情報の交換が可能な、少なくとも１つのプロセッサ、記憶設備および通信リソースを含む携帯オブジェクトを備えるコンピュータシステムであって、このプラットフォームは、一方で線形データシーケンス配置と、他方でオブジェクト指向のプログラミング言語の基準に従って構造化または階層化された１つまたは複数のソフトウェアオブジェクトを記述または表現している構造化配置との間で、ある方向または他の方向へのデータセットの変換ステップを実行することが可能なシリアライゼーションエージェント（２１２）を組み込んでいることを特徴とするコンピュータシステム。
【請求項３５】
埋め込み式プラットフォーム（２）は、
埋め込み式プラットフォーム内に保存された宛先ソフトウェアエージェント（２２１）についての応答機能（２０１）によって受信された、１つまたは複数の線形データシーケンスに配置されてたデータセット（３２）を宛先エージェント（２２１）の代わりに受信し、
前記データセットを、オブジェクト指向のプログラミング言語の基準に従って構造化または階層化された、少なくとも１つのソフトウェアオブジェクト（３４）に変換し、
前記構造化ソフトウェアオブジェクト（３４）を宛先エージェント（２２１）に送信し、前記オブジェクトに従って前記宛先エージェント（２２１）によってプロセス（２２１０）の実行を起動する、
ことを行うことが可能な通信エージェント（２１１）を含むことを特徴とする請求項３４に記載のシステム。
【請求項３６】
構造化ソフトウェアオブジェクトを表す線形データシーケンスは、入力または出力ストリームで埋め込み式プラットフォーム内に保存されており、埋め込み式プラットフォームは、入力ストリームによって表される１つまたは複数の構造化オブジェクトを埋め込み式プラットフォーム内で作成すること、すなわち前記構造化オブジェクトをデシリアライゼーションすること、あるいは送信される１つまたは複数の構造化オブジェクトを表すデータを出力ストリーム内に書き込むこと、すなわち前記構造化オブジェクトをシリアライゼーションすることが可能な、シリアライゼーションエージェント（２１２）と呼ばれるソフトウェアエージェントを組み込んでいることを特徴とする請求項３４から３５のいずれか一項に記載のシステム。
【請求項３７】
入力ストリームまたは出力ストリームは、１つまたは複数の循環式メモリ構造の形式で保存されていることを特徴とする請求項３４から３６のいずれか一項に記載のシステム。
【請求項３８】
シリアライゼーションエージェント（２１２）は、タイプスタックと呼ばれるメモリスタックを使用し、シリアライズまたはデシリアライズされる構造化オブジェクトの構造のすべてまたは一部を構成している少なくとも１つのオブジェクトのタイプを保存し、前記タイプスタックは、最も間近にロードされたメモリ位置が読み取られかつ消去されるまでそのいずれにもアクセスできないメモリ位置を含むことを特徴とする請求項３４から３７のいずれか一項に記載のシステム。
【請求項３９】
入力または出力ストリーム内に含まれるデータは、その各々が前記線形データシーケンスをデシリアライゼーションした際に実行される所与のアクションを表しているタグの組を備えるコードを用いて１つまたは複数の構造化オブジェクトを表すことを特徴とする請求項３４から３８のいずれか一項に記載のシステム。
【請求項４０】
少なくとも１つのタグは、
線形データシーケンスによって表された構造化オブジェクトの構造に新たなエレメントを追加するアクションと、
構造化オブジェクトを構成するエレメントのすべてまたは一部分の値のソースとして、ソースオブジェクトと呼ばれるエレメントまたはオブジェクトを参照するアクションと、
後続の１つまたは複数のデータ項目が構造化オブジェクトを構成するエレメントのコンテンツを表していることを指示するアクションと、
構造化オブジェクトを構成するエレメントについてのコンテンツが存在しないことを指示するアクションと、
のうちの１つを表すように定義されることを特徴とする請求項３４から３９のいずれか一項に記載のシステム。
【請求項４１】
埋め込み式プラットフォームは標準ＩＳＯ７８１６に従いかつＡＰＤＵフォーマットコマンドを用いて動作する携帯オブジェクトを含むことを特徴とする請求項３４から４０のいずれか一項に記載のシステム。
【請求項４２】
埋め込み式プラットフォーム内に保存された少なくとも１つのエージェントまたはアプリケーションは、Ｊａｖａ（登録商標）言語でプログラムされており、埋め込み式プラットフォームはＪａｖａＣａｒｄ（登録商標）標準に従ったコンピュータ環境を有することを特徴とする請求項３４から４１のいずれか一項に記載のシステム。
【請求項４３】
ホスト内、埋め込み式プラットフォーム内、あるいはこの両者内に、
ホスト内において前記構造化オブジェクトをデータストリームにシリアライゼーションさせ、続いてこのデータストリームを埋め込み式プラットフォームに送信し、埋め込み式プラットフォーム内において前記データストリームを構造化オブジェクトにデシリアライゼーションすることによって、カードの少なくとも１つのエージェント（２２１）へ構造化オブジェクト（３１）を送信する、オブジェクト書き込みコマンドと、
埋め込み式プラットフォーム内において前記構造化オブジェクトをデータストリームにシリアライゼーションし、続いて埋め込み式プラットフォームから前記データストリームを受信し、ホスト内において前記データストリームを構造化オブジェクトにデシリアライゼーションすることによって、カードの少なくとも１つのエージェント（２２１）から構造化オブジェクト（４１）を読み取る、オブジェクト読み取りコマンドと、
前記コンポーネントの構造の解析後に、構造化オブジェクトの各コンポーネントに割り当てられたメモリ空間の解放またはデアロケーションを含むオプションに従って前記オブジェクトをシリアライゼーションすることにより、埋め込み式プラットフォーム内に保存された構造化オブジェクトについてのデアロケーションコマンドと、
非実体的コンテンツを伴うオブジェクトを作成するために、所与の線形データシーケンスをデシリアライゼーションすることにより、埋め込み式プラットフォーム内の構造化オブジェクトによって解放されたメモリ空間についてのハウスキーピングまたは消去コマンドと、
ソースオブジェクトのデアロケーションなしに同じオブジェクトを表している線形データシーケンスにシリアライゼーションし、続いてそのコンテンツがソースオブジェクトのコンテンツと同一であるような別の構造化オブジェクトに前記線形データシーケンスからデシリアライゼーションすることによって、埋め込み式プラットフォーム内においてソースオブジェクトと呼ばれる構造化オブジェクトを複製するコマンドと、
のうちの少なくとも１つを実装している少なくとも１つのソフトウェアクラスを含むことを特徴とする請求項３４から４２のいずれか一項に記載のシステム。
【請求項４４】
埋め込み式プラットフォームは、ＡＡＡ−ＭＯＭタイプソフトウェアインフラストラクチャに従って非同期のメッセージによって通信しているコンピュータネットワークに属する少なくとも１つのホストと通信しており、前記ホストは前記埋め込み式プラットフォームと前記ネットワークの別のエージェントの間の通信を管理することが可能な、カードエンジンプロキシエージェントと呼ばれる、ソフトウェアエージェントを含み、前記エージェントは、前記ソフトウェアインフラストラクチャの仕様に従って動作し、少なくとも１つの分散式アプリケーションに属することを特徴とする請求項３４から４３のいずれか一項に記載のシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、埋め込み式コンピュータステーションの機能などの単純な通信機能を用いた直接的な転送を提供するような構造化ソフトウェアオブジェクトの生データフローへの変換およびこの逆の変換のため、ならびに前記ソフトウェアオブジェクトのリセットまたはこれらに割り当てられたメモリ空間の再利用のための反復式プロシージャに関する。
【背景技術】
【０００２】
高級言語で、特にＪａｖａ（登録商標）などの構造化言語またはオブジェクト指向言語でプログラムされたアプリケーション内において、使用または処理されるデータの大部分は単純なバイトのシーケンスと比べてより複雑な精密構造を有するソフトウェアオブジェクトの形態で組織化されかつ格納されている。こうしたオブジェクトは、多数の変数またはデータのグループを、たとえばキャラクタ（「ｃｈａｒ」タイプ）または整数（「ｉｎｔ」タイプ）などの単純なタイプの形態、あるいは基本オブジェクトタイプまたはプログラマによって定義されたタイプ、キャラクタストリング（「ｓｔｒｉｎｇ」タイプ）、または上で定義されたタイプの１つまたは複数の次元を有する配列（「ａｒｒａｙ」タイプ）の形態で含むことが可能である。このタイプの構造化オブジェクトは、したがって、様々なタイプをもつ様々なオブジェクト自体をグループ分けしているツリー構造によって定義または表現することができ、この種の構造の組織化をオブジェクト組成グラフ（ｏｂｊｅｃｔ  ｃｏｍｐｏｓｉｔｉｏｎ  ｇｒａｐｈ）と呼ぶことがある）。オブジェクトタイプは別のタイプの定義（一般に、「スーパータイプ」と呼ぶ）から「継承によって（ｂｙ  ｉｎｈｅｒｉｔａｎｃｅ）」定義することが可能であり、またすべてのタイプを継承グラフと呼ぶツリー構造の形態で表現することが可能である。
【０００３】
この特定のケースによれば、コンピュータアプリケーションが取り扱うソフトウェアオブジェクトに対する転送、作成または削除を、これらの機能が常には可能でないか現実的でないようなハードウェアまたはソフトウェア環境において可能とすることが有用となり得る。
【０００４】
たとえば、多数のコンピュータアプリケーションは、あるコンピュータ端末および多分あるコンピュータネットワークとを一方とし、銀行、電話加入またはヘルスケア管理スマートカード、あるいはコンピュータ化された識別、マーキングまたはトール（ｔｏｌｌ）デバイスなどのデータ処理能力を有する携帯オブジェクトまたは埋め込み式プラットフォームをもう一方とするこれらの間に通信を組み込んでいる。
【０００５】
こうした携帯オブジェクトは、特に、記憶デバイスと関連付けされており、少なくとも１つのアプリケーションプログラムを含んでおり、かつ１つまたは複数の端末との通信のための機能を備えたプロセッサを組み込んでいる。これらの通信機能は、たとえば電気的接触、無線アンテナ、発光式またはその他の送信形態などの異なるタイプのテクノロジを用いた電子的データの送信に基づいており、これによって同じ携帯オブジェクトにおいて多数の異なるタイプの送信を組み合わせることが可能となる。大きさのため、またいくつかの場合では歴史的理由のために、通常利用される通信機能は、スマートカードについての標準ＩＳＯ７８１６に対するＡＰＤＵプロトコルなどの単純なプロトコルによって動作している。これらのプロトコルのうちのいくつかは、単純なタイプのオブジェクトの転送することのみを（整数または単純なキャラクタの形式で）、オブジェクトに送信された、あるいはオブジェクトから応答として受信された制御パラメータとして、または端末の主導のみによって、あるいはこれら両者によって、提供している。ＩＳＯ７８１６標準の場合では、ＡＰＤＵプロトコルは生データの形式のタイプをもたないオブジェクトの転送のみを、コンピュータ式携帯オブジェクトに制御パラメータとして送られるバイトとして、またはオブジェクトから応答として取得されるバイトとして、および端末の主導のみによって、可能としている。
【０００６】
これらの発展の目下の状態では、ＪａｖａＣａｒｄ（登録商標）などこれらの携帯データ処理オブジェクトのうちのいくつかは、内部機能を組み込んでおり、これによってプログラムされたアプリケーションエレメントを高級言語やＪａｖａ（登録商標）などのオブジェクト指向言語において直接これらを活用すること、ならびに拡張方式で通信している集中式または分散式アプリケーションにこれらを組み込むことが可能となる。このタイプの埋め込み式プラットフォームの内部に配置されたアプリケーションと通信するためには、こうしたアプリケーションのプログラマは、構造化ソフトウェアオブジェクトの使用を回避しなければならず、またケースバイケースで、これらのオブジェクトのこの埋め込み式プラットフォームへの転送およびこの埋め込み式プラットフォームからの転送に関して直接的な処理を提供しなければならない。
【０００７】
このタイプの携帯オブジェクトのプロセッサ内で実行させることが可能なアプリケーションをプログラムする際に、このタイプの言語のパフォーマンスおよびフレキシビリティを最大限に活用するには、したがって、そのアプリケーションがそのオブジェクトの外部にある別のアプリケーションと容易に通信できると有用である。したがって、このコンテキストでは、そのアプリケーションが自らが処理するオブジェクトを、これらのオブジェクトに関する組織化や構造をまったく失わずに、前記外部のアプリケーションとやり取りできると有用である。
【０００８】
Ｊａｖａ（登録商標）などのプログラミング言語では、構造化オブジェクトのシリアライゼーション（ｓｅｒｉａｌｉｓａｔｉｏｎ）／デシリアライゼーション（ｄｅｓｅｒｉａｌｉｓａｔｉｏｎ）のために使用されるプロシージャは、実質的ななハードウェアおよびソフトウェアリソースに依拠する可能性がある。これらのプロシージャは特に構造化オブジェクトを１つのファイルに保存するため、あるいは２つの異なる作業用メモリフィールドで実行される２つのプログラムプロセス間で構造化オブジェクトを送信するために使用される。
【０００９】
これらのプロシージャでは、しかしながら、特にＪａｖａｃａｒｄ（登録商標）を含むある種の埋め込み式プラットフォームでは利用可能でないようなソフトウェアおよびハードウェアリソースが必要となる。たとえば、従来のＪａｖａ（登録商標）プラットフォームにより使用される基本クラスは、１ＭＢを超えるメモリ空間（Ｊａｖａ（登録商標）  Ｄｅｖｅｌｏｐｐｅｍｅｎｔ  Ｋｉｔ：９ＭＢ）を占有するが、標準Ｊａｖａｃａｒｄ（登録商標）スマートカードが有するのはわずか１６ＫＢの記憶容量のみである。
【００１０】
従来のシリアライゼーションプロシージャは従来のＪａｖａ（登録商標）環境リソースを利用しており、またそのアルゴリズムは、利用およびコンピュータ管理式メンテナンスを容易にすることを目的として設計されている。このためこれらは、そのような制限されたパフォーマンスを有する埋め込み式プラットフォームへの転置（ｔｒａｎｓｐｏｓｉｔｉｏｎ）を行うには、記憶容量ならびにプロセッサのパワーおよび速さに関して、さらに一層のメモリを必要としかつ複雑過ぎることになる。
【００１１】
さらに、たとえばＪａｖａ（登録商標）では、シリアライゼーションプロシージャは、各ハードウェアプラットフォーム上で実行されているＪａｖａ（登録商標）仮想マシン（ＶＭ）内で実現されるジェネリックなオブジェクトタイプマネージャを使用している。
【００１２】
埋め込み式プラットフォームに対する適応で必要となる簡潔性のために、目下のバージョンのＪａｖａｃａｒｄ（登録商標）環境はタイプマネージャを組み込んでいない。したがって、標準Ｊａｖａ（登録商標）構成で使用されるようなシリアライゼーションプロシージャでは、ＡＰＤＵフォーマットで受信したデータからの復元のために構造化オブジェクトの構造を表す情報に対するアクセスを有することがない。
【００１３】
さらに、従来のコンピュータ環境では、メモリ装置は、Ｊａｖａ（登録商標）などのオブジェクト指向のプログラミング言語で実行されるシリアライゼーションプロシージャがその送信しようとする構造化オブジェクトのサイズと無関係であるようなものとなっている。送信しようとするオブジェクトは、送信側によって宛先によるその受信と無関係にシリアライズされており、受信されたオブジェクトは、宛先によってその送信側やその送信時点と無関係にデシリアライズすることができる。次いで、このプログラミング環境の外部にあるソフトウェア機構によって線形データストリームが送信側と宛先の間で送信されかつ管理される。これらのストリームは、したがって、大容量のバッファを介して送信することができ、またたとえば、ＴＣＰ／ＩＰなどのプロトコルなどの別のソフトウェアレイヤによって管理される。
【００１４】
埋め込み式プラットフォームの場合には、外部とのデータ交換を可能とするために使用されるソフトウェア機構は、送信されるデータの完全性（ｉｎｔｅｇｒｉｔｙ）および一貫性（ｃｏｎｔｉｎｕｉｔｙ）を保証するストリーム管理機能を提供していない。さらにまた、埋め込み式プラットフォームの適度なメモリリソースは、送信および変換の際に線形ストリームの保存、すなわち、大きなオブジェクトの保存が不可能ともなる。
【発明の開示】
【発明が解決しようとする課題】
【００１５】
したがって、本発明の目的の１つは、送信側と受信機の間の通信機能がオブジェクトを構成する構造の転送が可能ではいがしかし転送できるのはより単純な形態のデータだけである場合や、その埋め込み式プラットフォームのソフトウェアおよびハードウェアリソースが従来のシリアライゼーションプロシージャの使用を可能にできるほど十分にない場合において、埋め込み式プラットフォームを使用するアプリケーションのプログラマに対して、このタイプの携帯オブジェクト内に保存されるか又は実行されるソフトウェアエージェントまたはアプリケーションエレメントに、別のコンピュータステーションに配置された別のエージェントから構造化ソフトウェアオブジェクトの形式に組織化されたデータを受け取ることや該エージェントに該データを送信することを可能にする、自動化ソフトウェアツールへのアクセスを可能にする、プロシージャを提供することである。
【課題を解決するための手段】
【００１６】
この目的は、１つまたは複数の線形データシーケンスの形式で端末との情報の交換が可能な、少なくとも１つのプロセッサ、記憶設備、および通信機能を組み込んだ携帯オブジェクトを備えた、コンピュータステーションまたは埋め込み式プラットフォームによって使用されることが可能なデータ変換プロシージャであって、一方で線形データシーケンス配置と、他方でオブジェクト指向のプログラミング言語の基準に従って構造化または階層化された１つまたは複数のソフトウェアオブジェクトを記述または表現している構造化配置との間で、ある方向または他の方向への、データセット変換のステップを組み込むことを特徴とするデータ変換プロシージャによって達成される。
【００１７】
本発明の独自性の１つによれば、そのプロシージャは、
オブジェクト指向のプログラミング言語の基準に従って構造化または階層化された１つまたは複数のソフトウェアオブジェクトを組み込むか表現している、送信される第１のデータセットを、このオブジェクトを記述または表現している構造化配置からこの第１のデータセットを表現している線形データシーケンスに変換またはシリアライゼーションするステップと、
埋め込み式プラットフォームから、少なくとも１つのホストへ、すなわちある端末または該端末に接続されたコンピュータステーションへ、又は、このホストから埋め込み式プラットフォームへ、通信機能を用いてこの線形データシーケンスを送信するステップと、
この線形データシーケンスを、第１のデータセットを再生するまたは表現する１つまたは複数の構造化ソフトウェアオブジェクトに配置されたデータセットに送信後変換するまたはデシリアライゼーションするステップと
を含んでいる。
【００１８】
本発明の独自性の１つによれば、そのホスト端末は埋め込み式プラットフォームに対して送信機能と呼ばれるソフトウェアエージェントを用いて情報を送信し、前記情報は埋め込み式プラットフォーム内に保存された少なくとも１つの宛先ソフトウェアエージェントによってこれらのデータの処理を起動することが可能でありかつ少なくとも１つのアプリケーションの一部を形成している応答機能によって埋め込み式プラットフォーム内で受信され、このプロシージャは、
前記宛先ソフトウェアエージェントについての応答機能によって受信された、線形データシーケンスに配置されているデータセットを、宛先エージェントの代わりに通信エージェントによって受信するステップと、
オブジェクト指向のプログラミング言語の基準に従って構造化または階層化された少なくとも１つのソフトウェアオブジェクトにこのデータセットを変換するステップと、
この構造化ソフトウェアオブジェクトを宛先エージェントに送信し、前記オブジェクトに従い、前記宛先エージェントによって処理を起動するステップと
を組み込んでいる。
【００１９】
本発明の独自性の１つによれば、そのプロシージャは、
応答機能によってホスト送信機能から、少なくとも１つの送信パラメータの形式の少なくとも１つのデータ項目を受信し、このパラメータを埋め込み式プラットフォーム内で保存されるか又は実行される通信エージェントに送信するステップと、
応答エージェントによって送信された少なくとも１つの送信パラメータを、通信エージェントによって、線形データシーケンスに配置されたデータセットに変換または連結し、これらのデータを埋め込み式プラットフォーム内の入力ストリーム内に保存するステップと、
埋め込み式プラットフォーム内で保存されるか又は実行されるシリアライゼーションエージェントによって、この入力ストリーム内に保存されたデータの少なくとも一部を、少なくとも１つの構造化ソフトウェアオブジェクトを備えるまたは表すデータセットに変換またはデシリアライゼーションするステップと、
この構造化ソフトウェアオブジェクトまたはその参照を宛先エージェントによって受信するステップと、
を組み込んでいる。
【００２０】
本発明の独自性の１つによれば、そのプロシージャは、
構造化ソフトウェアオブジェクトまたはその表現を、埋め込み式プラットフォーム内で実行されるか又は保存されるアプリケーションの一部を形成するソフトウェアエージェントから、前記埋め込み式プラットフォーム内で実行されるか又は保存されるシリアライゼーションエージェントに送信するステップと、
前記構造化ソフトウェアオブジェクトの前記シリアライゼーションエージェントによって線形データシーケンスに配置されたデータセットに変換またはシリアライゼーションし、これらのデータを埋め込み式プラットフォーム内の出力ストリーム内に保存するステップと、
埋め込み式プラットフォーム内で保存されるか又は実行される通信エージェントによって、この出力ストリーム内に保存されたデータの少なくとも一部を応答機能による送信に適した応答パラメータの組に変換するステップと、
それ自体の主導でまたはホスト端末の送信機能に応答して、応答機能によって、これらの応答パラメータを埋め込み式プラットフォームからホスト端末に送信するステップと、
を組み込んでいる。
【００２１】
本発明の独自性の１つによれば、入力ストリームまたは出力ストリーム内に保存された線形データシーケンスは、タグと呼ばれる１つまたは複数のデータ項目を用いて構造化または階層化された１つまたは複数のソフトウェアオブジェクトを表しており、その各々が前記線形データシーケンスのデシリアライゼーションに関して実行される所与のアクションを表している１つまたは複数の所与の値を有している。
【００２２】
本発明の独自性の１つによれば、少なくとも１つのタグは、
線形データシーケンスによって表された構造化オブジェクトの構造に新たなエレメントを追加するアクションと、
ソースオブジェクトと呼ばれるエレメントまたはオブジェクトを、構造化オブジェクトを構成するエレメントのすべてまたは一部分の値のソースとして参照するアクションと、
後続の１つまたは複数のデータ項目が構造化オブジェクトを構成するエレメントのコンテンツを表していることを指示するアクションと、
構造化オブジェクトを構成するエレメントにについてのコンテンツが存在しないことを指示するアクションと、
のうちの１つを表すように定義されている。
【００２３】
本発明の独自性の１つによれば、そのシリアライゼーションエージェントは、ソースオブジェクトと呼ばれる構造化オブジェクトを１つの線形データセットに、シリアライゼーションプロシージャと呼ばれるプロシージャに従って、シリアライゼーションし、この構造化ソースオブジェクトの構造またはツリー構造を構成するエレメントと呼ばれる、オブジェクトのうちの少なくとも１つを、
シリアライゼーションエージェントによって、前記構造化オブジェクトの構造またはツリー構造を構成するカレントオブジェクトと呼ばれるエレメントのタイプを検出するステップと、
新たなエレメントの追加を指示しているタグを表すデータ項目、続いてカレントオブジェクトのタイプを表すデータ項目を、出力ストリーム内に保存するステップと、
出力ストリーム内に、カレントオブジェクトのタイプと関連付けされたタイプの、シリアライゼーションエージェントによって、該ストリーム内にすでに存在するエレメントに続けて保存するステップであって、
構造化オブジェクトのすべてまたは一部分の値を表しているデータ項目によるか、
あるオブジェクトに対する参照を、構造化オブジェクトのすべてまたは一部分の値のソースとして指示するタグを表しているデータ項目であって、前記タグの後には前記ソースオブジェクトを特定しているデータ項目が続いているようなデータ項目によるか、
のいずれかによっている保存ステップと、
によって処理する。
【００２４】
本発明の独自性の１つによれば、そのシリアライゼーションプロシージャは構造化オブジェクトを出力ストリームに変換し、各カレントオブジェクトのタイプを、プロシージャの連続した反復によって、その保存箇所がその保存の順序と逆の順序で読み取られるタイプスタックと呼ばれるメモリスタック内に保存される。
【００２５】
本発明の独自性の１つによれば、そのシリアライゼーションエージェントは、線形データセットを少なくとも１つの構造化された結果オブジェクトに、デシリアライゼーションプロシージャと呼ばれるプロシージャによってデシリアライズし、入力ストリーム内に保存されたデータ項目の各々を、
シリアライゼーションエージェントによって、直前に処理を受けたデータに続いて入力ストリーム内に保存された少なくとも１つのデータ項目を読み取るステップと、
このデータ項目を解析しかつこのデータ項目に対応するアクションを実施するステップと、
によって処理する。
【００２６】
本発明の目的の１つはさらに、埋め込み式プラットフォームの動作環境が構造化オブジェクトに関するタイプマネージャを組み込んでいない場合に、ホストと埋め込み式プラットフォームの間でのソフトウェアオブジェクトの転送を可能としている、このタイプの構造化オブジェクト転送プロシージャを提示することである。
【００２７】
この目的は、そのデシリアライゼーションプロシージャが、カレントオブジェクトと呼ばれるエレメントをロードすること、すなわち前記カレントオブジェクトのすべてまたは一部分に対して直接または間接的な値を割り当てることを含み、前記エレメントは構造化された結果オブジェクトの構造のすべてまたは一部を構成し、カレントオブジェクトのロードの終了によって、
タイプスタックと呼ばれるメモリ構造の次の箇所内に保存されたオブジェクトタイプを表すデータ項目を読み取り、かつこの箇所から前記データ項目を削除すること、
タイプスタックから読み取られたデータ項目によって表されるタイプを、新たなカレントオブジェクトのタイプとして保存すること、
を起動することを特徴とする上述したデータ変換プロシージャによって達成される。
【００２８】
本発明の独自性の１つによれば、デシリアライゼーションプロシージャによって作成された構造化オブジェクトは、タイプスタックが空であるときに、完了と見なされて、宛先であるソフトウェアエージェントまたはアプリケーションに送信される。
【００２９】
本発明の独自性の１つによれば、新たなエレメントを指示する、「ＮＥＷ」タグと呼ばれるタグを表すデータ項目に対応するデシリアライゼーションオペレーションは、
入力ストリーム内で少なくとも１つの連続するデータ項目を読み取るステップと、
タイプスタックと呼ばれるメモリスタック内のこの連続するデータ項目によって表されるオブジェクトタイプを、このスタック内にすでに保存された可能性があるタイプに続いて保存するステップと、
を含む。
【００３０】
本発明の独自性の１つによれば、デシリアライゼーションプロシージャによって使用されるスタックのタイプは、ＬＩＦＯタイプのスタック、すなわちその箇所が保存したときの順序と逆の順序で読み取られるスタックを備えている。
【００３１】
本発明の独自性の１つによれば、そのデシリアライゼーションプロシージャは、構造化された結果ソフトウェアオブジェクトの構造を構成しているエレメントを、新たなメモリ空間の割り当てまたは開放された割り当ての再使用によって作成するためのステップを有し、前記作成は、作成されるエレメントのタイプに対応するタイプマネージャエージェントによって実行される。
【００３２】
本発明の独自性の１つによれば、構造化された結果ソフトウェアオブジェクトの構造を構成しているエレメントを作成するステップは、このエレメントの作成を指示するデータ項目を読み取るステップと、前記エレメントについての第１のロードステップとの間に発生する。
【００３３】
本発明の独自性の１つによれば、単純データ項目と呼ばれるデータ項目、すなわちタグを表していないデータ項目に対応するアクションは、このデータ項目の値をカレントオブジェクトに割り当てられたメモリ空間内に保存するステップを含む。
【００３４】
本発明の独自性の１つによれば、デシリアライゼーションプロシージャの間に、構造化された結果オブジェクトの構造を構成している少なくとも１つのエレメントにオブジェクトインデックスが割り当てられ、前記オブジェクトインデックスは、前記エレメントを一意に特定しており、かつこのエレメントが別のオブジェクトまたはエレメントによって指定または参照されることを可能とさせている。
【００３５】
本発明の独自性の１つによれば、参照を指示している「ＲＥＦ」タグと呼ばれるタグを表すデータ項目に対応するアクションは、
入力ストリーム内の少なくとも１つの連続するデータ項目を読み取るステップと、
カレントオブジェクトに割り当てられたメモリ空間内に、カレントオブジェクトのすべてまたは一部分の値のソースとしてオブジェクトを指定するデータ項目を、すでに保存されているデータ項目に続いて保存するステップとを含み、前記ソースオブジェクトまたはエレメントは前記連続するデータ項目によって特定される。
【００３６】
本発明の独自性の１つによれば、カレントオブジェクトのロードは、前記オブジェクトに割り当てられたメモリ空間内に保存されたデータがタイプマネージャエージェントまたは埋め込み式プラットフォーム内に保存されたタイプに関するマネージャエージェントによってカードメモリから読み取られる所与の長さに対応したときに、終了したと見なされる。
【００３７】
本発明の独自性の１つによれば、埋め込み式プラットフォームによる所与の長さの線形データシーケンスのホストへの送信は、データ読み取りプロシージャと呼ばれる反復式プロシージャによって実行され、
すでに受信されたデータの長さを表している少なくとも１つの送信パラメータを含む通信コマンドをホストによって送信するステップと、
埋め込み式プラットフォームによって送信パラメータを受信し、送信される線形データシーケンスと比較するステップと、
そのホストによってすでに受信されたデータの直後に続く１つまたは複数のデータ項目を表している少なくとも１つのリターンパラメータの送信によって通信コマンドに応答するステップと、
この通信コマンドリターンパラメータをホストによって受信し、これが表しているデータをすでに受信されたデータに続いて保存するステップと、
の再帰的ステップを含む。
【００３８】
本発明の独自性の１つによれば、埋め込み式プラットフォームによる所与の長さの線形データシーケンスのホストからの受信は、データ書き込みプロシージャと呼ばれる反復式プロシージャに従って実行され、
すでに送信された送信される線形データシーケンスのうちの部分の直後に続く１つまたは複数のデータ項目を表している少なくとも第１の送信パラメータ、ならびに必要に応じて、送信されるシーケンス内での第１の送信パラメータによって表されるデータの位置、またはすでに送信されたデータの長さを表している第２の送信パラメータを備えた通信コマンドをホストによって送信するステップと、
埋め込み式プラットフォームによって通信コマンド送信パラメータを受信するステップと、
埋め込み式プラットフォームの入力ストリーム内に、すでに受信されたデータに続いて、第１の送信パラメータによって表されるデータを保存するステップと、
の再帰的ステップを含む。
【００３９】
本発明の独自性の１つによれば、そのデータ書き込みプロシージャはさらに、
埋め込み式プラットフォームによって第２の送信パラメータを比較し、すでに受信されたデータの長さと比較するステップと、
埋め込み式プラットフォームによって、すでに受信されたデータの長さ又はこの比較の結果を表すデータ項目のいずれか、あるいはこの両者を表す少なくとも１つの応答パラメータを戻すステップと、
を含む。
【００４０】
本発明の目的の１つはさらに、転送または一時記憶に関する通信機能の可能性、または無制限のサイズをもつソフトウェアオブジェクトに関連して十分なサイズをもつソフトウェアオブジェクトを転送することを可能にするようなタイプの構造化オブジェクト転送プロシージャを提示することである。
【００４１】
この目的は、シリアライゼーション、デシリアライゼーション、データ読み取りまたはデータ書き込みのプロシージャのうちの少なくとも２つが、これらのプロシージャの各々の少なくとも１つのステップの連続的実行を含むステップを反復することによって、並列にまたはインターリーブされることを特徴とする上述したデータ変換プロシージャによって達成される。
【００４２】
本発明の独自性の１つによれば、その入力ストリーム、出力ストリームあるいはこれらの両者は、その２つのストリームが同じ循環式構造を共有することが可能である、循環式メモリ構造の形式で保存されている。
【００４３】
本発明の独自性の１つによれば、その埋め込み式プラットフォームは、プログラマにより作成された少なくとも１つのアプリケーションを保存しかつ実行することが可能なプログラム可能環境を有し、その通信機能が標準ＩＳＯ７８１６で定義されるＡＰＤＵフォーマットと互換性をもつ。
【００４４】
本発明の独自性の１つによれば、受信したオブジェクトについてのデシリアライゼーションおよび派生的処理のオペレーションは、構造化オブジェクトの受信を指示する少なくとも１つのデータ項目を含んだ少なくとも１つのＡＰＤＵフォーマットコマンドを受信することによって起動される。
【００４５】
本発明の独自性の１つによれば、その埋め込み式プラットフォームはＪａｖａＣａｒｄ（登録商標）標準と互換性があるプログラム可能環境を有している。
【００４６】
本発明の独自性の１つによれば、ホストまたは埋め込み式プラットフォーム上で実行されるアプリケーションの少なくとも１つは、Ｊａｖａ（登録商標）言語でプログラムされている。
【００４７】
本発明の独自性の１つによれば、そのプロシージャは、埋め込み式プラットフォーム内で保存されるか又は実行されるカードエージェントと呼ばれる少なくとも１つのソフトウェアエージェントと、ＡＡＡ−ＭＯＭタイプのソフトウェアインフラストラクチャを用いて非同期のメッセージによって通信するコンピュータネットワークに属する少なくとも１つのホスト内で保存されるか又は実行されるカードエンジンプロキシエージェントと呼ばれる少なくとも１つのソフトウェアエージェントと、の間の通信のために使用されており、前記カードエンジンプロキシエージェントは前記ネットワーク内の別のエージェントとの通信においてカードエージェントについての媒介として動作し、前記エージェントは前記ソフトウェアインフラストラクチャの仕様に従って動作し且つ少なくとも１つの分散式アプリケーションに属する。
【００４８】
さらに、たとえばＪａｖａＣａｒｄ（登録商標）などの埋め込み式タイプに関するある種の環境またはオペレーティングシステムには、使用しなくなった場合にこのタイプのソフトウェアオブジェクトを削除するため、あるいはその占有するメモリ空間を解放するために、リソースに関してコストがかかるようなプロシージャや、複雑なだけのプロシージャは存在させていない。したがってこの場合には、手作業による削除が必要となると共に、アプリケーションのプログラマによって直接的かつケースバイケースで提供されなければならない。
【００４９】
本発明の目的の１つはしたがって、埋め込み式プラットフォームを基本とするアプリケーションのプログラマに対して、携帯式であるか否かによらず、データ処理ステーション内のアプリケーションによって使用されるある種の構造化ソフトウェアオブジェクトのすべてまたは一部分によって占有されるメモリ空間の再利用を可能にさせるソフトウェアツールを提供できるようなプロシージャを提示することである。
【００５０】
さらに、非線形構造を有するたとえばツリー構造の形式をしたソフトウェアオブジェクトの単純な複製のためのソフトウェアツールを有すると有用となり得る。
【００５１】
本発明の目的の１つはしたがって、埋め込み式プラットフォームを基本とするアプリケーションのプログラマに対して、ソースオブジェクトと呼ばれる構造化ソフトウェアオブジェクトを、そのソースオブジェクトと同じ値を含むが保存の際に別のオブジェクトを構成している結果オブジェクトと呼ばれる別のオブジェクトに複製するためのソフトウェアツールを提供できるようなプロシージャを提示することである。
【００５２】
同様に、セキュリティの理由から、このタイプのソフトウェアオブジェクトによって占有されるメモリ空間が解放されたときには、このオブジェクトからの情報を前記空間から消去し、前記情報が別のオブジェクトによって読み取られたり、別のアプリケーションが同じメモリ空間を引き続き使用することを防止することが重要となり得る。この情報はしたがって、手作業で消去されなければならず、この機能の提供はアプリケーションのプログラマによって直接的かつケースバイケースで実施される。
【００５３】
本発明の目的の１つはしたがって、埋め込み式プラットフォームを基本とするアプリケーションのプログラマに対して、前記オブジェクトの削除または前記空間の再利用の際にこのタイプのソフトウェアオブジェクトによって使用されるメモリ空間内に包含された情報を消去または均一化させるためのソフトウェアツールを提供できるようなプロシージャを提示することである。
【００５４】
本発明はしたがって、そのデータ読み取り、データ書き込み、デシリアライゼーションおよびシリアライゼーションのプロシージャがホストまたは埋め込み式プラットフォーム内に保存された少なくとも１つのクラス内の実装を介して適用されており、前記実施は、
オブジェクトに対するシリアライゼーションプロシージャを利用し、続いてデータ書き込みプロシージャおよびデシリアライゼーションプロシージャによって、埋め込み式プラットフォームの少なくとも１つのエージェントに対する構造化オブジェクトの送信を実行しているオブジェクト書き込みコマンドと、
シリアライゼーションプロシージャを利用し、続いてデータ読み取りプロシージャおよびデシリアライゼーションプロシージャによって、埋め込み式プラットフォームの少なくとも１つのエージェントからの構造化オブジェクトの読み取りを実行しているオブジェクト読み取りコマンドと、
前記コンポーネントの構造の解析に続く、前記オブジェクトの各コンポーネントに割り当てられたメモリ空間の解放またはデアロケーションについての保存のステップを含む、シリアライゼーションプロシージャを利用することにより、埋め込み式プラットフォーム内に保存された構造化オブジェクトについてのデアロケーションコマンドと、
所与の線形データシーケンスから非実体的コンテンツを有するオブジェクトを作成するために、デシリアライゼーションプロシージャを利用して、構造化オブジェクトによって解放されたメモリ空間についてのハウスキーピングまたは消去コマンドと、
このオブジェクトを表す線形データシーケンスを作成するために、前記ソースオブジェクトをデアロケーションすることなく、シリアライゼーションプロシージャを利用し、続いて、そのコンテンツがソースオブジェクトのコンテンツと同一であるような別の構造化オブジェクトを作成するために、この線形データシーケンスからのデシリアライゼーションプロシージャを利用することにより、構造化ソースオブジェクトについての複製コマンドと、
のうちの少なくとも１つコマンドを含むことを特徴とする上述のようなプロシージャを提示する。
【００５５】
本発明の独自性の１つによれば、その埋め込み式プラットフォームに関するプログラミング言語は、ＡＰＤＵメッセージを受信するとアプリケーション内でユーザ定義することが可能なプロセスを起動するＰｒｏｃｅｓｓＡＰＤＵ抽象メソッドを記述している第１のクラス（ＩＯＡｐｐｌｅｔ）を含み、そのプログラムコードは、第１のクラス（ＩＯＡｐｐｌｅｔ）を継承する第２のクラス（ＯｂｊｅｃｔＩＯＡｐｐｌｅｔ）内で、このＰｒｏｃｅｓｓＡＰＤＵ抽象メソッドを実装として、埋め込み式プラットフォーム内に保存されている埋め込み式プラットフォーム内のデシリアライゼーションオペレーションを実行しており、前記プログラムコードはＰｒｏｃｅｓｓＯｂｊｅｃｔメソッドを用いており、それはこの同じ実施クラス（ＯｂｊｅｃｔＩＯＡｐｐｌｅｔ）内の１つの抽象メソッドとして記述される。
【００５６】
本発明の独自性の１つによれば、その埋め込み式プラットフォームに関するプログラミング言語は、ＡＰＤＵフォーマットのメッセージをホストに送信するＳｅｎｄＡＰＤＵメソッドを記述している第１のクラス（ＩＯＡｐｐｌｅｔ）を含んでおり、このプログラムコードは、第１のクラス（ＩＯＡｐｐｌｅｔ）を継承する第２のカードクラス（ＯｂｊｅｃｔＩＯＡｐｐｌｅｔ）内で、ＳｅｎｄＡＰＤＵメソッドを用いて少なくとも１つのＳｅｎｄＯｂｊｅｃｔメソッドを実装するために、保存されている埋め込み式プラットフォーム内でシリアライゼーションオペレーションを実行する。
【００５７】
本発明の別の目的は、携帯オブジェクトおよび上述したタイプのソフトウェアツールを含んだコンピュータシステムを提示することである。
【００５８】
この目的は、埋め込み式プラットフォームと呼ばれるコンピュータステーションを備えており、１つまたは複数の線形データシーケンスの形式で端末との情報の交換が可能な、少なくとも１つのプロセッサ、記憶設備および通信機能を含む携帯オブジェクト備えるコンピュータシステムであって、このプラットフォームは、一方で線形データシーケンス配置と、他方でオブジェクト指向のプログラミング言語の基準に従って構造化または階層化された１つまたは複数のソフトウェアオブジェクトを記述または表現している構造化配置との間で、ある方向または他の方向へのデータセットの変換ステップを実行することが可能なシリアライゼーションエージェントを組み込んでいることを特徴とするコンピュータシステムを用いて達成される。
【００５９】
本発明の独自性の１つによれば、その埋め込み式プラットフォームは、
埋め込み式プラットフォーム内に保存された宛先ソフトウェアエージェントについての応答機能によって受信された、１つまたは複数の線形データシーケンスに配置されたデータセットを宛先エージェントの代わりに受信し、
このデータセットを、オブジェクト指向のプログラミング言語の基準に従って構造化または階層化された、少なくとも１つのソフトウェアオブジェクトに変換し、
この構造化ソフトウェアオブジェクトを宛先エージェントに送信し、このオブジェクトに従って宛先エージェントによる処理を起動する、
ことを行うことが可能な通信エージェントを含んでいる。
【００６０】
本発明の独自性の１つによれば、構造化ソフトウェアオブジェクトを表す線形データシーケンスは、入力または出力ストリームで埋め込み式プラットフォーム内に保存されており、前記埋め込み式プラットフォームは、入力フローによって表される１つまたは複数の構造化オブジェクトを埋め込み式プラットフォーム内で作成すること、すなわち前記構造化オブジェクトをデシリアライゼーションすること、あるいは送信される１つまたは複数の構造化オブジェクトを表すデータを出力ストリームに書き込むこと、すなわち前記構造化オブジェクトをシリアライゼーションすることが可能な、シリアライゼーションエージェントと呼ばれるソフトウェアエージェントを組み込んでいる。
【００６１】
本発明の独自性の１つによれば、その入力または出力ストリームは、１つまたは複数の循環式メモリ構造の形式で保存されている。
【００６２】
本発明の独自性の１つによれば、そのシリアライゼーションエージェントは、タイプスタックと呼ばれるメモリスタックを使用して、シリアライズまたはデシリアライズされる構造化オブジェクトの構造のすべてまたは一部を構成している少なくとも１つのオブジェクトのタイプを保存しており、前記タイプスタックは、最も間近にロードされたメモリ位置が読み取られかつ消去された後にのみアクセスすることが可能な多数のメモリ位置を有している。
【００６３】
本発明の独自性の１つによれば、入力または出力ストリーム内に含まれるデータは、その各々が線形データシーケンスをデシリアライゼーションした際に実行される所与のアクションを表しているタグの組を備える符号システムを用いて１つまたは複数の構造化オブジェクトを表す。
【００６４】
本発明の独自性の１つによれば、少なくとも１つのタグは、
線形データシーケンスによって表された構造化オブジェクト構造に新たなエレメントを追加するアクションと、
構造化オブジェクトを構成するエレメントのすべてまたは一部分の値のソースとして、ソースオブジェクトと呼ばれるエレメントまたはオブジェクトを参照するアクションと、
後続の１つまたは複数のデータ項目が構造化オブジェクトを構成するエレメントのコンテンツを表していることを指示するアクションと、
構造化オブジェクトを構成するエレメントについてのコンテンツが存在しないことを指示するアクションと、
のうちの１つを表すように定義される。
【００６５】
本発明の独自性の１つによれば、その埋め込み式プラットフォームは、標準ＩＳＯ７８１６に従いかつＡＰＤＵフォーマットコマンドを用いて動作する携帯オブジェクトを備える。
【００６６】
本発明の独自性の１つによれば、埋め込み式プラットフォーム内に保存された少なくとも１つのエージェントまたはアプリケーションは、Ｊａｖａ（登録商標）言語でプログラムされており、前記埋め込み式プラットフォームはＪａｖａＣａｒｄ（登録商標）標準に従ったコンピュータ環境を有する。
【００６７】
本発明の独自性の１つによれば、そのシステムは、ホスト内、埋め込み式プラットフォーム内、あるいはこの両者内に、
ホスト内においてこの構造化オブジェクトをデータストリームにシリアライゼーションさせ、続いてこのデータストリームを埋め込み式プラットフォームに送信し、埋め込み式プラットフォーム内において前記データストリームを構造化オブジェクトにデシリアライゼーションすることによって、カードの少なくとも１つのエージェントへ構造化オブジェクトを送信する、オブジェクト書き込みコマンドと、
埋め込み式プラットフォーム内においてこの構造化オブジェクトをデータストリームにシリアライゼーションし、続いて埋め込み式プラットフォームからこのデータストリームを受信し、ホスト内において前記データストリームを構造化オブジェクトにデシリアライゼーションすることによって、カードの少なくとも１つのエージェントから構造化オブジェクトを読み取る、オブジェクト読み取りコマンドと、
前記コンポーネントの構造の解析後に、このオブジェクトの各コンポーネントに割り当てられたメモリ空間の解放またはデアロケーションを含むオプションに従って前記オブジェクトをシリアライゼーションすることにより、埋め込み式プラットフォーム内に保存された構造化オブジェクトについてのデアロケーションコマンドと、
非実体的コンテンツによってオブジェクトを作成するために、所与の線形データシーケンスをデシリアライゼーションすることにより、埋め込み式プラットフォーム内の構造化オブジェクトによって解放されたメモリ空間についてのハウスキーピングまたは消去コマンドと、
ソースオブジェクトのデアロケーションなしに同じオブジェクトを表している線形データシーケンスにシリアライゼーションし、続いてそのコンテンツがソースオブジェクトのコンテンツと同一であるような別の構造化オブジェクトにこの線形データシーケンスからデシリアライゼーションすることによって、埋め込み式プラットフォーム内においてソースオブジェクトと呼ばれる構造化オブジェクトを複製するコマンドと、
のうちの少なくとも１つを実装している少なくとも１つのソフトウェアクラスを組み込む。
【００６８】
本発明の独自性の１つによれば、その埋め込み式プラットフォームは、ＡＡＡ−ＭＯＭタイプソフトウェアインフラストラクチャに従って非同期のメッセージによって通信しているコンピュータネットワークに属するホストと少なくとも通信しており、前記ホストは前記埋め込み式プラットフォームと前記ネットワークの別のエージェントの間の通信を管理することが可能な、カードエンジンプロキシエージェントと呼ばれる、ソフトウェアエージェントを組み込んでおり、前記エージェントは、このソフトウェアインフラストラクチャの仕様に従って動作し、少なくとも１つの分散式アプリケーションに属する。
【００６９】
本発明、ならびにその特徴および利点は、添付の図面を参照しながら以下の説明を読むことによってより明瞭に理解されよう。
【発明を実施するための最良の形態】
【００７０】
ある文献（たとえば、「Ｊａｖａ（登録商標）  ｅｍｂａｒｑｕｅ」−Ｅｙｒｏｌｌｅｓ−Ｐａｒｉｓ  １９９９）では、「埋め込み式コンピュータ（ｅｍｂｅｄｄｅｄ  ｃｏｍｐｕｔｅｒ）」という語は、それ自体は目に見えないコンピュータが、別の機能を有するある１つの装置内に組み込まれているものと指定するために使用している。フランス語の用語「ｏｒｄｉｎａｔｅｕｒ  ｅｍｂａｒｑｕｅ」は英語の「ｅｍｂｅｄｄｅｄ  ｃｏｍｐｕｔｅｒ」の近似的翻訳である。
【００７１】
この特徴、すなわち別のデバイス内にある特定の機能を設けていることは、こうした埋め込み式コンピュータが多くの場合に限られたハードウェアまたはソフトウェアリソースだのみを有し、また多くの場合基本的なオペレーティングシステムやソフトウェア環境を利用しているということを十分に説明する。増強も予測可能であるが、このタイプのコンピュータのリソースは典型的には、８ビットまたは１６ビットのプロセッサでは、５１２ｋｂからこれよりさらに小さい値のオーダーの静的記憶装置であることがあり得る。スマートカードの場合には、利用可能なＲＡＭ容量は４ｋｂのオーダーとすることがあり、また最も強力なモデルでは目下のところ最大で３２ｋｂとすることがあり得る。
【００７２】
一般的なＩＴコンテキストにおいて、「プラットフォーム（ｐｌａｔｆｏｒｍ）」という語は、少なくとも１つのプロセッサおよび記憶設備を組み込んでいるデータ処理デバイスを意味している。上の定義を拡張することによって、ならびにこのコンテキストでの記述を目的として、「埋め込み式プラットフォーム（ｅｍｂｅｄｄｅｄ  ｐｌａｔｆｏｒｍ）」という語は、このタイプのプラットフォームを組み込んだ携帯オブジェクトを示すために用いており、前記オブジェクトは、純粋に携帯性すなわちサイズが小さく、または非常に限られた処理能力または記憶能力を有している。
【００７３】
以下の記載は、様々なエージェントと、その関連するアプリケーションとの間で所与のタスクおよびオペレーション分散を備えたバージョンの本発明によるプロシージャについて説明している。コンピュータアプリケーションがフレキシブルな組織化は、当然、この分散は、特に様々なエージェントとその指定対象の間の違いがこれらの主たる動作上の特徴にまったく影響を与えない抽象的概念である場合に、様々に提示されることがあり得る。したがって、本発明によるプロシージャは、特に各タスクまたはエージェントに関して別の方式で提示された多様な変形形態を結合することによって、本発明の基本的な趣旨を逸脱することなく本明細書に記載していない別のバージョンで実行されることもあり得ることは明白である。同様に、同じ場所内に同時に保存されたエージェントやアプリケーションの間でのタスクの抽象分散も、本発明の基本的な趣旨を逸脱することなく本明細書に記載していない多様な変形バージョンに結合することができる。
【００７４】
以下の記述では、本発明によるプロシージャを、主としてＪａｖａ（登録商標）言語でプログラムされたアプリケーションを実行しているデータ処理ステーションを備えた端末と通信する、ＪａｖａＣａｒｄ（登録商標）タイプのシステム環境を用いたスマートカードを備える埋め込み式プラットフォームの場合について例証している。
【００７５】
しかし、本発明によるプロシージャは、そのデータ送信機能がプログラマに対してトランスペアレントなモードで構造化されたソフトウェアオブジェクトを送信することを提供しないような別の環境にも適用することができることは明白である。別のプログラミング環境、たとえば「Ｗｉｎｄｏｗｓ  ｆｏｒ  Ｓｍａｒｔ  Ｃａｒｄｓ（登録商標）」を用いる、あるいは別のプログラミング言語、たとえばＶｉｓｕａｌ  Ｂａｓｉｃ（登録商標）を用いてプログラムすることが可能な、標準ＩＳＯ７８１６に対するスマートカードも対象とすることができる。これはさらに、その通信機能に関して同様の制限を含む別の標準に従うスマートカードやこのタイプのプラットフォームを用いる携帯オブジェクトまたは端末にも適用される。
【００７６】
このプロシージャはさらに、携帯用であるか否かによらず、たとえば自動車用電子部品、識別マーカ、携帯電話あるいは携帯収集端末などの埋め込み式データ処理ステーションを組み込んでいる任意の携帯オブジェクトにも適用することができる。
【００７７】
同様に、本発明によるプロシージャは、主として端末またはホストと呼ばれるデータ処理ステーションと通信している埋め込み式プラットフォームの利用を含むものとして示される。必然的にこのプロシージャはさらに、その端末が、本発明の基本的な趣旨を逸脱することなく、任意のタイプのコンピュータネットワークの一部を形成するステーションである場合にも使用することができる。したがって、この端末によって実行されるものとして提示した様々な機能は、多数の異なるデバイス間に分散させることが可能であり、またこの分散は時間的に変動させることができる。必然的に、記載したプロシージャはさらに、ここでも本発明の基本的な趣旨を逸脱することなく、埋め込み式プラットフォームが１つまたは複数の別の埋め込み式プラットフォームと直接的または間接的に通信する場合にも記述することができる。一般的的に言えば、ホストまたはホスト端末はしたがって、埋め込み式プラットフォームと通信するアプリケーションまたはステーションとして定義されることになる。
【００７８】
本発明によるプロシージャは特に、スマートカード、たとえば、ＪａｖａＣａｒｄ（登録商標）標準に適合するものと、ＡＡＡ−ＭＯＭタイプのソフトウェアインフラストラクチャに従って非同期のメッセージによって通信している、たとえばＪａｖａ（登録商標）でプログラムされたコンピュータネットワークとの間の通信に適用することができる。この場合では、カードとネットワークの残りの部分との間での通信は、典型的には、カード内に保存されたカードエージェントと呼ばれるソフトウェアエージェントの各々に関する媒介の役割をするカードエージェントプロキシエージェントと呼ばれるソフトウェアエージェントによって管理されている。カード環境では、これらのカードエージェントは、カードエンジンエージェントと呼ばれるソフトウェアエージェントによって、管理される、または調整される、もしくは管理されかつ調整される。
【００７９】
次いで、本発明によるプロシージャは、このカードエンジンエージェントに対して、カードエンジンプロキシエージェントと通信しＪａｖａ（登録商標）言語またはＡＡＡインフラストラクチャ標準に従った構造化ソフトウェアオブジェクトの交換を可能にしている。構造化オブジェクトを外部と交換できることは、このカードはＡＡＡインフラストラクチャとの向上された互換性の達成を可能とし、かつそのネットワークの別のＡＡＡエージェントによってＡＡＡタイプエージェントそのものと見なされることを可能とする。
【００８０】
本発明によるプロシージャはさらに、スマートカード、たとえば、ＪａｖａＣａｒｄ（登録商標）標準に適合するものと、たとえばＪａｖａ（登録商標）でプログラムされたコンピュータネットワークと、の間の通信に適用することができ、オブジェクト指向のＲＰＣ（遠隔手続き呼出し）プロトコルによって、たとえばＪａｖａ（登録商標）ＲＭＩ（遠隔メソッド呼出し）やＣＯＲＢＡ（登録商標）タイプのソフトウェアインフラストラクチャを用いて通信している。
【００８１】
あるアプリケーションが端末からスマートカードを含む埋め込み式プラットフォームへソフトウェアオブジェクトの転送を必要とする場合、転送はしばしばマスタ／スレーブタイプの通信の形態を取る。これは、その端末が埋め込み式プラットフォームへの送信機能を実行する主導権をとることを意味している。通信するために、この機能は通信コマンドを送信パラメータを付属させてプラットフォームに送信する。次いでこのコマンドは、プラットフォーム内の１つまたは複数の処理オペレーションを起動し、さらにこのプラットフォームからのリターンパラメータまたは応答パラメータを受信することができる。
【００８２】
標準ＩＳＯ７８１６に従って動作するスマートカードの場合、このコマンドのパラメータは、以下のように組織化されたデータシーケンスを備えるＡＰＤＵ（アプリケーションプロトコルデータユニット）タイプのフォーマットで送信される。
【００８３】
コマンドで送られる送信パラメータ：
【表１】
2005519376.tif 000003
ＣＬＡ：宛先のクラス又はアプリケーションを指定する１バイト、
ＩＮＳ：実行される命令を指定する１バイト、
Ｐ１，Ｐ２：ＡＰＤＵコマンドに関する情報を提供する2バイト、
Ｌｃ：送信されるデータの長さ、
Ｄａｔａ：送信されるデータ、
Ｌｅ：待ちになっているリターンデータの長さ。
【００８４】
カードによって戻される応答パラメータ：
【表２】
2005519376.tif 000004
Ｄａｔａ：応答データ、
ＳＷ１，ＳＷ２：カードによって送信されるチェックメッセージ又はコードを構成する２バイト。
【００８５】
このＡＰＤＵフォーマットは、線形データシーケンス、すなわち単純なバイトストリング以外の別の任意の形式でのデータの送信や受信を提供していないことが理解されよう。アプリケーションがある言語でプログラムされているとき、あるいはそのシステムがＡＰＤＵ通信コマンド以外の別のコマンドを有していない埋め込み式プラットフォームの場合には、より完全に構造化されたオブジェクトを転送したいと希望するプログラマはしたがって、この目的のための単純なソフトウェアツールを有さないことになる。この際、プログラマはこのタイプの構造化オブジェクトをバイトストリングに変換するためにアプリケーションを準備し、次いでストリングを送信するためにＡＰＤＵコマンドを用い、かつ最終的に前記オブジェクトを反対の方向に再変換せざるを得ない。このことは、前記オブジェクトに関する手作業によるシリアライゼーション、送信およびデシリアライゼーションに対応し、換言するとこれらのオペレーションを最も精細にプログラミングすることに対応する。
【００８６】
ＪａｖａＣａｒｄ（登録商標）標準の埋め込み式プラットフォームを使用してアプリケーションを開発するためにプログラマがＪａｖａ（登録商標）言語を使用する場合には、ＪａｖａＣａｒｄ（登録商標）で利用可能なツールによって、以下のＪａｖａＣａｒｄ（登録商標）コマンド：
「ｐｒｏｃｅｓｓ（ＡＰＤＵ）」コマンド：そのカードはＡＰＤＵフォーマットでデータを受信し、これらのデータ内で指定される宛先ソフトウェアエージェントまたは「ａｐｐｌｅｔ」によって、これらが含む送信パラメータの処理を起動する；
「ｓｅｎｄＡＰＤＵ（）」コマンドまたは「ＡＰＤＵ．ｓｅｎｄｂｙｔｅｓ（）」コマンド：直前に起動されたプロセスの前、または該プロセスの間に、そのカードはＡＰＤＵフォーマットをしておりかつリターンパラメータを含んでいる別のデータをホストに戻す；
を用いて線形データ送信がＡＰＤＵフォーマットで提供される。
【００８７】
「ｓｅｎｄＡＰＤＵ（）」コマンドは、生データを含んだ非タイプ分けオブジェクトに適用可能なメソッドの形式で「ＩＯＡｐｐｌｅｔ」クラスのＪａｖａＣａｒｄ（登録商標）環境内で実装される。
【００８８】
一方、「Ｐｒｏｃｅｓｓ（ＡＰＤＵ）」コマンドは、１つの抽象メソッドの形式でＪａｖａＣａｒｄ（登録商標）環境内の「ＩＯＡｐｐｌｅｔ」クラス内で宣言される。このことは、そのメソッドがＪａｖａｃａｒｄ（登録商標）環境内に存在することを意味するだけではなく、さらにこのメソッドを実装するコードをこのコマンドを使用することが望ましいアプリケーションのプログラマが記述しなければならないことも意味している。たとえば、プログラマは、そのアプリケーション内で「ＩＯＡｐｐｌｅｔ」クラスに関する継承サブクラスを作成し、次いで１つのメソッドを含んだこのサブクラスが、この「Ｐｒｏｃｅｓｓ（ＡＰＤＵ）」メソッドによって実行させようとするプロセスのコードを受け取っている。ＪａｖａＣａｒｄ（登録商標）環境は、メッセージを受け取ったときに「Ｐｒｏｃｅｓｓ（ＡＰＤＵ）」メソッドを単にコールし、次いでプログラマが追加的コード内に含めておいたプロセスを起動するに過ぎない。
【００８９】
このコンテキストにおいてプログラマに対して構造化ソフトウェアオブジェクトを直接送信するためのツールを提供するために、本発明によるプロシージャは、同様のコマンドであるが、Ｊａｖａ（登録商標）言語の特定のオブジェクト指向の特性に従って構造化ソフトウェアオブジェクトを直接的に受け容れるようなコマンドを提供している。次いで、これらのコマンドをＪａｖａＣａｒｄ（登録商標）環境内で使用することができ、またこれらのコマンドは、たとえば「ｐｒｏｃｅｓｓ（Ｏｂｊｅｃｔ）」や「ｓｅｎｄＯｂｊｅｃｔ（）」タイプとすることができる。
【００９０】
プログラマ、本明細書では、ユーザと呼ぶこともある、が、ＡＰＤＵコマンドのシンタックスに関与する必要なしにこれらのコマンドを直接利用できるようにするために、本発明によるプロシージャは、アプリケーションまたは送信側エージェントと宛先エージェントとの間でのオブジェクトおよびデータに関するシリアライゼーション、送信およびデシリアライゼーションのオペレーションを引き継いでいる。
【００９１】
ＪａｖａＣａｒｄ（登録商標）環境の場合、これらのオペレーションは、たとえば「ＯｂｊｅｃｔＩＯＡｐｐｌｅｔ」という名称の「ＩＯＡｐｐｌｅｔ」クラスの１つのサブクラスに属する「Ｐｒｏｃｅｓｓ（ＡＰＤＵ）」メソッド内に包含されたプログラムコードを実行することによって実施することができる。次いで、ＡＰＤＵメッセージを受け取り、それ自身が変換オペレーションおよび別の「Ｐｒｏｃｅｓｓ（Ｏｂｊｅｃｔ）」抽象メソッドに対するコールを含んでいる場合、このコードがその環境によって自動的に起動される。このタイプの本発明の１バージョンでは、そのプログラマは単に構造化オブジェクトを受け取ったときに、カードによって実行させるオペレーションのコードを記述することが必要なだけである。次いで、プログラマは、「Ｐｒｏｃｅｓｓ（Ｏｂｊｅｃｔ）」抽象メソッドを実施するためにこのコードを「ＯｂｊｅｃｔＩＯＡｐｐｌｅｔ」クラスの継承サブクラス内に書き込む。
【００９２】
以下のパラグラフでは、カード側において実行される変換、シリアライゼーションおよびデシリアライゼーションのオペレーションだけを記載している。必然的に、記載したプロシージャがホスト側における同じオペレーションを実行するために使用できることは明らかである。ホスト端末のハードウェアおよびソフトウェアのリソースは、カード上で利用可能なリソースと比べて実質的により大きいのが通常であるが、これらのオペレーションは、本発明の基本的な趣旨を逸脱することなく、ホスト側において別にプログラムされたり組織化されたりすることも可能である。
【００９３】
図１に表した本発明の１バージョンでは、ホスト端末（１）は、たとえばＪａｖａｃａｒｄ（登録商標）標準のスマートカード（２）などの埋め込み式プラットフォームと通信する。ホスト（１）は少なくとも１つのソフトウェアエージェント（１１１）を備えた少なくとも１つのアプリケーション（１１）を実行すると共に、たとえば接続箇所（１００）を含む通信リソースに関係するＡＰＤＵフォーマット通信機能（１０１）によってカード（２）と通信している。この接続箇所は、たとえば、電気的接触、マイクロ波リンク、ＩＲリンクまたは磁気トラック、あるいはこれらのタイプの２つ以上からなる組合せによる接続手段を組み込んでいる。
【００９４】
カード（２）は、少なくとも１つのソフトウェアエージェント（２２１）を含んだアプリケーション（２２）を実行すると共に、ＪａｖａＣａｒｄ（登録商標）システム環境の一部を形成する応答機能（２０１）を用いてホスト（１）と通信している。この目的のために、前記応答機能（２０１）は、ホスト端末（１）の通信リソース（１００）と互換性があるタイプの通信リソース（２００）を使用している。
【００９５】
ホストアプリケーション（１１）のエージェント（１１１）が、カードエージェント（２２１）へのデータの送信、これに対してプロセス（２２１０）を実行させる命令、またはカードの記憶装置内に配置された情報の要求を希望している場合、このエージェントは、構造化ソフトウェアオブジェクト（３１）をカードに送信するためのプロシージャを起動する、たとえば「ＷｒｉｔｅＯｂｊｅｃｔ（）」で指定されるオブジェクト書き込み命令を実行する。次いで、前記ソフトウェアオブジェクト（３１）は、ホスト変換エージェント（１２）によってシリアライズされる、すなわちＡＰＤＵフォーマットデータセットに変換される。次いで、このホスト変換エージェントは、通信機能（１０１）を用いてホスト接続箇所（１００）およびカード通信リソース（２００）を介してこれらのデータをカード（２）に送信する。
【００９６】
カード内において通信リソース（２００）を管理する応答機能（２０１）による受信があると、この応答機能は前記データをカード変換エージェント（２１）に送信する。前記カード変換エージェント（２１）は、このデータをデシリアライズし、ソフトウェアオブジェクト（３４）の形式をしたこれらの元の構造を取り戻すためにこれらを反対方向に変換する。次いで、前記構造化ソフトウェアオブジェクト（３４）は、その受信したデータに対応したプロセス（２２１０）を実行する、たとえば「Ｐｒｏｃｅｓｓ（Ｏｂｊｅｃｔ）」と指定されるオブジェクト処理命令を用いて宛先エージェント（２２）に送信される。
【００９７】
カード（２）内のアプリケーション（２２）のエージェント（２２１）がホスト（１）のエージェント（１１１）に、データまたは実行されたプロセスに関する情報を送信したいとき、該エージェントは構造化ソフトウェアオブジェクト（４１）をホストに送信するためのプロシージャを起動させる、たとえば「ＳｅｎｄＯｂｊｅｃｔ（）」で指定されるオブジェクト送信命令を実行する。次いで、前記ソフトウェアオブジェクト（４１）は、たとえばカード変換エージェント（２１）によって、ＡＰＤＵフォーマットのデータセットにシリアライズされる、すなわち変換される。次いで、このカード変換エージェントは、応答機能（２０１）を使用し、カード通信リソース（２００）およびホスト接続箇所（１００）を介してこれらのデータをカード（２）に送信する。
【００９８】
接続箇所（１００）を管理するホスト通信機能（１０１）による受信があったときには、前記通信機能はそのデータをホスト変換エージェント（１２）に送信する。前記ホスト変換エージェント（１２）はこのデータをデシリアライズし、ソフトウェアオブジェクト（４４）の形式をしたこれらの元の構造を取り戻すためにこれらを反対方向に変換する。次いで、前記構造化ソフトウェアオブジェクト（４４）は、受信したデータを読み取るための、たとえば「ＲｅａｄＯｂｊｅｃｔ（）」と指定されるオブジェクト読み取り命令によって、宛先エージェント（１１）に送信される。
【００９９】
図２は、ホストおよびカード変換エージェント（それぞれ、１２と２１）によって実行されるシリアライゼーション／デシリアライゼーションおよび送信のオペレーションが異なる２つのエージェント（それぞれ、１２１、１２２と２１１、２１２）によって実行されている本発明の１バージョンを表している。
【０１００】
したがって、カード変換エージェント（２１）は、通信エージェント（２１１）とシリアライゼーションエージェント（２１２）とを含んでいる。通信エージェント（２１１）は、バイト変換オペレーションを管理し、応答機能（２０１）とで送信パラメータ（３２）および応答パラメータ（４３）の形式をしたデータを交換している。データの受信では、前記通信エージェント（２１１）は、その受信したデータが完全であるかどうかを確認し、そして、入力ストリーム（３３）内に格納された線形データシーケンス内の送信パラメータ（３２）を連結させる。データの送信では、前記通信エージェント（２１１）は出力フロー（４２）内の線形データシーケンスを読み取り、そして、応答パラメータ（４３）が応答機能（２０１）の送信能力と適合するような分散が得られるようにこれらのデータを分離している。
【０１０１】
シリアライゼーションエージェント（２１２）は、オブジェクトレベル変換オペレーションを管理し、シリアライゼーション／デシリアライゼーションそれ自体を実行している。データの送信およびそのためのシリアライゼーションでは、シリアライゼーションエージェント（２１２）が送信しようとする構造化ソフトウェアオブジェクト（４１）の構造およびコンテンツを解析し、そして、このオブジェクトを出力ストリーム（４２）内に格納された線形データシーケンスの形式でコード化している。データの受信およびそのためのデシリアライゼーションについては、シリアライゼーションエージェント（２１２）は入力ストリーム（３３）内の線形データシーケンスを読み取っている。シリアライゼーションエージェント（２１２）は次いで、このストリーム内のデータを解析し、そして、これらが表している構造化ソフトウェアオブジェクト（３４）を復元している。
【０１０２】
図３は、そのカードが本発明によるプロシージャについての宛先ステータスを有することが可能な多数のエージェント（２２１、２２２、２２３、２３１）を備えることができ、これらのエージェントは１つまたは複数のアプリケーション（２２、２３）間で分散されている可能性がある、本発明の１バージョンを表している。カード（２）とホスト（１）の間でのデータの交換のすべてを取り扱えるようにするため、本発明によるプロシージャは、インターフェースエージェント（２１０）を含んでおり、これを介して構造化されたデータのすべてがカード（２）とホスト（１）の間で交換される。
【０１０３】
本発明のこのバージョンでは、アプリケーション（２２）や宛先エージェント（２２１）に代わって、インターフェースエージェント（２１０）が前記宛先と無関係に、カードに対して送信されたすべてのデータを受信している。次いで、前記インターフェースエージェント（２１０）は、送信パラメータ（３２）に対する通信エージェント（２１１）による連結、さらに続いて上述のような得られたデータ（３３）に関するシリアライゼーションエージェント（２１２）によるデシリアライゼーションを指令する。これらのデータが構造化ソフトウェアオブジェクト（３４）として復元されると、同じインターフェースエージェント（２１０）は、その受信の際にデータ（３２）の宛先であったソフトウェアエージェント（２２１）に前記構造化オブジェクト（３４）を送信する。別のバージョン（図示せず）では、インターフェースエージェント（２１０）によって受信されるデータ（３２）は、宛先エージェント（２２１）の識別情報を含んでいるか、あるいはこれらが送信される前にインターフェースエージェント（２１０）によって前記データ（３２）に対応する情報が追加される。次いで、デシリアライゼーションによって得られる構造化オブジェクト（３４）は、デシリアライゼーションエージェント（２１２）または分散エージェント（図示せず）によって直接アドレス指定される。
【０１０４】
同じように、インターフェースエージェント（２１０）は送信側アプリケーション（２２）または送信側エージェント（２２１）によってホストに送信されたすべてのデータ（４１）を受信する。次いで、前記インターフェースエージェント（２１０）は、シリアライゼーションエージェント（２１２）による、これらのデータの出力ストリーム（４２）へのシリアライゼーション、ならびに上述のような通信エージェント（２１１）による前記出力ストリーム（４２）の連結を指令している。次いで、得られたデータは、応答パラメータ（４３）の形式で、応答機能（２０１）によって通信リソース（２００、１００）を介して端末（１）に送られる。
【０１０５】
本発明の別のバージョン（図示せず）では、送信および変換チェーン（２０１、２１１、２１２、２２１）にインターフェースエージェント（２１０）が挿入されている。カードにおける受信（ホスト書き込みコマンド）については、インターフェースエージェント（２１０）は、受信されたデータまたはオブジェクトを、受信したデータ内に含まれている情報に従って、カード内の宛先（２２１、２２２、２２３、２３１）に導いている。カードからの送信（ホスト読み取りコマンド）については、インターフェースエージェント（２１０）はさらに、送信しようとするデータまたはオブジェクトを受信し、これらの送信側（２２１、２２２、２２３、２３１）を表している情報を前記データまたはオブジェクトに割り当てるためにも含めることができる。
【０１０６】
これがその端末自体であるのか、この端末を管理することが可能な何らかのソフトウェアエージェントであるのかによらず、ホスト（１）と、カード上に存在するエージェントまたはアプリケーションとの間での情報の交換は、したがって、異なる２つのレベル、すなわちバイトレベルとオブジェクトレベルにおいて実行されるものと考えることができよう。
【０１０７】
オブジェクトレベルでは、送信しようとする構造化ソフトウェアオブジェクト内で組織化されたデータは、線形データストリームの形に変換され、またこの逆にも変換される。このシリアライゼーションステップは、オブジェクトの構造を管理しており、各プラットフォーム内でシリアライゼーションエージェントによって実行される。
【０１０８】
バイトまたはバイトストリングのレベルでは、単純な線形ストリームの形に配列されているデータが送信機能を用いたフラグメントによって、たとえばＡＰＤＵフォーマットの形で送信されており、これがカードとその外部世界との間で情報を交換する唯一の手段となっている。これらの交換は、この送信機能を使用してパラメータを送信することによって互いに通信しているホストおよびカード通信エージェントによって管理されている。
【０１０９】
ユーザに対してトランスペアレントなコマンドを提供するために、１つまたは複数のクラス内で様々なプロセスが実行されており、一般に、その少なくとも１つがそのカード内で動作しており、１つが端末またはホスト内にある。Ｊａｖａ（登録商標）言語では、本発明によるプロシージャはしたがって、カードについては「ＯｂｊｅｃｔＩＯＡｐｐｌｅｔ」クラスを、またホストについては「ＯｂｊｅｃｔＩＯＰｒｏｘｙ」クラスを以下のシンタックスを用いて提供することができる。
【０１１０】
ｃｌａｓｓ  ＯｂｊｅｃｔＩＯＰｒｏｘｙ｛
ｖｏｉｄ                ｗｒｉｔｅＯｂｊｅｃｔ（Ｏｂｊｅｃｔ  ｏ）；
Ｏｂｊｅｃｔ            ｒｅａｄＯｂｊｅｃｔ（）；
｝
ここで、「ＯｂｊｅｃｔＩＯＰｒｏｘｙ」クラスは、ホスト内の１つのクラスを定義しており、ユーザアプリケーションに「ｗｒｉｔｅＯｂｊｅｃｔ（Ｏｂｊｅｃｔ）」コマンドと「ｒｅａｄＯｂｊｅｃｔ（）」コマンドとを提供している。
【０１１１】
ｃｌａｓｓ  ＯｂｊｅｃｔＩＯＡｐｐｌｅｔ｛
ｖｏｉｄ                ｐｒｏｃｅｓｓ（Ｏｂｊｅｃｔ  ｏ）；
ｖｏｉｄ                ｓｅｎｄＯｂｊｅｃｔ（Ｏｂｊｅｃｔ  ｏ）；
｝
ここで、「ＯｂｊｅｃｔＩＯＡｐｐｌｅｔ」クラスはカード内の１つのクラスを定義しており、ユーザアプリケーションに「ｐｒｏｃｅｓｓ（Ｏｂｊｅｃｔ）」コマンドと「ｓｅｎｄＯｂｊｅｃｔ（）」コマンドとを提供している。
【０１１２】
カードは本質的に受動的であるため、これらの変換および送信のオペレーションのすべては、ＡＰＤＵコマンドの送信をトリガさせるコード内の命令を用いてホストの主導で実行される。関連するエージェントから要求された変換オペレーションを起動させるのはこのコマンドである。
【０１１３】
カードアプリケーションコードで実行される場合、「ｐｒｏｃｅｓｓ（Ｏｂｊｅｃｔ）」コマンドおよび「ｓｅｎｄＯｂｊｅｃｔ（）」コマンドはしたがって、対応する変換オペレーションを直接的にトリガしない。「ｓｅｎｄＯｂｊｅｃｔ（）」コマンドは送信しようとするオブジェクトを出力キュー（たとえば「ｑｏｕｔ」）内に格納し、ここでは、送信のためにシリアライズされるオブジェクトが「ｑｏｕｔ．ｐｕｓｈ（ｏｂｊｅｃｔ）」タイプの導入コマンドによって導入されている。シリアライゼーションオペレーションが起動されると、送信されるこれらのオブジェクトが、これらを導入したときと同じ順序で出力キューから抽出される。
【０１１４】
同様に、このコマンドは、ホストにより起動された直前のオペレーションによってシリアライズされたオブジェクトを、入力キュー（たとえば「ｑｉｎ」）から抽出する。前記抽出は、「ｑｉｎ．ｐｏｐ（）」タイプの抽出コマンドによって得られる。
【０１１５】
次いで、読み取り、書き込み、シリアライゼーションおよびデシリアライゼーションのオペレーションは、ユーザにトランスペアレントなコマンドを用いて「ＯｂｊｅｃｔＩＯＰｒｏｘｙ」クラスによってホストから管理される。これらのコマンドはたとえば、以下の、
「ｃａｒｄ．Ｓｅｒｉａｌｉｚｅ  ｏｕｔ」は、以下に記載するに、送信しようとするオブジェクトのカード内でシリアライゼーションを起動する。これらのオブジェクトは、カードアプリケーションによる「ｓｅｎｄＯｂｊｅｃｔ（）」命令の実行の際に出力キュー内に保存されることが可能である
「ｃａｒｄ．Ｒｅａｄ」は、以下で記載するように、カード内で出力ストリームデータの読み取り、ならびにこれらのデータのホストへの送信を起動する、
「ｃａｒｄ．Ｗｒｉｔｅ」は、以下に記載するように、カードへのデータの送信、ならびに入力ストリームに対するデータ書き込みを起動する、
「ｃａｒｄ．Ｓｅｒｉａｌｉｚｅ  Ｉｎ」は、以下に記載するように、カード内で入力ストリーム内に存在するオブジェクトのデシリアライゼーションを起動する、
形式でこのクラスのコード内に実装させることができる。
【０１１６】
本発明のここに記載したバージョンでは、カードの出力および入力ストリームは、同じ循環式メモリ構造内に保存される。各ストリームごとに異なるメモリ構造を使用して、又は、別のタイプのメモリ構造を使用して、本発明の別のバージョンも当然可能である。
【０１１７】
循環式メモリ構造は、この場合には、その第１の箇所がシステムによって最終の箇所の直後に続くものと見なされるような連続したメモリ箇所からなる組に対応している。このことは、線形データシーケンスが、前記シーケンスの長さが箇所の総数と比べて大きくない場合、このタイプの構造内で、連続性を失うことなく、任意の箇所を始点として保存することができることを意味する。
【０１１８】
入力および出力ストリームが同じ循環式構造を共有していることは、そのデータがこの同じ循環式構造の異なるエリアに含めて保存することを含む。これらのストリーム内に含まれるデータは、これらが読み取られるに連れて即座にまたはあるオペレーションの間に消去され、この２つのストリームの長さおよび位置はこの循環式構造の内部で変化する。その２つのストリームのうちの一方が、別のストリームの未消去のデータによって妨害されて新たなデータを保存するだけのそれ以上の空間を有しない場合、その占有する空間を解放するためにはこの別のストリームを処理するだけでよい。
【０１１９】
このタイプの循環式構造によって、その長さがあらかじめ決定されていないストリームの処理のために限定された記憶リソースを使用することが可能となる。必要なことは単に、その２つのストリーム上の異なるオペレーションをこの目的のために十分に均等に分散させることだけである。
【０１２０】
バイトレベルでは、あるプラットフォームの出力ストリームから別のプラットフォームの入力ストリームへのデータの交換、ならびにこの反対のデータの交換は、以下に記載するようにして実行される。
【０１２１】
ホストがカードの出力ストリーム内に配置されたデータを取得したいと希望する場合、ホストはたとえばＪａｖａ（登録商標）シンタックス向けの「ｃａｒｄ．Ｒｅａｄ」などの読み取りコマンドを送信する。このコマンドは、その各々がプロセスの１回の反復を表しているような多数のトランザクションに分割されているのが典型的である読み取りセッションを起動させる。
【０１２２】
読み取りセッションを起動させるために、ホストは、ＡＰＤＵフォーマットコマンドを、その通信エージェントおよび送信機能を介して、受信したいと希望するデータの長さを表している送信パラメータ（ｓｈｏｒｔ型整数に対応するＰ１およびＰ２）を付属させて発行している。通信エージェントからこのコマンドを受信すると、そのカードは、カードの出力ストリーム内の第１のデータブロックを読み取り、さらにこのブロックをカードの応答機能に送信する。次いで、この第１のデータブロックは、ＡＰＤＵコマンドに応答する応答データ（ＤａｔａＲ）としてホストに戻される。
【０１２３】
次いで、読み取りプロセスの連続する各反復では、ホストによるＡＰＤＵコマンド、ならびにすでに受信されたデータの長さを表している送信パラメータ（Ｐ１およびＰ２、すなわちｓｈｏｒｔ型整数）の送信を含む。一旦カード通信エージェントにより受信されると、この長さは直前の送信に関する肯定応答（ａｃｋｎｏｗｌｅｄｇｅｍｅｎｔ）の役割をする。したがって、通信エージェントは、応答データ（ＤａｔａＲ）として、ホストによって指示された長さに直ぐに続けて出力ストリームデータを戻している。データは出力ストリームから読み取られるが消去されておらず、またしたがって、必要が生じた場合に再送信することができることに留意すべきである。このことは、この送信において失念される恐れのあるデータがないことを意味している。
【０１２４】
この読み取りセッションは、ホストによって要求された長さが正しく受信されたときに終了となると共に、このホストはその反復を停止する。このセッションはまた、カードの通信エージェントが、出力ストリーム内で利用可能なすべてデータがすでに送信済みであることを示すデータ項目（たとえば、長さがゼロのＤａｔａＲフィールド）またはコード（ＳＷ１またはＳＷ２）が送信する場合にも終了させるか、または中断させることができる。カードの出力ストリームが空である場合、ホストはカード内において、その出力ストリームが新規のデータを受信するために、カード「ｑｏｕｔ」キューからカードの出力ストリームへの新たなオブジェクトシリアライゼーションオペレーションを起動させなければならない。
【０１２５】
ホストがその出力ストリームからカードにデータを送信したいと希望する場合、ホストはＪａｖａ（登録商標）シンタックス向けのたとえば「ｃａｒｄ．Ｗｒｉｔｅ」などの書き込みコマンドを送信する。このコマンドは、その各々がプロセスの１回の反復を表しているような多数のトランザクションに分割されているのが典型的である書き込みセッションを起動する。
【０１２６】
書き込みセッションを起動するために、ホストはＡＰＤＵフォーマットコマンドを、その通信エージェントおよび送信機能によって送信したいと希望するデータの長さを表している送信パラメータ（Ｐ１およびＰ２、すなわちｓｈｏｒｔ型整数）を付属させて送信している。この時点で、この第１のＡＰＤＵコマンドのデータフィールド（ＤａｔａＴ）は、送信しようとする第１のデータブロックまたはグループを含んでおり、このデータブロックはホストの出力ストリーム内に読み取られる。このコマンドを受信すると、カードの応答機能は、前記第１のデータブロックをカードの通信エージェントに送信する。次いで、カードの通信エージェントはこの第１のデータブロックをカードの入力ストリームに書き込む。
【０１２７】
書き込みプロセスの連続する各反復では、ホストによるＡＰＤＵコマンド、ならびにすでに送信されたデータの長さを表している送信パラメータ（Ｐ１およびＰ２、すなわちｓｈｏｒｔ型整数）の送信を含む。この時点で、この第１のＡＰＤＵコマンドのデータフィールド（ＤａｔａＴ）は、ホストの出力ストリームから読み取られた次のデータブロックまたはグループを含んでいる。このコマンドを受信すると、カードの応答機能は、これらのパラメータおよびこのデータブロックをカード通信エージェントに送信する。次いで、カードの通信エージェントは、送信パラメータ（Ｐ１およびＰ２）内で宣言されたデータの長さを、書き込みセッションの開始以降ですでに受信されているデータの長さと比較する。このことは、この送信において失念される恐れのあるデータがないことを意味している。
【０１２８】
この比較によってまったくエラーが特定されない場合、カードの通信エージェントはこのデータブロックをカード入力ストリームに書き込む。エラーが検出された場合、通信エージェントはエラーを示しているおよび／またはこのエラーの性質を表しているコードまたはインデックスをホストに戻す。このコードまたはインデックスは、応答機能の応答パラメータ（ＳＷ１およびＳＷ２）、戻されたデータフィールド（ＤａｔａＲ）、このフィールドの長さ、あるいはこれらの要素の組合せを介して戻されることがあり得る。
【０１２９】
書き込みセッションは、ホストによって宣言された長さが送信され終わると終了となると共に、このホストは反復を停止させる。このセッションはまた、カードの通信エージェントが、カード入力ストリームが新規のデータを受信できないことを指示するコードまたはインデックスを送信する場合にも、終了させるか、または中断させることができる。次いで、ホストは、この入力ストリームを含むメモリ構造内にメモリ空間を解放するためにカード内で１つまたは複数のオペレーションを起動させなければならない。
【０１３０】
これは、カード内で、入力ストリームからカードのアプリケーションにアクセス可能なオブジェクトの「ｑｉｎ」入力キューへの新たなデータのデシリアライゼーションオペレーションを起動させることが必要となることがあり得る。このためにはさらに、カードの出力ストリーム内に含まれたデータを受信し、さらにその２つのストリームを含んでいる循環式構造内のメモリ空間を解放するために、新たな読み取りセッションを起動させることが必要となることがあり得る。
【０１３１】
オブジェクトレベルでは、シリアライゼーションおよびデシリアライゼーションオペレーションは、データストリームとカードのエージェントまたはアプリケーションとの間で、ならびにこの逆方向で、以下のように実行される。
【０１３２】
オブジェクトは、カード内で、入力フロー（３３）から、「ＯｂｊｅｃｔＩＯＡｐｐｌｅｔ」クラスによって提供されかつ宛先のエージェントまたはアプリケーションによって使用される、「Ｐｒｏｃｅｓｓ（Ｏｂｊｅｃｔ）」命令に直接的にアクセス可能である場所である「ｑｉｎ」入力キューにデシリアライゼーションされる。
【０１３３】
本発明によるプロシージャを実行するために、ホストはカード内で、デシリアライゼーションオペレーションの起動を希望する場合に、たとえばＪａｖａ（登録商標）シンタックス向けの「ｃａｒｄ．Ｓｅｒｉａｌｉｚｅ  Ｉｎ」などの命令を使用する。
【０１３４】
図４は、構造化ソフトウェアオブジェクト（３４）に対応する入力ストリーム（３２）のデータをデコードすることによる前記構造化ソフトウェアオブジェクト（３４）のデシリアライゼーション、ならびに前記構造化オブジェクト（３４）または結果オブジェクトに対する保存および構造コンポーネント作成オペレーションを表している。
【０１３５】
入力ストリーム（３３）内の線形シーケンス内に保存されたデータを１つ１つ読み取りながら、シリアライゼーションエージェント（２１２）は、これらのデータを所与のコードに従って解釈し、さらにこの解釈に基づいて構造化ソフトウェアオブジェクト（３４）を作成する。この入力ストリーム内に保存されたデータシーケンス内のある種のデータは、所与の値を有することができ、かつこの値は、コードタグの存在を指示するものと解釈される。このデコード処理は、デコードしようとする構造化オブジェクトのそれぞれのタイプに特定の割り当てメソッドを、たとえば次のシンタックス、
Ｔｙｐｅｏｂｊｅｃｔ：：ｄｅｃｏｄｅ（Ｏｂｊｅｃｔ，ＩｎｐｕｔＳｔｒｅａｍ）
を使用してコールすることによって実行され、タイプ「Ｔｙｐｅｏｂｊｅｃｔ」のオブジェクト「Ｏｂｊｅｃｔ」を入力ストリーム「ＩｎｐｕｔＳｔｒｅａｍ」からデコードすることができる。
【０１３６】
このコードには、その各々が所与の意味を有しておりかつその各々が入力ストリーム内のデータ項目の少なくとも１つの指定値に対応している１組のタグを備えている。したがって、これらのタグのうちの１つに対応する値を有する入力ストリーム内の各データ項目は、デシリアライゼーションプロセスの間にシリアライゼーションエージェントによって解釈を受ける。
【０１３７】
本発明によるプロシージャを使用するアプリケーションについては、シリアライゼーションエージェント（２１２）は、多数のタグ組を認識するように設計することができるか、あるいは本発明の基本的な趣旨を逸脱することなく各タグを多数の異なるデータ値によって表現することができる。このタイプの多様性は、特に、１つのカード（２）またはカードタイプが多数の異なる端末またはホスト環境を有することを発生するために使用することができる。
【０１３８】
本発明のここに記載したバージョンについては、そのコードは、「ＮＵＬＬ」、「ＮＥＷ」、「ＲＥＦ」および「ＤＡＴＡ」タイプのタグを備えている。
【０１３９】
ＮＵＬＬタグは、シリアライゼーションエージェントによる構築の途中で構造内のある箇所を占有しているがデータは存在しないことを表す。
【０１４０】
ＮＥＷタグは、シリアライゼーションエージェントに関する新たなオブジェクトの記述の開始を指示し、このオブジェクトは、変換により得られる構造化ソフトウェアオブジェクト（３４）、あるいはこのタイプの構造化オブジェクト（３４）の一部を構成するエレメントと呼ばれるオブジェクトである。
【０１４１】
ＲＥＦタグは、あるオブジェクト、同じオブジェクトのことや別のオブジェクトの指定を、記述の途中においてオブジェクトまたはエレメントのすべてまたは一部に関する値のソースとして指示する。これを用いるとある値を参照によって割り当てることができる。
【０１４２】
ＤＡＴＡタグは、記述の途中において後に続くデータがオブジェクトまたはエレメントの値またはコンテンツを表していることを指示する。このコンテンツは、オブジェクトに対して直接割り当てられる１つまたは複数の値を表す生データを含むことができ、あるいは、オブジェクトを指示する別のタグを再度含むことやこのコンテンツを定義している参照を含むことができる。
【０１４３】
そのタイプに従って、タグには、その解釈が関連するタグの意味によって決定されるような１つまたは複数のデータ項目を続けることができる。
【０１４４】
ＮＥＷタグを読み取ると、シリアライゼーションエージェントには、これに続くデータ項目が記述された新たなオブジェクトのタイプを表しているものと解釈しなければならないことが分かる。
【０１４５】
同様に、ＲＥＦタグを読み取ると、シリアライゼーションエージェントには、これに続くデータ項目が参照によってこの値のソースとして指定されたオブジェクトに関する識別子を表しているものと解釈しなければならないことが分かる。
【０１４６】
本発明のここに記載したバージョンでは、そのタグはタイプおよびレファレンスの識別子と同じ方式で１バイト上でコード化されているが、本発明によるプロシージャはさらに関連するコンピュータ環境のニーズや可能性に応じて異なるかさらに複雑または明示的な別のコードを使用することもできることは明白である。
【０１４７】
入力ストリーム（３２）のデータを読み取るのに従って、シリアライゼーションエージェント（２１２）は、各データ項目の値を解析すると共に、結果オブジェクト（３４）を構成しているオブジェクトまたはエレメント（３４０、３４１、３４２、３４３、３４４）を作成およびロードする。入力ストリーム（３２）のこの読み取りは、この入力ストリームによって表されるオブジェクト（３４）の再構成が完了するまで反復される。この作成は、デシリアライゼーションで「Ｔｙｐｅｏｂｊｅｃｔ」タイプのオブジェクトを作成または割り当てるために、たとえば次のシンタックス、
Ｔｙｐｅｏｂｊｅｃｔ：：ｍａｌｌｏｃ（）
を用いて各オブジェクトタイプに特定な割り当てメソッドをコールすることによって取得されることができる。
【０１４８】
このタイプのオブジェクトは、異なる構造を有する可能性があるため、これらの作成およびロードのオペレーションは、直接的であるか否かによらず、たとえばＪａｖａ（登録商標）言語の「タイプマーシャラ（ｔｙｐｅ  ｍａｒｓｈａｌｌｅｒ）」エージェントなど、作成するオブジェクトのタイプに特定のタイプの管理エージェント（ＴＭ０、ＴＭ１、ＴＭ２）によって管理されている。このタイプ管理エージェントは、１つまたは複数のオブジェクトタイプに特定であると共に、たとえばＪａｖａ（登録商標）言語の「タイプマネージャ（ｔｙｐｅ  ｍａｎａｇｅｒ）」エージェントなどのジェネリックなタイプマネージャエージェント（ＴＭＧ）によって管理することができる。特に、このタイプマネージャエージェントは、デシリアライゼーションプロセスの間に作成された様々なオブジェクトタイプに関する識別子を保存している。このジェネリックなタイプマネージャエージェント（ＴＭＧ）はさらに、これらの異なるオブジェクトタイプに特定であると共に同じオブジェクトのシリアライゼーション／デシリアライゼーションのために使用されるコードおよびプロシージャ、またはメソッドを含む。このタイプマネージャエージェントはさらに、オブジェクトおよびその割り当てに関するリストを管理するために使用されており、これによってデコードの際に新たなオブジェクトを作成するために新たな割り当てを実行し解放されている割り当てを再使用することを可能にしている。
【０１４９】
典型的には、タイプマネージャエージェント（ＴＭＧ）は、カード内で管理を受けることが可能な異なるタイプのオブジェクトすべてに関する情報を含んでいる。この情報は、たとえばカードプログラミングフェーズの間にホストによって作成されることがあり得る。次いで、この情報は、アプリケーションによって使用されるクラス（「アプレット（ａｐｐｌｅｔ）」）によって、ジェネリックなタイプマネージャエージェント（ＴＭＧ）のコードに追加されるプログラムコード（「ｇｌｕｅコード」）の形式で送信される。
【０１５０】
以下に記載するようにタイプマネージャエージェントおよびタイプマーシャラエージェントを使用することによって、本発明によるプロシージャは、たとえばＪａｖａＣａｒｄ（登録商標）などそのプログラミング環境がこうしたタイプマネージャを含んでいないような埋め込み式プラットフォーム内において、基本または構築タイプの構造化オブジェクトのシリアライゼーションおよびデシリアライゼーションを管理することを可能にしている。
【０１５１】
デコード中のオブジェクトまたはエレメントの作成は、このオブジェクトの割り当て、すなわち所与のメモリ空間の予約、ならびにオブジェクトに対するこのメモリ空間の割り当て、に対応している。特にＪａｖａｃａｒｄ（登録商標）を含むようないくつかの埋め込み式環境は、従来のＪａｖａ（登録商標）言語の「ガーベッジコレクタ（ｇａｒｂａｇｅ  ｃｏｌｌｅｃｔｏｒ）」エージェントなど、削除されたオブジェクトによってこれまで占有されていたメモリ空間を解放するために使用できるソフトウェアツールを含んでいない。シリアライゼーションエージェント（２１２）によってあるオブジェクトが作成されると、本発明によるプロシージャは、すでに不要になっている、たとえば作成しようとするオブジェクトと同じタイプの別のオブジェクトによってこれまで占有されていたメモリ空間をこのオブジェクトに対して割り当てながらこの作成を実行する可能性を提供することができる。したがって、カードのメモリ空間を適宜再使用することが可能となり、このことは、カードのメモリ空間には限度があるため有用な利点となることが多い。
【０１５２】
図４に表した例では、入力ストリーム（３２）は、その構造またはグラフがＪａｖａ（登録商標）言語において以下の形式で記述することができるような構造化された結果オブジェクト（３４）に対応している。
【表３】
2005519376.tif 000005
【０１５３】
入力ストリーム（３３）を読み取る際に、シリアライゼーションエージェントは先ずＮＥＷタグ（３２１）を読み取る。したがって、シリアライゼーションエージェントはこれに続くデータ項目（３２２）を読み取り、次いで、タイプ２オブジェクトに対する作成要求を保存する。このＮＥＷ識別子２タグ（３２１）に従って、シリアライゼーションエージェントは、この例ではクラスＸの新たなオブジェクト「ｘ」（３４０）を、同じタイプ（タイプ２）に対応するタイプマネージャエージェント（ＴＭ２）を用いて作成する。結果オブジェクトの記述の最初において、この新たなオブジェクトは、この結果オブジェクトに関するグラフのツリー構造の「ｒｏｏｔ」オブジェクトとなる。
【０１５４】
この作成の際に、シリアライゼーションエージェントは、この新たに作成したオブジェクト（３４０）にインデックス（３４０２）を割り当てており、この例ではこのインデックスは値０をとっている。したがって、前記インデックス（３４０２）はこの結果オブジェクト（３４）の構築の際に別のエレメントまたはエレメントの一部分に関する参照の役割をしており、これによって、このエレメントのコンテンツがロード済みであるか否かの判定を可能にしている。
【０１５５】
次いで、シリアライゼーションエージェントはタイプスタック（ＴＹＳＴ）と呼ばれるメモリ構造内にこのオブジェクトのタイプおよびインデックスを保存する。このタイプスタックは、１つのメモリスタックタイプ構造であり、このことはそのデータ項目が１つの項目をもう一方の項目の上に保存する（プッシュで入れる）ことが可能であり、また、所与のデータ項目は、連続して保存されているデータをすでに抽出し終えたときにのみ読み取りおよび抽出（ポップ取り出し）することができることを意味している。データは、これを保存されたときと逆の順序（後入れ先出し法：ＬＩＦＯ）でスタックから抽出される。
【０１５６】
シリアライゼーションエージェントはさらに、入力ストリーム内の次のデータをロードさせる、カレントオブジェクト（ＯＢＪ）と呼ばれるオブジェクトに対応させるように、前記新たなオブジェクト（３４０）のタイプおよびそのインデックスを保存する。
【０１５７】
次のタグは、ＤＡＴＡタグであり、この後にタグや識別子ではない２つの生データ項目（３２４、３２５）が続く。これら２つのデータ項目は、したがって、カレントオブジェクト（ＯＢＪ）内に保存される、すなわち後続のエレメント（３４２、３４３）の値としてｘ（３４０）に保存される。これらの２つの後続のエレメントはそれぞれ、整数タイプ（ｉｎｔ）指定の「ｉ」、およびバイトタイプ（ｂｙｔｅ）指定の「ｂｙ」であり、これらのエレメントは入力ストリームのこれらの２つのデータ項目（３２４、３２５）内のそれぞれに含まれる値をとる。
【０１５８】
次のタグは、ＮＥＷタグであり、この後にタイプ０を指示する１つのデータ項目が続く。このシーケンスは、オブジェクト「ｘ」の次のエレメントがタイプ０のオブジェクトであることを指示している。シリアライゼーションエージェントは、したがって、インデックス（３４４２）を、前記オブジェクト（３４４）に割り当て（この例では１）、さらに前記新たなオブジェクト（３４４）に関するインデックスおよびタイプ、すなわち０、をタイプスタック（ＴＹＳＴ）に追加する（プッシュで入れる）。シリアライゼーションエージェントはさらに、タイプ０に対応するタイプマネージャエージェント（ＴＭ０）によって作成された、この例ではタイプＹの「ｙ」（３４４）の、タイプ０オブジェクトを有している。
【０１５９】
カレントオブジェクト（ＯＢＪ）に対応するタイプマネージャエージェント（ＴＭ２）を介して、シリアライゼーションエージェントは、前記カレントオブジェクト（ＯＢＪ）、すなわち「ｘ」、が完全にロードされていないことが分かる。次のタグは、１つの生データ項目（３２９）を従えたＤＡＴＡタグであり、したがってこれは、カレントオブジェクトの次のエレメント（３４１）に対する値として、すなわちブール（Ｂｏｏｌｅａｎ）タイプのエレメント「ｂｏ」の値として割り当てられ、これがオブジェクト「ｘ」の最後のエレメントとなる。
【０１６０】
カレントオブジェクト（ＯＢＪ）に対応するタイプマネージャエージェント（ＴＭ２）を介して、シリアライゼーションエージェントは、前記カレントオブジェクト（ＯＢＪ）、すなわち「ｘ」（３４０）、がここで完全にロードされたことが分かる。前記ロードされたオブジェクト（３４０）のインデックス（３４０２）は次いで、カード内でのこのオブジェクト（３４０）の識別子を付けてオブジェクトスタック（ＯＢＪＳＴ）内に保存される。次いで、シリアライゼーションエージェントは、カレントオブジェクトのロードを終了させ、タイプスタック（ＴＹＳＴ）の一番上に保存されているタイプおよびインデックスを抽出する（ポップで取り出す）。スタックの一番上は、最初にアクセス可能なスタック箇所であることは当然に理解されよう。タイプスタックから抽出したタイプおよびインデックスは、この例ではそれぞれ０と１であり、これらは次いで、新たなカレントオブジェクト（ＯＢＪ）に対応するものとして保存される。
【０１６１】
次のタグはＤＡＴＡタグであり、これによりしたがってカレントオブジェクト、すなわち「ｙ」のロードが指示される。このタグの後には、１つのＲＥＦタグ（３２１１）およびこの例では０であるような１つのデータ項目（３３１２）が続く。シリアライゼーションエージェントは、したがって、オブジェクト「ｙ」（３４４）に対する参照によって値を割り当てており、この参照（３２１２）によりインデックス（３４０２）を指定するためのこのオブジェクトの値によって単純なリンクを示している。オブジェクト「ｙ」は、したがって、オブジェクト「ｘ」を参照するように定義された値を有しており、これはデシリアライゼーションプロセス内ではインデックス０を有する。このリンクは次いで、カード内におけるこのオブジェクト「ｘ」に対する識別子を保存することによって結果オブジェクト（３４）内において定義されており、この識別子はこのインデックスによってオブジェクトスタック（ＯＢＪＳＴ）から読み取られる。
【０１６２】
カレントオブジェクト（ＯＢＪ）に対応するタイプマネージャエージェント（ＴＭ０）を介して、シリアライゼーションエージェントは前記カレントオブジェクト（ＯＢＪ）、すなわち「ｙ」、がここで完全にロードされたことが分かる。前記ロードされたオブジェクト（３４４）のインデックス（３４４２）は、したがって、そのカード内での前記オブジェクト（３４４）の識別子を付けてオブジェクトスタック（ＯＢＪＳＴ）内に保存される。次いで、シリアライゼーションエージェントはこのロードを終了させ、タイプスタック（ＴＹＳＴ）を調べる。
【０１６３】
オブジェクト「ｙ」のタイプの抽出後にタイプスタック（ＴＹＳＴ）が空になると、すなわち復元すべき「構築タイプ（ｃｏｎｓｔｒｕｃｔｅｄ  ｔｙｐｅ）」がそれ以上なくなると、シリアライゼーションエージェントは、結果オブジェクト（３４）が完全に作成し終わったものと判断を下す。
【０１６４】
本発明の一変形バージョンでは、新たなオブジェクトの作成または割り当ては、前記新たなオブジェクトを指示するＮＥＷタグの読み取りから、このオブジェクトのロードの開始に至るまでのデシリアライゼーションプロセスの任意の段階で実行することができる。
【０１６５】
別の変形形態では、オブジェクトのデシリアライゼーションの際に使用されるインデックスは、カード内におけるそのオブジェクトの識別子と同一である。
【０１６６】
オブジェクトは、カード内において出力ストリーム（４２）から出力キュー「ｑｏｕｔ」へシリアライズされ、これは、「ＯｂｊｅｃｔＩＯＡｐｐｌｅｔ」クラスによって供給されると共に宛先エージェントまたはアプリケーションによって使用される命令「ＳｅｎｄＯｂｊｅｃｔ（）」によって直接アクセスすることができる。
【０１６７】
本発明によるプロシージャを実現するために、ホストはたとえばＪａｖａ（登録商標）シンタックス向けの「ｃａｒｄ．Ｓｅｒｉａｌｉｚｅ  Ｏｕｔ」などの命令を使用して、カード内のシリアライゼーションオペレーションを起動させる。
【０１６８】
図５は、ソースオブジェクトと呼ばれる構造化ソフトウェアオブジェクト（４１）の構造のコンポーネントを解析し、続いて前記ソースオブジェクト（４１）に対応する出力ストリーム（４２）内に保存されるデータの形式でコード化することによる、構造化ソフトウェアオブジェクト（４１）のシリアライゼーションを表している。
【０１６９】
このシリアライゼーション機能は、所与のタイプのオブジェクトに対して利用可能なメソッド、すなわちアクションまたはプロシージャにおいて、以下のＪａｖａ（登録商標）シンタックスを用いて実現される。
【０１７０】
Ｔｙｐｅｏｂｊｅｃｔ：：（Ｏｂｊｅｃｔ，ＯｕｔｐｕｔＳｔｒｅａｍ）は、
タイプ「Ｔｙｐｅｏｂｊｅｃｔ」のオブジェクト「Ｏｂｊｅｃｔ」を出力ストリーム「ＯｕｔｐｕｔＳｔｒｅａｍ」へコード化に使用されるメソッドである。
【０１７１】
Ｔｙｐｅｏｂｊｅｃｔ：：ｇｅｔＳｕｐｅｒ（）は、
「Ｔｙｐｅｏｂｊｅｃｔ」タイプオブジェクトをコード化する際に、タイプに関する情報およびオブジェクトの構築タイプを取得するために使用されるメソッドである。
【０１７２】
基本タイプは一般に、構築タイプと対照的に、環境またはプログラミング言語によってスケジューリングされかつ管理されるタイプであり、多数のオブジェクトの組合せとして定義される。現在の基本タイプは、埋め込み式環境に関してはたとえば、「ｉｎｔｅｇｅｒ」、「Ｂｏｏｌｅａｎ」および「ｂｙｔｅ」であり、またより広範な環境に関しては、長整数タイプ、実数タイプ、長実数タイプおよびキャラクタタイプ（「ｌｏｎｇ」、「ｒｅａｌ」、「ｄｏｕｂｌｅ」および「ｃｈａｒ」）である。
【０１７３】
このシリアライゼーションオペレーションでについて、シリアライゼーションエージェント（２１２）は、シリアライズしようとするソースオブジェクト（４２）の完全な構造またはグラフに対して再帰的な（ｒｅｃｕｒｓｉｖｅ）走査を実行し、「ｒｏｏｔ」オブジェクトまたはエレメント（この例では「ｘ」）を始点としてオブジェクトエレメント（４１０、４１２、４１３、４１４、４１１）を解析する。この例で示したソースオブジェクト（４２）のグラフは、図４に関して上述したものと同じである。シリアライゼーションエージェントは、構築タイプを有する各グラフエレメントごとに同じ構築タイプに対応するエージェント（ＴＭ０、ＴＭ１、ＴＭ２）をコールする。
【０１７４】
出力ストリーム（４２）内におけるソースオブジェクト（４１）の記述は、ＮＥＷタグを書き込むことによって開始し、この後に、この例ではタイプ２オブジェクト「ｘ」であるようなルートエレメントタイプ識別子を続けている。次いで、このルートオブジェクトは、カレントオブジェクト（ＯＢＪ）に指定される。このオブジェクトはさらにインデックス（この例では、０）を受け取ると共に、次いでそのタイプおよびインデックスがタイプスタック（ＴＹＳＴ）内にロードされる（プッシュオペレーション）。
【０１７５】
この記述は、ＤＡＴＡタグを書き込み、その後にルートオブジェクトのコンテンツに対応する値または参照を指示するデータを続けることによって継続される。ルートオブジェクト「ｘ」が構築タイプをもつオブジェクト「ｙ」（４１４）を含んでいるので、そのルートオブジェクトの記述には、ＮＥＷタグを含め、その後に前記オブジェクト「ｙ」の値の代わりに、この例では、「ＮＥＷ  ０」の、前記オブジェクト「ｙ」のタイプを続けている。ＮＥＷタグにはこのタグを書き込むときに、この例では、１の、１つのインデックスが割り当てられる。次いでこの新たなオブジェクトのインデックスおよびタイプがタイプスタック（ＴＹＳＴ）内にロードされる（プッシュオペレーション）。
【０１７６】
オブジェクト（ＯＢＪ）、すなわちオブジェクト「ｘ」（４１０）、のコンテンツの記述が完了したら、オブジェクトのインデックスは、このオブジェクトの識別子と一緒にオブジェクトスタック（ＯＢＪＳＴ）内に保存される。次いで、シリアライゼーションエージェントはそのタイプスタックを解釈し、オブジェクト「ｙ」のタイプおよびインデックスを抽出する（「ポップ」オペレーション）。シリアライゼーションエージェントは、前記オブジェクト「ｙ」を新たなカレントオブジェクト（ＯＢＪ）として保存し、次いで前記オブジェクト「ｙ」のコンテンツに関する記述を開始する。ルートオブジェクト「ｘ」に対する単純な参照を備えたこのオブジェクトでは、出力ストリームに書き込まれたデータは、ＲＥＦタグを含み、その後にこのオブジェクトをレファレンスとして指定する、すなわち、このオブジェクト「ｘ」はこの例では、インデックス０を有する、ためのインデックスの役割をする１つのデータ項目が続く。
【０１７７】
カレントオブジェクト、すなわちオブジェクト「ｙ」（４１４）、のコンテンツの記述が完了したら、そのインデックスは、このオブジェクトに関する識別子と一緒にオブジェクトスタック（ＯＢＪＳＴ）内に保存される。次いで、シリアライゼーションエージェントはタイプスタックを調べ、このタイプスタック内でオブジェクト「ｙ」の下に保存されたオブジェクト「ｘ」のタイプを抽出する（ポップオペレーション）。オブジェクト「ｘ」のインデックスがオブジェクトスタック（ＯＢＪＳＴ）内にすでに保存されていると、シリアライゼーションエージェントは、オブジェクト「ｘ」がすでにシリアライゼーションまたは記述済みであることが分かる。したがって、シリアライゼーションエージェントは、再度タイプスタックを調べてこれが空であることを確認し、その結果、ソースオブジェクト（３４）を構成しているすべてのエレメントが出力ストリーム（４２）内に完全に記述済みであると判定する。
【０１７８】
これらのアルゴリズムは再帰的であるため、埋め込み式プラットフォーム内、たとえばスマートカードやＪａｖａＣａｒｄ（登録商標）標準の携帯コンピュータ式オブジェクト内にコードを保存することを可能とさせるようにメモリ空間を十分に小さくさせたプログラムコードを用いて、これらのシリアライゼーションおよびデシリアライゼーションオペレーションを実行することが可能となる。これらのアルゴリズムの簡潔性によってさらに、こうした埋め込み式プラットフォームで使用されるプロセッサなどの低電力のプロセッサによってこれらのオペレーションを実行することも可能となる。
【０１７９】
一時的な形式で保存されるデータの大きさをバランスさせるためには、ホストアプリケーション（１１）により要求される様々な読み取り、書き込み、シリアライゼーションおよびデシリアライゼーションのオペレーションを、１つまたは複数のプログラムループ内でインターリーブすることができる。このタイプのループは、各反復の時点でこれらのオペレーションの各々に関する１つのコマンドを、たとえば以下のＪａｖａ（登録商標）シンタックスを用いて実行する。
【０１８０】
Ｄｏ
Ｄｏ  ｃａｒｄ．Ｓｅｒｉａｌｉｚｅ  ｏｕｔ  Ｗｈｉｌｅ（ｏｋ  ｏｕｔ）
Ｄｏ  ｃａｒｄ．Ｒｅａｄ  Ｗｈｉｌｅ（ｄａｔａ  ｒｅａｄ）
Ｗｈｉｌｅ（ｄａｔａ  ｉｎ）ｃａｒｄ．Ｗｒｉｔｅ
Ｗｈｉｌｅ（ｏｋ  ｉｎ）ｃａｒｄ．Ｓｅｒｉａｌｉｚｅ  ｉｎ
Ｌｏｏｐ
この例では、第１行および最終行（「Ｄｏ」および「Ｌｏｏｐ」）は、４行の中間行のコードを備えたループの反復を決定している。このタイプのループは、当然別のオペレーションと組み合わせることが可能であると共に、反復プロセスを中断させるための様々な条件を含むことが可能である。
【０１８１】
このループの第１行は、カード内で「ＳｅｎｄＯｂｊｅｃｔ（）」コマンドによって「ｑｏｕｔ」出力キュー内に直前に保存されたオブジェクトに関してカード出力ストリームへのシリアライゼーションセッションを起動させることを指示している。次いで、このセッションは、「ｏｋ  ｏｕｔ」の条件が満たされている限り、たとえば送信するオブジェクトが「ｑｏｕｔ」キュー内に存在していると共にその出力ストリームが満たされていない間は反復される。
【０１８２】
この第２行は、ホストによってカード出力ストリーム内に含めたデータに対して読み取りセッションを起動させることを指示している。次いで、このセッションは、「ｄａｔａ  ｒｅａｄ」条件が満たされている限り、たとえばカードからデータを受け取っている間は反復される。
【０１８３】
この第３行は、ホストからのデータ入力ストリームへの書き込みセッションの実行および反復を指示している。このセッションは、「ｄａｔａ  ｉｎ」条件が満たされていればその限りにおいて、たとえばカードに対して送信すべきデータが存在すると共にカードエントリストリームが満たされていない間においてのみ、実行し反復されている。
【０１８４】
この第４行は、カードエントリストリーム内に含まれているデータに対する構造化オブジェクト「ｑｉｎ」エントリキューへのデシリアライゼーションセッションを、これらのデータが「ｐｒｏｃｅｓｓ（Ｏｂｊｅｃｔ）」コマンドによって抽出された場合に実行および反復するように指示している。このセッションは、「ｏｋ  ｉｎ」条件が満たされていればその限りにおいて、たとえばカードエントリストリーム内にデシリアライズすべきデータが存在する間においてのみ、実行し反復されている。
【０１８５】
たとえばＪａｖａＣａｒｄ（登録商標）標準に準拠したパッシブ（ｐａｓｓｉｖｅ）カードの場合、オブジェクトシリアライゼーションオペレーションの最後に、典型的には、たとえば「ｐｒｏｃｅｓｓ（Ｏｂｊｅｃｔ）」メソッドに対する自動コールによってオブジェクトの処理を起動させている。
【０１８６】
この例では、カード側において実行されるオペレーションのみを表していることに留意すべきである。ホスト側において実行される対称型オペレーションは、本発明の基本的な趣旨を逸脱することなく、利用可能なハードウェアおよびソフトウェアのリソースに応じて、同様の方式や全体として異なる方式のいずれかによって実行することができる。
【０１８７】
これらの様々な相補型オペレーションが再帰的に反復することが可能なソフトウェアループ内にインターリーブされているということにより、構造化オブジェクトの転送に関連する様々なフェーズを、単一の実行コマンドまたは単一の転送コマンドのフレームワーク内で並列に実行することが可能である。循環形式で保存されたデータストリームを用いると共に、上述のように同じメモリ空間を不確定式で再使用することによって、埋め込み式プラットフォームの限られた容量であってもサイズに関する制約なしに、同じコマンドによって構造化オブジェクトの完全な転送を起動することができる。
【０１８８】
上述した変換オペレーションのすべてが、ホストおよび埋め込み式プラットフォーム内にロードされた１つまたは複数のプロシージャにおいて実装される、すなわちプログラムされる場合、前記プロシージャはいくつかの単純なコマンドを用いてユーザによってアクセスを受けることが可能である。
【０１８９】
Ｊａｖａ（登録商標）言語およびＪａｖａＣａｒｄ（登録商標）環境に適用されるような本発明のここに記載したバージョンでは、アプリケーションのプログラマは単に、これらのいくつかの単純なコマンドを使用してアプリケーションを作成するだけでよい。これらのコマンドは、中間的なオペレーションのすべてをユーザに対してトランスペアレントに実行している。換言すると、ユーザは、前記コマンドの機構の内部オペレーションに関与する必要がない。
【０１９０】
たとえば、処理ステーションまたはホスト端末内にロードされた「ＯｂｊｅｃｔＩＯＰｒｏｘｙ」クラスは、「ＷｒｉｔｅＯｂｊｅｃｔ（）」コマンドおよび「ｒｅａｄＯｂｊｅｃｔ（）」コマンドを提供する。
【０１９１】
同様に、埋め込み式プラットフォーム内にロードされた「ＯｂｊｅｃｔＩＯＡｐｐｌｅｔ」クラスは、「Ｐｒｏｃｅｓｓ（Ｏｂｊｅｃｔ）」コマンドおよび「ＳｅｎｄＯｂｊｅｃｔ（）」コマンドを提供する。典型的には、「ＯｂｊｅｃｔＩＯＡｐｐｌｅｔ」クラスは、知られている拡張技法を用いて、すなわち「ｐｒｏｃｅｓｓ（ＡＰＤＵ）」メソッドを含んだ「ＩＯＡｐｐｌｅｔ」クラスからの継承によってこれらのコマンドを実現している。このためには、初期メソッドと組み合わせたプログラムコードをこのメソッドに追加すること、ならびに初期メソッド内で定義されるようにそのコードのオペレーションを修正または置換すること、が必要である。
【０１９２】
構造化オブジェクトをカードアプリケーションに送信しかつカード内で処理を起動するためには、そのホストアプリケーション内でユーザによって命令「ＷｒｉｔｅＯｂｊｅｃｔ（）」が利用される。
【０１９３】
「Ｐｒｏｃｅｓｓ（Ｏｂｊｅｃｔ）」メソッドは、構造化オブジェクトの受信およびデシリアライゼーションに続いてカードによって自動的にコールされる。次いで、このメソッドのコンテンツは、このオブジェクトからの所望のオペレーションを実行するために、埋め込み式プラットフォーム内にロードされたアプリケーションの当該部分に関してユーザによってプログラムされる。次いでこのメソッドは、ＡＰＤＵフォーマットデータのみに関してＪａｖａＣａｒｄ（登録商標）の標準「ｐｒｏｃｅｓｓ（ＡＰＤＵ）」コマンドと同様の方式で使用される。
【０１９４】
「ＳｅｎｄＯｂｊｅｃｔ（）」命令は、埋め込み式プラットフォームからホストへの１つまたは複数の構造化オブジェクトの送信を作成するために、埋め込み式プラットフォーム内にロードされたアプリケーションの当該部分、たとえば「Ｐｒｏｃｅｓｓ（Ｏｂｊｅｃｔ）」メソッドコードの内部、に関してユーザによって利用される。次いで、この命令は、ＡＰＤＵフォーマットデータのみに関してＪａｖａＣａｒｄ（登録商標）の標準の「ｓｅｎｄＡＰＤＵ（）」コマンドと同様の方式で使用される。
【０１９５】
「ＲｅａｄＯｂｊｅｃｔ（）」命令は、カードアプリケーションがこの目的のために作成しておいた１つまたは複数の構造化オブジェクトを埋め込み式プラットフォームから受信するために、そのホストアプリケーション内でユーザによって利用される。
【０１９６】
前記埋め込み式プラットフォームの通信リソースがバイト形式または整数形式のデータを送信することができない場合であっても、このタイプの埋め込み式プラットフォームに関連するアプリケーションを作成するプログラマが、前記埋め込み式プラットフォームとホストまたは端末との間での構造化ソフトウェアオブジェクトの送信がより容易になることが理解されよう。
【０１９７】
埋め込み式アプリケーションのプログラマは、構造化ソフトウェアオブジェクトのデアロケーション、あるいは対応するメモリ空間のリセットまたは消去、さらに構造化ソフトウェアオブジェクトの複製に関していくつかの単純なコマンドを有することは有用となる。このことは、その埋め込み式プラットフォームのプログラミング環境が、たとえばＪａｖａＣａｒｄ（登録商標）環境内ですでに割り当てられたメモリ空間の再利用を管理しているガーベッジコレクタソフトウェアツールをもたない場合に特に成り立つ。
【０１９８】
本発明によるプロシージャの１バージョンでは、オブジェクトのシリアライゼーションの間の構造化ソフトウェアオブジェクトの各コンポーネントに対する解析ステップは、様々なオプションを用いて実行することができる。これら多数のオプションが、このコマンドの各実行がどのオプションを使用しなければならないかを指示するパラメータを伴うような、同じシリアライゼーションコマンドの実装に、含むことが可能である。これらの様々なオプションは、さらに、シリアライゼーションコマンドの異なる実装において別々に使用されることも可能である。
【０１９９】
これらのオプションのうちの１つでは、オブジェクトのシリアライゼーションの間における構造化ソフトウェアオブジェクトの各コンポーネントの解析に関して、シリアライゼーションエージェント（２１２）は、このコンポーネントを含むメモリ空間をデアロケート（ｄｅａｌｏｃａｔｅ）するか、あるいは前記コンポーネントを新たなアロケーションに対して再使用可能であるとマーク付けしている。したがって、このオプションを使用するデストラクティブシリアライゼーション（ｄｅｓｔｒｕｃｔｉｖｅ  ｓｅｒｉａｌｉｓａｔｉｏｎ）と呼ばれるシリアライゼーションは、構造化オブジェクトの変換を実行し、この後にそのオブジェクトによって占有されたメモリ空間が解放される。
【０２００】
別のバージョンでは、本発明によるプロシージャは、カード内に保存された構造化オブジェクトのこのタイプのデストラクティブシリアライゼーションを、任意の送信オペレーションの外部で、たとえば、「ＯｂｊｅｃｔＩＯＡｐｐｌｅｔ」クラスの実行において、実行するオプションまたはコマンドを含むことができる。本発明によるプロシージャは、ユーザがアプリケーションのソフトウェアオブジェクトのうちのいくつかのすべてまたは一部によって占有されるメモリ空間を、困難なく再使用することが可能となることが容易に理解されよう。
【０２０１】
別のバージョン（図示せず）では、本発明によるプロシージャは、上述のようにすでに棄却された構造化オブジェクトによって直前に占有されていたカード内のメモリ空間を再使用することによって構造化オブジェクトのデシリアライゼーションを実行するオプションまたはコマンドを含んでいる。このデシリアライゼーションは、すべてが同一であるか非実体的であるデータを含んだデータストリームから、任意の送信オペレーションの外部で、実行される。このタイプのオブジェクトの割り当ておよび書き込みの後において、再使用されたメモリ空間は、関係する空間を直前に占有していたオブジェクトに属するデータをまったく含むことがない。このオペレーションは、たとえば「ＯｂｊｅｃｔＩＯＡｐｐｌｅｔ」クラス内に実装された場合、本発明によるプロシージャは、ユーザが、所与の割り当てに対応するメモリ空間の全体的な消去を、困難なくプログラムすることを可能とする。
【０２０２】
別のバージョン（図示せず）では、本発明によるプロシージャは、任意の送信オペレーションの外部に、構造化ソースオブジェクトの線形データシーケンスへのシリアライゼーションを実行するオプションまたはコマンドを含む。次いで、この同じ線形データシーケンスは、ソースオブジェクトと同一の結果オブジェクトになるようにデシリアライゼーションされるが、しかし、異なるメモリ空間を使用する。このオペレーションがたとえば「ＯｂｊｅｃｔＩＯＡｐｐｌｅｔ」クラス内で実行される場合、本発明によるプロシージャは、ユーザが、構造化ソフトウェアオブジェクトの同一の複製を困難なくプログラムすることを可能とする。
【０２０３】
本発明は、特許請求した本発明に関する応用分野を逸脱することなく、具体的な別の多数の形態をしたバージョンを提供できることは当業者には明らかであろう。したがって、記載したバージョンは、例示のみを目的として提供されたものと見なす必要があると共に、添付の特許請求の範囲によって規定された領域内において修正が可能である。したがって、本発明は上述の詳細に限定されるものではない。
【図面の簡単な説明】
【０２０４】
【図１】カードが１つのアプリケーションのみを組み込んでいる本発明の１バージョンにおける、埋め込み式プラットフォーム内のソフトウェアエージェントに対するおよびこれらからの、ホストまたは端末の読み取りおよび書き込みオペレーションに関するオブジェクト転送および変換を表している部分図である。
【図２】カードが１つのアプリケーションのみを有している本発明の１バージョンにおける、埋め込み式プラットフォーム内のソフトウェアエージェントに対するおよびこれらからの、ホストまたは端末の読み取りおよび書き込みオペレーションに関するオブジェクト転送および変換のより詳細な部分図である。
【図３】カードが多数のアプリケーションを組み込んでいる本発明の１バージョンにおける、埋め込み式プラットフォーム内のソフトウェアエージェントに対するおよびこれらからの、ホストまたは端末の読み取りおよび書き込みオペレーションに関するオブジェクト転送および変換を表した部分図である。
【図４】データストリームからの構造化ソフトウェアオブジェクトのデシリアライゼーションに関連するオブジェクトおよびエージェントを表した部分図である。
【図５】構造化ソフトウェアオブジェクトのデータストリームへのシリアライゼーションに関連するオブジェクトおよびエージェントを表した部分図である。
【図１】
2005519376.tif 000006
【図２】
2005519376.tif 000007
【図３】
2005519376.tif 000008
【図４】
2005519376.tif 000009
【図５】
2005519376.tif 000010
【国際調査報告】
2005519376.tif 000011
2005519376.tif 000012
2005519376.tif 000013