JPH04355855A - 汎用データストリーム・パーザ - Google Patents

汎用データストリーム・パーザ

Info

Publication number
JPH04355855A
JPH04355855A JP3327686A JP32768691A JPH04355855A JP H04355855 A JPH04355855 A JP H04355855A JP 3327686 A JP3327686 A JP 3327686A JP 32768691 A JP32768691 A JP 32768691A JP H04355855 A JPH04355855 A JP H04355855A
Authority
JP
Japan
Prior art keywords
data
item
group
descriptor
template
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
JP3327686A
Other languages
English (en)
Other versions
JPH0673118B2 (ja
Inventor
Iii Barron C Housel
バロン・コーネリアス・ハウゼル、ザ・サード
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
International Business Machines Corp
Original Assignee
International Business Machines Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by International Business Machines Corp filed Critical International Business Machines Corp
Publication of JPH04355855A publication Critical patent/JPH04355855A/ja
Publication of JPH0673118B2 publication Critical patent/JPH0673118B2/ja
Anticipated expiration legal-status Critical
Expired - Lifetime legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F40/00Handling natural language data
    • G06F40/10Text processing
    • G06F40/12Use of codes for handling textual entities
    • G06F40/149Adaptation of the text data for streaming purposes, e.g. Efficient XML Interchange [EXI] format
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F40/00Handling natural language data
    • G06F40/20Natural language analysis
    • G06F40/205Parsing
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L9/00Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
    • H04L9/40Network security protocols
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/42Syntactic analysis
    • G06F8/427Parsing
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L69/00Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
    • H04L69/06Notations for structuring of protocol data, e.g. abstract syntax notation one [ASN.1]

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Computational Linguistics (AREA)
  • General Health & Medical Sciences (AREA)
  • Health & Medical Sciences (AREA)
  • Audiology, Speech & Language Pathology (AREA)
  • Artificial Intelligence (AREA)
  • Software Systems (AREA)
  • Computer Security & Cryptography (AREA)
  • Multimedia (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Computer And Data Communications (AREA)
  • Communication Control (AREA)

Abstract

(57)【要約】本公報は電子出願前の出願データであるた
め要約のデータは記録されません。

Description

【発明の詳細な説明】
【0001】
【産業上の利用分野】本発明は、一般的にはデータ処理
分野に関し、そして詳細には、様々なデータフォーマッ
トを有するデータストリームの送信及び受信のためのア
ルゴリズム及び方法に関するものである。更に、本発明
は、そのようなデータストリームの送受を希望するアプ
リケーション・プログラムと汎用データストリーム・パ
ーザが与えるサービスとの間のインターフェースにも関
するものである。
【0002】
【従来の技術】多くの通信用ソフトウェア製品及びアプ
リケーションでは、複雑な自己定義型のデータストリー
ムをエンコード(構築)及びデコード(解釈)すること
が必要である。ネットワーク及びデバイス間通信におい
ては、データストリームのアーキテクチャとは、ある通
信ネットワークまたはデータチャンネルを介した送信及
び受信のため種々のデータ項目を組み立てるのに用いる
フォーマットのことを指すものである。このようなデー
タ・アーキテクチャには多くの種類がある。一般的には
、あるアプリケーション/プログラム/またはデータチ
ャンネルに入るかあるいはそれから出て来るデータのフ
ォーマットは、その特定のアプリケーション/プログラ
ム/またはそのデータチャンネルに接続したデバイスに
関連したデータのタイプに依存している。例えばシステ
ム・ネットワーク・アーキテクチャ(SNA)サービス
では、その各SNA製品、例えば分配サービス(SNA
/DS)、文書交換アーキテクチャ(DIA)、及び通
信・システム管理(CSM)には、異なったタイプのデ
ータ・アーキテクチャが関係している。また、そのSN
A製品には、その他にも多くの例がある。異なったサー
ビスに対して違ったタイプのデータ・アーキテクチャが
通常出て来ているが、その理由は、それらサービスの特
定の要件のためや、またそれら各種サービスの各々のた
めに送るべきバイト数を最小限にすると同時に将来にお
ける変更や付加のための柔軟性を与えるようにするため
である。
【0003】情報を送る必要がある時、送る対象となる
データ要素を、そのデータストリーム・アーキテクチャ
に適合した1つの線形シーケンスに組み立てなければな
らない。このプロセスをエンコードと呼ぶ。反対に、あ
るデータストリームが宛先に着いた時、そのデータスト
リームを分析し、それのデータ項目を抽出して関係する
アプリケーション又はソフトウェアで使用できるような
形式に変換しなければならない。このプロセスは、デコ
ードと呼ぶ。パージングという言葉は、それらエンコー
ド及びデコードを実現するのに必要なプロセスのことを
指すものである。勿論、異なるデータストリーム・アー
キテクチャにはそれぞれ異なるパージング論理が必要で
ある。現在、ソフトウェア開発者は、データ処理システ
ム又はノード内に個別のパージング手順を組み込んで、
通常遭遇する可能性のある異なるタイプのデータストリ
ームをエンコード及びデコードするようにしている。例
えば、それらデータストリーム(データ項目のタイプ及
びそれらの配列)は、典型的には、給与支払名簿ソフト
ウェア・アプリケーションに対するものは、磁気記憶媒
体(例えばハードディスク)に対するものと比べ全く異
なったものとなる。更に、それら個別のパージング手順
は、通常、あるアプリケーション(あるいはこれに類す
るもの)とのデータの渡しを、そのデータの受信と直列
に行うようになっている。これのためには、そのデータ
を適切に解釈するのに使うデータストリーム・フォーマ
ットをそれらアプリケーション等が知っていることが必
要である。
【0004】
【発明が解決しようとする課題】異なった種々のデータ
ストリーム・アーキテクチャを受け入れるために1つの
システム内に別個の多くのパージング手順を組み込むこ
とは、高価であり、しかもシステム資源の設計、保守、
及び消耗の面で非効率的である。従って、もし単一で汎
用のデータストリーム・パーザを設計できれば、有益で
あろう。更に、そうした場合、そのようなパーザとこれ
を使うアプリケーションとの間には、それらアプリケー
ションをこれらが使用中のデータストリーム・フォーマ
ットに関する詳細な情報を知らなくてはならないという
繁雑さから保護するために、あるインターフェース構造
が必要となる。
【0005】
【課題を解決するための手段】本発明は、データ処理シ
ステムで用いるための共通の汎用パーザ及びアプリケー
ション・プログラム・インターフェースである。そのシ
ステムは、データ通信チャンネルを備えた少なくとも1
つの処理ノードを含んでいる。パーザは、あるプログラ
ムからのデータをそのチャンネルに送るためにエンコー
ドし、また入って来たデータをあるアプリケーション・
プログラムに手渡すためにデコードする。そのチャンネ
ル上で入来するデータに対しては、パーザとそのプログ
ラムとの間のこの通信インスタンスを初期化する。この
初期化は、パーズテーブル内で定義したテンプレートに
対応したデータストリーム内の個々のデータ項目のフォ
ーマットを定義するパーズテーブル、を識別することを
含んでいる。また、この初期化は、その個々のデータ項
目に対しプライベートな記憶域割り当てることも含んで
いる。そして、そのようにした後、そのプログラムは、
パーザへのコールを発することによって、チャンネル上
でパーザが受け取ったデータの1テンプレート分のデー
タを要求する。そのコールは、パーザが用いるパーズテ
ーブルを識別するものである。これに応答して、パーザ
は、その識別したパーズテーブルに従ってその入来デー
タをデコードして、個々のデータ項目を抽出する。パー
ザは、それら個々のデータ項目をこれらの各々に割り当
てた上記プログラムのために記憶領域に記憶し、そして
次の組のデータ項目のためにコールされるまで、制御を
そのプログラムに転送する。
【0006】上述の概要によれば、本発明は、多くのタ
イプのデータストリームを都合よく共通にエンコード及
びデコードすることができる汎用のテーブル駆動式の方
法を開示するものである。パーズテーブルは、与えられ
たデータストリームの構造及びレイアウトを記述する。 アプリケーション・プログラムは、共通のパーザへのコ
ールを発し、そしてこのパーザは、パーザテーブルを用
いて出力データストリームのエンコード又は入力データ
ストリームのデコードを行い、そしてそのデータを、そ
の所望のデータストリームの対し生成したテーブルを用
いてそのアプリケーションへ渡すようにする。長さフィ
ールド、構文識別子(コードポイント)、区切り等のエ
ンティティーの構成及び解釈は、希望であれば、アプリ
ケーションから完全に隠すことができる。マッピング・
データ項目及びユーザ出口によって、設計者はアプリケ
ーションとパーザとの間で渡すデータ項目用のソース/
ターゲット・フォーマットを指定することができる。あ
るいはこの代わりとして、あるユーザ出口を指定して、
構成すべきまたは解釈すべき個々のデータ項目を処理す
るようにすることができる。
【0007】
【実施例】図1−7は、ある典型的なデータ処理システ
ムにおいて見ることのある、いくつかの異なったタイプ
のデータストリーム・フォーマットの例示的な例である
。これらデータストリームの1つの特徴は、これらが“
自己定義型”であるということである。即ち、それのデ
ータ項目のいくつかが、それ自体で当該データストリー
ムのフォーマットを定義する、というものである。例え
ば、そのデータストリームの要素は、1または2バイト
長のフィールド(“L”または“LL”)で始め、そし
てこの後に1または2バイトのコード即ちタイプ識別子
(“T”または“TT”)を続けて、後続の情報を唯一
に識別するようにすることができる。そして、そのよう
に識別した情報は、それ自身、自己定義型となって、ネ
スト状に繰り返すことがある。図1は、2バイト長(L
L)フィールドと、これに続く2バイトのタイプ識別フ
ィールド(TT)とによって構成した簡単なフォーマッ
トを示している。それのDATAフィールド内の情報は
、長さがLL−4の1つのデータ項目を形成する。 この例及び以下の例では、L及びTは、1バイトのフィ
ールドを示し、LL及びTT等は、2バイトのフィール
ド等を示している。図2は、埋め込みタイプのデータス
トリームを示しており、長さがLLでタイプがTTの項
目200全体は、埋め込み型の項目202、204及び
206を含んでいて、これら項目は、各々1バイト長で
、そしてタイプ値がA、B、Cでその順序で生起するよ
うになっている。図3は、この図2と類似のデータスト
リーム・フォーマットを示しているが、これでは、項目
タイプ“B”は、オプション性のもの、即ちこのアーキ
テクチャの任意の特定のデータストリームにおいて生起
してもしなくてもよいものである。その他のフォーマッ
トでは、タイプA、B、Cのようなデータ項目は、いか
なる順序で生起しても許されることがあるかもしれない
。図4では、それらの生起順序はA、B、Cである。 しかし、図5では、その生起順序はB、A、Cとなって
いる。また、ある種のデータストリームでは、ある種の
データ項目の繰り返しを許していることがある。これに
ついては図6に示してあり、これでは、タイプ“C”の
項目が連続して繰り返し生起している。また、図7に示
したフォーマットでは、その個々のデータ項目を長さバ
イトLLで記述しているが、1つのデータレコードの初
めと終りを、区切りLLAAと区切りLLZZによって
オフセットしている。ここでは、タイプAAの項目が1
つのレコードを始め、そしてタイプZZの項目がそのレ
コードを終了させるようになっている。以上のフォーマ
ットは、こなす必要のある多様なタイプのデータストリ
ーム・アーキテクチャのほんの数例にすぎない。従って
、その他の多種のタイプのフォーマットも、起こり得る
ものである。例えば、あるフォーマットでは、1つのデ
ータストリームの解釈が、このデータストリーム中で既
にデコードした項目の値に依存することになるかもしれ
ない。
【0008】これから説明する例示的実施例では、アプ
リケーションが1つのデータストリームのエンコード及
びデコードを行うための2つのフェーズ、即ち、初期化
フェーズと処理フェーズとがある。その初期化フェーズ
は、OPENコマンドと類似したものであって、その環
境をセットアップししかもアプリケーションとエンコー
ダまたはデコーダとの間の通信を確立するのに用いるも
のである。図8及び図9に示すように、エンコードでは
、エンコード用アプリケーション800が、802でG
DPEINITをコールし、デコードでは、デコード用
アプリケーション900が902でGDPDINITを
コールする。このエンコーダ及びデコーダは、本例示的
実施例内のいかなる資源も“所有”することはない。 例えば、作業用記憶域、I/Oバッファ、パーズテーブ
ル、また外部のチャンネルまたはデバイスに対しデータ
ストリームを読み書きするルーチンでさえも、その初期
化コールで、1組のパラメータ(RESOURCE−L
ISTと呼ぶ)として渡すようにしている。また、その
チャンネルは、ノード間のデータリンク、または同一プ
ロセッサ内のプログラム間の内部メモリを横切るデータ
リンクのように、いかなるタイプのものでもよい。資源
をそのエンコーダまたはデコーダに渡す他に、当該アプ
リケーションは、変数HANDLEを渡すが、この変数
は、上記初期化手順によって戻すようになっている。そ
の初期化手順は、作業用記憶域をフォーマットし、エン
コード及びデコード処理に必要な状態情報を初期化する
。この初期化手順がそのコール元に戻る前に、その手順
は、上記変数HANDLEにある値をセットする。この
HANDLE変数(ポインタ)は、当該アプリケーショ
ンと当該パーザとの連係を定義することになり、そして
エンコード(即ちGDPENCOD)またはデコード(
即ちGDPDECOD)のための全ての将来のコール時
にその変数を渡すようにしなくてはならない。一旦、初
期化が完了して当アプリケーションと当該エンコーダま
たはデコーダとの間の連係が確立し終わると、データス
トリーム処理を始めることができる。これをステップ8
04及び904に示す。エンコードまたはデコードすべ
きデータは、それぞれエンコード(ENCODE−RP
L)及びデコード(DECODE−RPL)用の要求パ
ラメータリスト内のパラメータによって識別するように
する。それらエンコードRPL及びデコードRPLを含
む個々のパラメータについては、後に詳述する。そのE
NCODE−RPLで参照する項目データをパーズテー
ブル共に使用することにより、エンコーダ804は、エ
ンコード形の出力データストリームを構築する。デコー
ドについては、デコーダは、DECODE−RPL内の
情報を戻し、これは、どの項目を入力データストリーム
から抽出し終わっておりそしてそれらをどこに記憶して
いるかについて、当アプリケーションに教える。このア
プリケーションは、データをエンコードするためにステ
ップ804でGDPENCODをコールし、そしてデー
タをデコードするためにステップ904でGDPDEC
ODをコールする。1つのデータストリーム全体を処理
するためには、このアプリケーションは、GDPENC
ODまたはGDPDECODを多数回コールすることも
ある。
【0009】与えられた任意のデータストリームについ
て、これをどのようにエンコード及びデコードするかを
パーザに教えるために、パーズテーブルを用いる。これ
らのパーズテーブルは、あるアプリケーションを設計す
る時に、図18に示すデータストリーム定義言語(DS
DL)を用いて、定義するようにする。しかしながら、
それらパーズテーブルを、別の適当な方法で定義しても
よい。そのDSDLは本発明の一部を成すものではない
ので、ここでは詳しく説明しない。
【0010】パーズテーブルは、図10に概略的に図示
した木構造を形成するように互いに連係させた1組のデ
ータ項目記述子から構成してある。1つのパーズテーブ
ルは、開始記述子1000で始まり、そして終了記述子
1002で終了するようになっている。その開始記述子
は、テンプレートのリスト(図10には図示せず)を指
し示すものである。そのテンプレートについては、後に
詳細に説明する。今のところでは、パーザとアプリケー
ションとの間のデータ項目のマッピング順序を指定する
のにテンプレートを用いる、ということを述べれば十分
であろう。1つのテンプレートは、例えば1データベー
ス・レコードのような1つのレコードと似ており、それ
は、処理に好都合なあるフォーマットに項目をグループ
化することを指定する。また、多数のテンプレートを単
一のデータストリームに対して定義して、コール元のプ
ログラムがそのデータストリームを“一度に1片”の割
で処理するのを可能にするようにすることができる。
【0011】また、上記の開始記述子は、最初の記述子
1004も指し、そしてこの最初の記述子1004は、
順序で次の記述子を指し、更に同様のことを繰り返し、
そして最後の記述子1014が終了記述子1002を指
すようになり、これでこのパーズテーブルが終了する。 一般的には、それら開始記述子と終了記述子との間で連
係させる記述子はどれも、項目記述子かグループ記述子
のいずれかとすることができる。各グループ記述子は、
多数の連係させた項目記述子及び/またはグループ記述
子を含むことができる。ボックス1006に示したグル
ープ記述子は、グループ記述子1007を含んでおり、
そしてこのグループ記述子1007は、当該グループの
ある論理部分を形成する一連の項目又はグループの記述
子1008−1010を含んでいる。明らかとなるよう
に、それらグループ記述子及び項目記述子は、ネスト化
することができる。
【0012】次に、グループ記述子及び項目記述子の構
造を図11、12に夫々示す。それら双方の記述子の最
初のバイトは、記述子タイプ(DT)、即ち、これがグ
ループ記述子であるか項目記述子であるかを示すものを
含んでいる。グループ記述子または項目記述子の2番目
のバイトは、識別子(ID)を含んでいる。例として、
IDフィールド内のゼロの値は、その項目またはグルー
プを識別していない、ということを示すことになる。ま
た、ある識別したグループとは、このグループがあるテ
ンプレートと関連があることを意味する。同様に、ある
識別した項目とは、このデータストリーム項目があるテ
ンプレート内で定義されたあるフィールドと関連がある
、ということを意味する。もしある項目が識別されてい
ない場合には、それをエンコード処理中において自動的
に構成し、そしてデコード処理中においてはアプリケー
ションに対し渡さないようにする。
【0013】グループ記述子(図11)では、それのF
IRSTフィールドは、当該グループの最初の子記述子
へのポインタ(項目記述子またはグループ記述子のいず
れか)である。また、そのNEXTフィールドは、当該
グループの次の兄弟記述子(即ち同一階層レベル)への
ポインタである。FLAGSフィールドは、この特定の
記述子に対し定義した多数の制御ビットから成る。例え
ば、ある1つのビットは、当該グループが必要されてい
るものかあるいはオプション性のものであるかを示す。 その他のビットは、長さチェックまたは反復チェックを
行うべきか、また当該グループの長さまたは有無を計算
するためにある式を評価すべきかを示す。また、グルー
プ特定フィールドは、上記DT値が指定する特定のグル
ープタイプとFLAGS制御ビットの設定値とに応じて
、生起したりしなかったりするフィールドである。例え
ば、グループを繰り返すためには、ある反復範囲を与え
るようにする。条件付き記述子に対しては、それらグル
ープ特定フィールドは、ある式記述子へのポインタを含
んでいて、その式記述子は、当該グループの生起がいつ
あるかないかを定める規準を与えるようになっている。
【0014】次に、項目記述子(図12)については、
それのNEXTは、当該パーズテーブル内の次の(項目
またはグループ)記述子へのポインタである。DSAは
、上記エンコーダまたはデコーダの実行の間一時的に項
目値をセーブする必要のあるパーズテーブルについて、
これらのための実行時動的記憶領域へのオフセット・ポ
インタである。それらのDSA値は、パーズテーブルの
組立の間に割り当てるようにする。実行時には、その動
的記憶領域内に、そのDSAフィールドが示すオフセッ
トにて値を記憶させるようにする。例えば、−1のDS
A値は、“空”値を示す。通常、データストリーム内で
生起する長さフィールドの計算のため、一時的な値をセ
ーブするようになっている。エンコード中は、そのDS
A値を使って、長さ値をどこに記憶させなくてはならな
いかを示すデータストリーム出力バッファへのオフセッ
トをセーブするようにする。デコード中は、そのDSA
値を使って、グループ構造または項目構造の長さを計算
するのに用いるものであるとデコードした項目値を、セ
ーブするようにする。
【0015】図13及び図14は、ある例示のパーズテ
ーブルの詳細例を示すものである。図13は、テンプレ
ートとグループと項目との関係を示している。A、D及
びJは、識別したグループであって、その各グループが
定義したテンプレートにも対応したものである。グルー
プDは、グループA内にネストしたものでいる。このグ
ループAは、項目Bと項目Cから成っているが、それは
、そのグループDが新たなテンプレートを開始させるか
らである。テンプレートDは、項目Fと項目Hとから成
っており、その項目Hは、グループD内にネストしたグ
ループG内に含まれているけれども、Dに含まれること
になる。この理由は、グループGが識別したものではな
いからである(“(G)”で表す)。グループJは、グ
ループAの兄弟であり、そしてまたテンプレートJにも
対応している。図14には、この図13のパーズテーブ
ルをより詳細に示す。図示のように、BDT及びEDT
として示した記述子タイプは、それぞれパーズテーブル
の開始記述子と終了記述子を定義している。記述子GD
Tは、グループ記述子である。同様に、IDTは、項目
記述子を示す。また、これとは異なるタイプの項目記述
子及びグループ記述子を指定することもできる。また、
計算すべき式を定義するための多くの雑記述子がある。 以下には、いずれのパーズテーブルにも現れるような、
異なる種々の項目記述子タイプ及びグループ記述子タイ
プの例示的リストについて、簡単な説明を行う。
【0016】GROUP  SEQ:  順次/非反復
グループ。このグループ記述子は、全ての従属インスタ
ンス(このグループの子記述子によって定義する)が、
それら子記述子で定義した順序で発生するようになった
、単一のグループ・インスタンスを規定するものである
。オプション性の非反復グループを規定するために、存
在規準を指定してもよい。オプション性グループとは、
その規準に依存してデータストリーム内で生起したりし
なかったりするものである。非反復グループの生起は、
ブール式または長さ式を評価したり、あるいは“LT”
接頭辞フィールドの有無を評価することによって、決め
ることができる。もしその存在試験が不合格となった時
(例えば、ブール式の評価がFALSEとなった時、ま
たは長さ式の計算でゼロまたは空となった時)には、そ
のグループのインスタンスが存在せず、従ってそのNE
XT記述子を取り出すようにする。その“LT”接頭辞
は、そのグループデータの前に1バイトまたは2バイト
の“長さ”フィールドが先行し、その後に1バイトまた
は2バイトの識別フィールド即ち“タイプ”フィールド
が続く、特別な場合である。この場合には、ルックアヘ
ッド試験が行って、当該データストリーム内の適当な場
所でその正確なタイプ値が発生しているかどうかを判別
する。
【0017】GROUP  REP:  反復グループ
。反復グループとは、データストリーム内に一連のグル
ープ・インスタンスが生起する可能性がある、というこ
とを意味する。この反復グループの各インスタンスは、
順次/非反復グループに対し記述した順次特性をもって
いる。このグループの最後のインスタンスの処理を完了
した時を指定するには、いくつかの方法がある。例えば
、このグループのインスタンスは、先に計算した長さ値
が尽きるまで、またはある式を評価してその結果がTR
UE状態となるまで、あるいはある式の評価がTRUE
状態となっている間、または固定したある回数だけ、生
起することができる。当該データストリーム内のそのグ
ループのインスタンスが生起していないという結果で、
その反復規準の評価が直ちに不合格となる場合がある。 従って、この反復規準は、存在規準としても機能する。
【0018】GROUP  SET:  1組のメンバ
・インスタンス。このグループタイプは、そのメンバ・
インスタンスがデータストリーム内で任意の順序(必ず
しもメンバ記述子が規定した順序である必要はない)で
生起してもよいことを指定するものである。1つのグル
ープセットのメンバ構成要素は、必須のものでもオプシ
ョン性のものでもよい。このグループセット記述子及び
その子供を何回か解釈して、そのグループ・インスタン
スの全メンバ・インスタンスを検出するようにすること
ができる。あるグループセット記述子のメンバ記述子は
、いかなるCONDITIONAL(条件付き)グルー
プ記述子または項目記述子(即ち、以下に定義するIT
EMLT−)とすることができる。あるメンバ・インス
タンスはインスタンス組の中のどこでも生起できるので
、条件付き規準を指定して、所与のインスタンスがいつ
生起するかしないかを判定しなくてはならない。
【0019】上記の反復グループと同様、何時全ての従
属メンバ・インスタンスの処理を完了したかを判定する
ために、いくつかの規準を規定することができる。例え
ば、もしそのグループ長を計算した場合、その長さが尽
きるまで処理を継続させ、また同様に、“while”
式または“until”式の評価によって終了を知らせ
るようにすることができる。最後に、そのグループ記述
子及びその従属物の走査の間に新たなインスタンスを検
出しなかった場合、そのグループ・インスタンスの処理
は、終了させる。
【0020】ITEMFLEN:  例えば1−255
バイトの間の固定長の項目。
【0021】ITEMVLEN:  例えば1−327
67バイトの間の可変長の項目。
【0022】ITEMUNIQ:  例えば1−255
バイトの間の唯一の定数値。この項目タイプは、自動的
にエンコーダによって挿入しデコーダによって除去する
コード・ポイントや接尾辞値のような定数、を規定する
のに用いることができる。
【0023】STREAM:  ストリーム項目。この
項目タイプによって、ファイルまたは文書のような無限
に長い項目を定義することが可能となる。
【0024】ITEMLT:  長さタイプ項目。この
記述子は、例えば1または2バイト長でその後に1また
は2バイトのタイプフィールド、その後にデータが続く
、自己定義型項目(即ちLT...)を指定する。この
ITEMLTによって規定したデータを、更にITEM
FLEN、ITEMUNIQ、ITEMVALENに関
して規定することができる。また、このITEMLTは
、このタイプのデータの共通使用による性能最適化のた
めに規定するものである。
【0025】上述のように、更に多くの種々の雑記述子
がある。これらの記述子タイプは、必要な式(データス
トリーム内でオプション性のグループまたは項目の存在
規準及び有効性のためのアサーションを指定したり、長
さを計算したり、また必要であればそのデータストリー
ム内でルックアヘッドをしたりするのに必要な式)を指
定するのに用いるものである。
【0026】TESTLKAH:  ルックアヘッド(
先読み)試験記述子であり、データストリーム内で+j
バイトの先読みを行わせ、そしてkバイト定数に対して
試験を行わせるものである。このルックアヘッドは、デ
ータストリーム内を先行して走査することにより行うが
、既に処理を終えた項目オカレンスをマークするのに使
うデータストリーム・カーソルの状態を変化させること
はない。これは、入力デバイスから更にデータを読み取
ることを要求することができる。
【0027】DELV:  デルタ計算記述子であり、
これは、データストリーム内で既に遭遇した値(例えば
長さフィールド)に、定数を加算または減算するデルタ
計算を行わせるものである。エンコード時には、定数を
データ長に加算することにより長さフィールドを計算す
る。デコード時には、デコードした長さフィールドから
定数を減算して(項目/グループ)構成要素オカレンス
の実際の長さを得る。この機能によって、同一のパーズ
テーブルをエンコード及びデコードに用いることができ
るようになっている。
【0028】エンコードでは、正確な長さフィールド値
を得るのにこの機能を用い、そしてデコードでは、長さ
フィールド及びデルタ値が与えられた時の正確な(グル
ープまたは項目)データ長を計算するのにこの機能を用
いる。
【0029】TESTBIT:  ビット試験記述子で
あり、データストリーム内の単一ビットの“テストアン
ダーマスク(test under mask)”を行
う。
【0030】BOOLOP:  ブール演算記述子であ
り、2つの式間の論理的なAND比較またはOR比較を
行う。これら種々の雑記述子の組み合わせを用いて、式
を指定するようにする。
【0031】RELOP:  比較演算記述子であり、
2つの式間の比較演算(即ち、EQ、LE、GE、LT
、NE)を行う。
【0032】LKAHFLD:  取出ルックアヘッド
・フィールド記述子であり、データストリーム内で現在
の位置からjバイトだけオフセットしたkバイトのフィ
ールド(即ち、デコードすべき次のバイト)を検索する
【0033】TESTUSER:  ユーザ試験記述子
であり、デコーダ要求パラメータ・リスト内で渡した3
2バイト・ビットマスクに対し試験を行う。
【0034】CONDEF:  定数定義記述子であり
、式評価で用いる数値またはストリング定数を規定する
【0035】ASSERT:  アサーション記述子で
あり、有効なデータをもつためには評価によってTRU
Eとならなければならない条件を規定する。エンコード
またはデコードしたデータに対して、どの程度までパー
ザが有効性チェックを行うべきかは、常に問題となるも
のである。ある場合には、アプリケーションがチェック
をより効率的に行うことができる。いずれの場合にして
も、データストリーム・タイプ毎に全ての起こり得る条
件(例えば、データ依存)を、自動的にチェックするこ
とは現実性がない。このアサーション記述子は、普通で
ない条件をチェックするという融通性を与えるものであ
る。この記述子は、他の記述子から式として参照されな
いが、グループまたは項目記述子の途中で発生すること
において、他の雑記述子とは異なっている。即ち、この
アサーション記述子は、項目またはグループ記述子のN
EXTポインタが参照し、また同様に、このアサーショ
ン記述子は、パーズテーブル階層内の次の記述子へのN
EXTポインタを含んでいる。アサーション記述子は、
2つの論理式、即ちVALIDF式とオプション性のW
HEN式とを参照する。更に、エラーコードも含んでい
る。このアサーション記述子をデコード処理中に取り出
した時、先ずそのWHEN式をこれがあるか否かについ
て評価する。この結果がTRUEであれば、次にそのV
ALIDIF式を評価する。もしこの結果がTRUEで
あれば、デコーダは、次の記述子を取り出すが、その他
の場合には、コール元のアプリケーションに対し制御を
その指定したエラーコードと共に戻す。また、ある場合
には、データストリームの内容によっては、このアサー
ションを適用すべきでない。従って、そのアサーション
条件(VALIDIF)を評価すべきか否か決めるため
に、WHEN式を設けている。もしこのWHEN記述子
がなければ、アサーションを常に評価する。
【0036】再び図14において、BDT1400記述
子は、テンプレート・リスト1402を指し、そしてこ
のテンプレート・リスト1402は個々のテンプレート
定義を指している。ここで、テンプレート・リストA、
D及びJに対応して3つのテンプレート1404、14
06及び1408を例示的にこのリストに含ませてある
。各テンプレート定義は、識別した1つのグループに対
応している。テンプレート1404(グループA)は、
GDT1410で定義したグループに対応する。GDT
1410のフィールド1412は、テンプレート・リス
ト1402内への対応するインデックスを含んでいる。 1414や1416のような1つのテンプレートの各エ
ントリは、識別した1つの同じグループ内に含まれてい
るか、あるいはその識別した(識別)グループ内にネス
トした識別していない(非識別)グループ内に含まれて
いる識別した項目に対応していて、これにより介在する
識別したグループがないようにしている。テンプレート
1404では、エントリ1414及び1416が、最初
のグループ記述子1410内に含まれた項目記述子(I
DT)1418(項目B)及び1420(項目C)に対
応している。このIDT自体、これが対応するテンプレ
ート内のエントリを識別するフィールド(例えば142
2)を含んでいる。例えば、IDT1418のフィール
ド1422は、テンプレート1404の最初のエントリ
Bを識別する“1”を含んでいる。この図示例では、G
DT1424は、GDT1410内にネストしてある。 それのフィールド1426は、テンプレートDを指して
いる。また、GDT1424は、2つの項目記述子14
28及び1430を有している。そのIDT1428の
テンプレート・フィールド・ポインタ1432は、当該
項目が識別されていないことを示す“0”を含んでおり
、従って、この項目記述子は、テンプレート内のフィー
ルドに対応していない。また、そのIDT1430のフ
ィールド・ポインタ1434は、テンプレート1406
の最初のフィールドFを指している。もしこのテンプレ
ートの一部分(即ち、幾つかの項目)が非識別の反復グ
ループ内に含まれている場合には、テンプレートのその
一部分は、データストリーム内の反復したオカレンスに
対応することもある。別の識別グループ内に(直接また
は間接的に)ネストしたある識別グループは、現テンプ
レートを終了させそして新たなテンプレートを開始させ
る境界として機能する。このように、テンプレート定義
は、その対応する識別グループの終わりで、あるいはそ
の最初のネストした識別グループで終了する。
【0037】上述のパーズテーブルの概念は、図13の
1300内に図示してあり、これは、その図14のテン
プレート、グループ及び項目の関係をより明確に示して
いる。ボックス1302、1304及び1306は、そ
れらの各グループ記述子1410、1424及び143
6に対するテンプレートA、D及びJに対応している。 Gは、どのテンプレートとも関連のないGDT1438
のことである。B及びCは、グループAの項目である。 Fは、グループDの項目である。Hは、グループGの項
目であり、K及びLは、グループJの項目である。テン
プレートAは、識別グループDが終了させるが、これは
項目B及びCを含んでいる。グループDが非識別のもの
であるとすると、テンプレートAは、項目B、C、F、
Hを含むことになる。テンプレートD(項目F、H)は
、非識別グループGに及び、そしてグループDの終端で
終了する。テンプレートJ(項目K、L)は、識別グル
ープJで始まり、そしてこのグループJの終端で終了す
る。
【0038】図15は、アプリケーション・プログラム
・インターフェース(API)によってアプリケーショ
ンとパーザとの間でデータ・オカレンスを受け渡すため
に規定したデータ構造を示す。このAPIの重要な部分
は、ルート・ポインタ・ベクトル(ROOTPVEC)
1506と、項目ベクトルITEMVEC1508と、
及び項目データ要素1510とから成る3レベルの階層
である。思い起こされるように、初期化手順へのコール
(即ち、GDPEINITまたはGDPDINIT)は
、資源リスト(RESOURCE−LIST)を受入れ
、そしてパラメータHANDLE(これは、GDPEN
CODまたはGDPDECODに対する全てのコール時
に渡さなければならない)を戻すようにする。この初期
化手順に対し渡すそのRESOURCE−LISTは、
パーザ作業領域のアドレス、パーズテーブル及び“ルー
トベクトル”(ROOTPVEC)1506を含んでい
る。その初期化手順は、パーザ作業領域1500内でパ
ーザ制御ブロック(PARSER CONTROL B
LOCK)1502を割り当て、そしてパーザテーブル
のアドレスとルートベクトルとをそのパーザ制御ブロッ
クにセーブする。ハンドル(HANDLE)は、パーザ
が必要とする全ての資源をアドレス可能にする。 このアプリケーション/パーザ・インターフェースの例
では、このHANDLEは、そのパーザ制御ブロックを
指している。また、そのルートベクトルは、パーズテー
ブル内で定義した各テンプレートに対するポインタを含
んでおり、そのTEMPLATE IDは、ルートベク
トル・ポインタ・アレイ1506へのインデックスとし
て定義する。また、それのREQTIDは、GDPEN
COD及びGDPDECODの要求パラメータ・リスト
内で渡して、アプリケーションとパーザとの間で渡すテ
ンプレート・インスタンスを識別するようにする。ルー
トベクトルの各エントリは、項目ベクトル(ITEMV
ECT1508)を指している。この項目ベクトルは、
その識別したテンプレートに対応したデータ項目に関す
る情報を含んでいる。各テンプレートに対するデータは
、1つの項目ベクトルを介してパーザに或いはパーザか
ら渡す。ITEMVECTの最初のエントリMAXIT
EMS1512は、当該項目ベクトルの要素の数を含み
、これは、当該テンプレート内の項目数と等しい。その
MAXITEMSは、あるテンプレート・インスタンス
をデコードし終えた時、デコーダによってセットするも
のである。GDPDECODからアプリケーションに制
御を戻した後、アプリケーションは、そのMAXITE
MSを用いて、その項目ベクトルを走査することができ
る。項目ベクトルは、テンプレート内で定義した各項目
に対して、1つのエントリを含んでいる。例えば、IT
EMVECT内の項目1に対応する1514は、FLA
GSフィールド、項目長フィールドFLDL、及びデー
タ項目1510の記憶領域(ここで、この項目のための
実際のデータストリームを、パーザがまたはパーザのた
めに記憶させる)へのポインタFLDPを含んでいる。 この開示の目的上、そのFLAGSは、シーケンス・フ
ィールド(SEQ)と、3つのフラグ、即ち空フラグ(
NULL)、アプリケーション指定長フラグ(ULEN
)、及び移動フラグ(MOVE)を含むものとする。そ
のシーケンス・フィールドについては、詳細な例におい
て説明する。エンコード中、そのNULLは、当該項目
についてエンコードする値がないことを示すため、アプ
リケーションがセットする。デコード中は、デコーダは
、データストリーム中に当該項目に関するインスタンス
を見い出さなかった場合に、そのビットをセットする。 また、そのULENフラグは、エンコード中にのみ用い
るものである。アプリケーションがこのフラグをセット
するのは、エンコードすべきデータにユーザが与えた長
さ(FLDL)をアプリケーションが用いることを望む
場合である。それ以外の場合には、エンコーダは、パー
ズテーブル内のテンプレート定義内で指定された値を用
いる。MOVEフラグは、デコード中でのみ用いる。ア
プリケーションがこのフラグをセットするのは、当該項
目のデコードしたインスタンスをデコーダがアプリケー
ション指定のデータ領域へ移動させるのを希望する場合
である。この場合、アプリケーションは、GDPDEC
ODをコールする前に、FLDPポインタもセットしな
くてはならない。MOVEがセットされていない場合、
デコーダは、そのFLDPをセットして、パーザ作業記
憶領域内のその項目データを指すようにする。
【0039】次に、図16中のAPP_ENCODEは
、図8を更に詳細に示したもので、これには、アプリケ
ーションがデータ項目を送信のためエンコードするのに
用いる例示的ステップを示してある。先ず最初に行うの
は、パーザの初期化である。これは、ステップ1602
で、初期化ルーチンGDPEINITをコールすること
によって行う。このコールに伴い、用いるパーズテーブ
ルと、パーザ作業領域と、ルートベクトルと、エンコー
ドしたデータストリームを送るべき先の出力デバイスと
、を識別するパラメータを渡す。GDPEINITは、
以後の全てのパージング・コール時に用いるHANDL
E(これは、このアプリケーション/パーズ・インスタ
ンスを識別する)を返す。パージングのための1つのレ
コードの発生は、ステップ1604から始まる。このス
テップで、アプリケーションは、エンコードするテンプ
レートまたはレコードのインスタンスに対して、テンプ
レート識別子をセットする。1606で、そのテンプレ
ート識別子を用いてルートベクトルをインデックスして
、そのレコードの項目データをエンコーダに渡すのに用
いるITEMVECT構造のアドレスをセットする。次
に1608で、空フラグを、ITEMVECT内におい
てたまたま空となるそのレコードの各項目に対しセット
する。このような空の項目は、例えば、一連のデータベ
ース・レコードを送信中でしかも1つのデータベース・
レコードに含まれた名前のミドル・イニシャル・フィー
ルドが空の時、起こり得るものである。また、各項目に
対して適切であれば、アプリケーションが1つの項目の
全長より短い長さを用いることができる場合には、ステ
ップ1610で、ITEMVECT内のその項目に対す
るULENフラグをセットする。このようにした場合、
その項目長を、アプリケーションがその項目用の長さフ
ィールドFLDL内にセットする。これ以外の場合には
、パーズテーブル内で指定した項目全長を、パーザが使
用する。データベース・レコードの伝送を例に取ると、
固定長データベース・レコードを送信している時、ある
アプリケーションは、ULENフラグをセットすること
によって1項目のデフォルト長を無視したいことがある
。このような場合、そのアプリケーションは、そのデー
タベース内で1つの名前に対し割り当てた全長ではなく
、それらデータベース・レコード内のある例えば名前の
実際の長さのみを送出するのを希望することができる。 いずれにせよ、そのレコードの項目に対するそれら値は
、1510で例示した記憶装置内に常駐していなくては
ならない。しかしながら、それら項目値は、互いに隣接
している必要はなく、そのアプリケーションにとって最
も自然な形態でメモリ全体に“分散”してもよい。最後
に、その項目データ・ポインタFLDPを、エンコード
すべき各項目に対してセットしなくてはならない(16
12)。
【0040】ある1つのレコードを実際にエンコードす
るには、GDPENCODをステップ1614でコール
する。そして、このコールと共に、ハンドル(HAND
LE)、テンプレート識別子(REQTID)、最終フ
ラグ(LASTFLAG)、及びリターンコード・パラ
メータ(RETURN_CODE)を渡す。そのLAS
TFLAGパラメータは、ある反復グループの最後のオ
カレンスであるかどうかを示すフラグであり、これは、
反復グループに対応していないテンプレートとっては無
意味である。このプロセスは、ステップ1616に概念
的に示したように、エンコードすべきレコードが残って
いる間はアプリケーションが望むペースで継続する。こ
のエンコードが完了すると、アプリケーション処理は、
ステップ1618を続行する。この処理は、例えば、パ
ーザの作業領域用に用いている記憶領域を解放するか、
あるいはその出力デバイスを閉鎖するものである。しか
し、これらの活動は、アプリケーションに特有のもので
あり、従って本実施例には関係のないものである。
【0041】テンプレート・オカレンスを渡すことがで
きる順序は、パーズテーブルが規定したグループ階層に
よって得られる。データは、このデータの構成要素が順
序非依存であると規定されていない限り、その階層順に
定義の順序で渡さなくてはならない。例えば図14では
、テンプレートA、D及びJのデータは、この順序でエ
ンコードする。多数のテンプレートをグループ−セット
(GROUP  SET)記述子内の識別グループが定
義する場合、パーズテーブルが順序に対する制限を課し
ていないので、いかなる順序でレコードをエンコードし
てもよい。
【0042】次に、図17は、図9をより詳細にしたも
ので、これには、入って来たデータストリームのデコー
ドに関連する例示的アプリケーション・ステップを示し
てある。ここでも、アプリケーションは、ステップ17
02で最初にGDPDINITをコールすることによっ
て、パーザを初期化する。次に、ステップ1704でル
ーチンGDPDECODをコールして、最初の入来レコ
ードを取り出す。そのGDPDECODがステップ17
05で制御を返す時、そのリターンコードが“パーズの
終端(END)”でない場合には、パーザは、その最初
レコードのいかなる入来データ項目も、項目記憶域15
10に記憶し終えたことになる。一方、もしそのデータ
ストリーム全体のパーズを完了した場合、GDPDEC
ODは、RETURN_CODEパラメータ内でパーズ
終了信号を戻す。このパーズ終了信号がないと仮定した
場合、そのデータを取り出すために、ステップ1706
は、その戻されたテンプレートID(識別子)を用いて
ROOTPVECをインデックスして、そのポインタを
正しいITEMVECT構造へと位置指定する。この時
、FLDPは、各項目に対する記憶データ1510を指
す。ステップ1708は、その記憶領域1510から各
項目を読むためのループをセットアップする。そのルー
プパラメータは、ITEMVECTの最初のエントリM
AXITEMSに含まれた値にセットする(尚、コール
元に戻る前に、デコーダはMAXITEMSをセットす
ることを思い出されたい。)。このMAXITEMS値
は、パーズテーブル内の各テンプレート記述子の一部と
して発生する。各項目に対して、ステップ1710で、
空フラグがセットされているか判定する。もしセットさ
れていれば、その項目を無視する。セットされていなけ
れば、ステップ1712及び1714でその項目を取り
出して適切な方法で処理し、そして次の項目のためにこ
のループを継続する。デコードした各項目について、そ
の項目データ長(FLDL)をデコーダがセットし、そ
してこれをアプリケーションがその項目データを取り出
すのに使う。既に述べたように、FLDPフィールドを
、MOVEフラグに依存してデコーダまたはアプリケー
ションがセットする。
【0043】一般に(例えば、多くのテンプレートを定
義している複雑なパーズテーブルでは)、アプリケーシ
ョンは、デコードすべき次のテンプレート・オカレンス
を予測できないことがあるが、この理由は、そのパーズ
テーブルが定義した構造及び副構造が、それらのデータ
・インスタンスにどんな順序で発生することも許してい
ることがあるからである。従って、このアプリケーショ
ンは、全てのルートポインタベクトル・エントリをセッ
トし、そして次のコール時に処理できるような起こり得
るテンプレートのいずれかに対応する項目ベクトルを初
期化しなくてはならない。デコーダへの1回のコールに
付き、1つのみのテンプレート・オカレンスをデコード
するようにすることができる。従って、1つの項目ベク
トルを割り当て、そしてそれを参照するように全ての関
連するルートベクトルポインタをセットすることが可能
である。また、アプリケーションは、FLAGSフィー
ルド内のいかなる関連する制御もセットしなくてはなら
ない。例えば、アプリケーションは、“移動”モードま
たは“位置指定(locate)”モードを選択するこ
とができる。
【0044】エンコード及びデコードを行うパーザ論理
について、その詳細な例で例示する。下の表1は、図1
3及び図14に示したパーズテーブルのサンプルをエン
コードした仕様である。これでは、ラベル(例えばBD
T1400)は、その記述子タイプ及び図14に示した
記述子への参照を示す。しかしながら、この図14には
、特定の項目及びグループのタイプ、存在規準、計算長
さ式を指定するのに必要な雑記述子等、完全なパーズテ
ーブルに必要な詳細が欠如している。これらの詳細は、
表1には入れてある。また、ある特定の項目またはグル
ープの記述子に関連した雑記述子は、それらのラベルの
最後の4文字としてその特定の記述子と同じ参照番号を
用いて示すことにする(例えば、CHK1410はGD
T1410に結びついたものである、等)。以下の説明
では、行番号を用いて特定の記述子を引用することにす
る。
【0045】                 表    1パーズ
テーブルの明細 1.BDT1400 BEGINDEF TLIST=
(A,D,J)2.A     .TEMPLATE(
B:BYTE(10),C:CHAR(6))3.D 
    .TEMPLATE(F:BYTE(2),H
:CHAR(50))4.J     .TEMPLA
TE(K:BYTE(20))5.GDT1410  
.GROUP SET,ID=A, OCCURS=(
WHILE,CHK1410)6.CHK1410  
. .TESTLKAH 2,TYP14107.TY
P1410  . .CONDEF(X’00A1’,
X’00A2’,X’00B1’,X’00B2’)8
.IDT1418  . .ITEMLT ID=B,
TYPE=X’00A1’,LENRNG=(4,10
),REQ=YES9.IDT1420  . .IT
EMLT ID=C,TYPE=X’00A2’,LE
NRNG=(2,6),REQ=NO10.GDT14
24  . .GROUP SEQ,ID=D,OCC
URS=(WHEN,CHK1424A),REQ=N
O11.CHK1424A . . . TESTLK
AH 2,CHK1424B12.CHK1424B 
. . . CONDEF(X’00B1’,X’00
B2’)13.IDT1428 . . . ITEM
FLEN LEN=214.IDT1434 . . 
. ITEMFLEN ID=F,LEN=215.G
DT1438 . . . GROUP SEQ,OC
CURS=(LENGTH,LEN1438),REQ
=NO16.LEN1438 . . . DELV 
IDT1428,417.IDT1442 . . .
 ITEMVLEN ID=H,LEN=LEN143
8,LENRNG=(4,50)18.     . 
. . ENDGROUP GDT143819.  
   . . ENDGROUP GDT142420
.     .ENDGROUP GDT141021
.IDT1446 . ITEMFLEN LEN=4
22.GDT1436 . GROUP REP,ID
=J,OCCURS=(LENGTH,IDT1446
),REPRNG=(0,1000),REQ=   
NO 23.IDT1450 . . ITEMFLEN L
EN=124.IDT1454 . . ITEMVL
EN ID=K,LEN=IDT1450,LENRN
G=(1,20)25.     . ENDGROU
P GDT143626.EDT1460 ENDDE
【0046】この階層構造は、1つのグループをGRO
UP/ENDGROUP文を突き合わせることによって
定義した、ネスト状グループとして表してある。上記の
ITEMLTは、図1に示したデータ構造を表している
。また、上記“TYPE”パラメータは、2バイトのタ
イプ値を供給し、そしてこのタイプ値は、ITEMLT
記述子タイプに対して定義したIDT構造の一部として
記憶する。
【0047】BEGINDEF文のテンプレート・リス
トは(A,D,J)を指定しているので、テンプレート
A、D及びJは、それぞれテンプレート識別子(TID
)1、2及び3をもつ。同様に、項目識別子(IID)
には、TEMPLATE文内でそれらの順序位置を割り
当てる。例えば、テンプレートAの項目B及びCにそれ
ぞれ項目識別子1及び2を割り当てている。これは図1
4と一致している。
【0048】図18においては、図13及び図14のパ
ーズテーブルと一致したあるデータストリーム・フォー
マットを示してある。このフォーマット内の1つの特定
のデータストリーム例について、最初にエンコード論理
、そして次にデコード論理を通してその跡を以下にたど
ることにする。尚、上記パーズテーブル内のグループ記
述子を明示的に識別するものは、そのデータストリーム
内にはないことを思い出されたい。最初の3つの自己記
述LLTT構造(IDT1418、IDT1420及び
(IDT1428、IDT1434、IDT1442)
で示している)は、GROUP SETを定義した1つ
のグループ1410のメンバとして規定しているので、
どのような順序で生起してもよい。更に、それら3つの
項目の内、IDT1418のみがこのデータストリーム
内で生起することが必要である(文8のREQ=YES
)。続いて、4バイトの長さフィールド(IDT144
6)が生起しなくてはならない。最後に、1つの反復シ
ーケンスの可変長バイト・ストリングが続き、これによ
って、各バイト・ストリングのオカレンスが、1バイト
の長さフィールド(IDT1450)とこれに続くその
長さの1つのバイト・ストリング(IDT1454)か
ら成るようにすることができる。これらIDT1450
及びIDT1454は、GDT1436に対応しており
、これは、表1では反復グループとして指定している。 このグループは、その反復範囲(表1の行22のREP
RNG)が最小のゼロを指定しているので、4バイト長
さフィールド(IDT1446)がゼロを含んでいる場
合にはオプション性のものである。
【0049】この図18に示した明示フィールドのエン
コードの間、GDPENCODを4回コールする。1回
はテンプレートA、他の1回はテンプレートD、そして
残りの2回は、テンプレートJの2回のオカレンスをエ
ンコードするためである。例示として、図19に示した
そのエンコードすべき対象のデータは、’Comput
ers’、X’00B2’、’SNA  Networ
ks’、’IEEE’、’ACM’であり、それは、デ
ータ構造中では次のように記述する。
【0050】 TEMPLATE  NAME  TID  ITEM
  IID  DATAA            1
    B        1    ’Comput
ers’             1    C  
      2D            2    
F        1    X’00B2’    
         2    H        2 
  ’SNA  Networks’J       
    3    K(1)   1   ’IEEE
’J           3    K(2)   
1   ’ACM’
【0051】ここで、初期化が完了
しており、また図15に描いた連係データ構造が確立さ
れている、と仮定する。ルートベクトル(ROOTPV
EC)は、3つのエントリ、即ち各テンプレートA、D
及びJに対して1つずつのエントリを含んでいる。例え
ば、ROOTPVEC(2)は、テンプレート2(別名
D)に対する項目ベクトルを参照する。これと同様に、
3つの項目ベクトルがある。1つの項目ベクトルの要素
は、図15においては、3つのフィールド、即ちFLA
GS、FLDL及びFLDPを含んでいるように示して
ある。そのFLAGSは、1バイトのシーケンス・フィ
ールド(FLAGS.SEQ)、空フラグ(FLAGS
.NULL)、ユーザ長フラグ(FLAGS.ULEN
)、及び“移動”フラグ(FLAGS.MOVE)から
成る構造を規定している。エンコード機能に対しては、
NULLフラグ及びULENフラグのみを用いる。その
項目に対するデータ値が空の場合(即ち、その項目につ
いてデータ・オカレンスをエンコードしない)、FLA
GS.NULLを“1”にセットする。コール元プログ
ラムがエンコード対象のデータ要素の長さを(FLDL
フィールドを介して)明示的に供給したい場合、FLA
GS.ULENを“1”にセットする。もしそのFLA
GS.ULENが“0”の場合、エンコーダは、パーズ
テーブル内のTEMPLATE文内で規定された一定の
長さ値を用いる(例えば、表1の文17の項目Hに対す
る長さ50)。 これは、各データ項目に対する項目記憶域1510が、
少なくともその大きさでなくてはならないこと、しかも
項目データ・タイプに依存して、アプリケーションによ
って適切なパッド文字が供給されること、を意味する。 通常、可変長データに対しては、コール元プログラムは
、項目長さ値を明示的に指定することになる。
【0052】FLAGS.ULENが“1”の場合には
、フィールドFLFDは、その項目オカレンスの長さに
セットする。
【0053】フィールドFLDPは、各項目要素に対し
てエンコードすべき対象の適切なデータ項目1510へ
のポインタを含んでいる。表記の便宜上、項目ベクトル
内のフィールド(例えばFLDL)は、それぞれのテン
プレート名で表すことにする。例えば、D.FLDL(
2)は、テンプレートDの2番目の項目(即ち“H”)
の長さフィールドを指す。
【0054】手順GDPENCODは、4つの入力パラ
メータ、即ちHANDLE、REQTID、LASTF
LAG及びRCをもっている。そのHANDLEは、G
DPEINITが生成し、そして制御情報、パーズテー
ブル、及びその他の資源を参照する。REQTIDは、
エンコード・ルーチンのいかなる所与のコール時におい
てもエンコードするようにコール元が要求しているテン
プレートの、要求テンプレート識別子(TID)を含ん
でいる。LASTFLAGは、ある反復グループの最後
のインスタンスの処理を完了した時を示す。RCは、こ
の手順の状態を戻すリターンコードである。
【0055】エンコード処理を説明するには、数個の変
数について説明する必要がある。 CURDES    現行記述子。この変数は、エンコ
ーダが試験している最中の現行の記述子を参照する。初
期には、CURDESは、BDT1400にセットする
【0056】 CURTID    現行テンプレート識別子。このパ
ラメータは、エンコーダが処理している最中のテンプレ
ートのテンプレート識別子を含んでいる。初期には、こ
の値は空である。
【0057】 STACK    グループの反復を取り扱う後入れ先
出し型スタックである。
【0058】 CURSOR    エンコードしたデータを書き込む
ための、データストリーム内で次に利用可能な位置を示
す、データストリーム・カーソルである。初期には、C
URSOR=1(即ち、出力ストリームの最初のバイト
)である。
【0059】以下のエンコード処理で発生するエンコー
ド化形データストリームは、図19に示してある。その
エンコード・ステップは、以下に示す通りである。
【0060】テンプレートAのエンコードパラメータ・
セットアップ及び手順コール:  最初に、テンプレー
トDに対する項目ベクトルをコール元が初期化する。 1.A.FLDP(1)をセットして、項目記述子Bの
データ要素(即ち、’Computers’)を参照す
るようにする。 2.A.FLAGS.ULENを’1’にセットして、
コール元がそのデータ長を供給している、ということを
示すようにする。 3.A.FLDL(1)を、項目Bのそのデータ要素の
長さ(即ち9)にセットする。 4.A.FLAGS.NULL(1)を’0’にセット
して、Bの項目オカレンスは空でないことを示す。 5.A.FLAGS.NULL(2)を’1’にセット
して、項目Cの値が空であることを示す。 6.REQTID=1をセットする(即ち、テンプレー
トAに対するTID)。 7.GDPENCOD(HANDLE,REQTID,
LASTFLAG,RC)をコールする。LASTFL
AGの値は、無関係である。
【0061】テンプレートAのエンコーダ処理1.CU
RDES=1400から開始し、エンコーダは、パーズ
テーブルを走査して、IDがREQTID(即ち1)に
等しいグループ記述子を捜す。そして、この記述子は、
CURDES=1400の時に発生し、これは、表1の
文5に対応している。この時点で、CURTIDをRE
QTIDにセットする。
【0062】 2.1つのエントリをSTACKに押し込んでそのグル
ープ記述子を表すようにし、そしてこのグループの最初
の項目で走査を続ける(即ち、図14のIDT1418
または表1の文8)。
【0063】 3.記述子1418(ITEMLT ID=B)を識別
する。
【0064】その次のステップは、この項目に対応する
図15内の項目ベクトル・エントリを分析することによ
り、(a)コール元が非空の値を供給したかどうか判定
し、そして(b)そのデータを取り出し、そしてこれを
当該項目記述子に応じてエンコードする。この場合、あ
る値が在る(即ち、’Computers’)。このI
TEMLT記述子は、2バイト長さフィールド(LL)
と2バイトの“タイプ”フィールド(TT)とを規定し
ているが、それは、そのTYPEパラメータが2バイト
の定数を供給しているからである。従って、13バイト
をそのデータストリームに出力し、そしてCURSOR
を増分して14にする。その最初の2バイト(LL)は
、X’000D’(13)を含んでいるが、これは、そ
の長さバイト及びタイプ・バイトを考慮に入れるため、
A.FLDL(1)(即ち、ソースデータの長さ)に4
を加算して計算したものである。それの第3バイト及び
第4バイトは、16進の’00A1’を含んでおり、こ
の値は、記述子IDT1418から取り出す。バイト5
−13は、’Computers’の文字ストリングを
含んでいる。
【0065】 4.IDT記述子1418を処理した後、エンコーダは
、次の記述子1420を取り出す。これはIDT記述子
であり、これもまた識別したものであるが、その対応す
る項目ベクトル空フラグ(即ち、A.FLAGS.NU
LL(2))は、入力値がないことを示す。これは、そ
の項目記述子が当該項目が必要なものでないことを示し
ているので、許容可能なものである。もしこの項目が必
要なものであったとしたならば、コール元にエラーを返
していたはずである。しかし、この場合では、次の記述
子を取り出し、そしてCURDES=1424とする。
【0066】 5.次の記述子1424は、現行のセット・グループ(
即ち、GDT1410)の1つのメンバを別のグループ
として定義するグループ記述子(GDT)である。これ
も識別したものである(ID=DまたはTID=2)。 これは、このグループが別のテンプレートを開始させ現
行のテンプレートを終了させることを意味する。
【0067】この時点で、処理を中断し、そして制御を
RC=0と共にコール元に返す。CURDESは142
4に留まっているが、現行テンプレートCURTIDは
空(0)にリセットする。このグループ記述子1424
は必要なものではないので(文10のREQ=NO)、
コール元は、次のコール時にテンプレートDをエンコー
ドすることを要求しなくてもよいが、しかしこの例では
、テンプレートDのエンコードを要求するものと仮定す
る。
【0068】テンプレートDをエンコードするためのア
プリケーション処理 パラメータ・セットアップ及び手順コール1.D.FL
AGS.NULL(1)=’0’、D.FLAGS.U
LEN(1)=’1’のセットを行う。 2.D.FLDL(1)=2及びD.FLDPのセット
を行って、そのデータ 16進’00B2’を参照する
。 3.D.FLAGS.NULL=’0’及びD.FLA
GS.ULEN(2)=’1’のセットを行う。 4.D.FLDL(2)=12及びD.FLDPのセッ
トを行って、そのデータ要素’SNA  networ
ks’を参照する。 5.REQTID=2(テンプレートDのTID)。 6.CALL  GDPENCOD(HANDLE,R
EQTID,LASTFLAG,RC)。
【0069】テンプレートDのエンコーダ処理1.CU
RDES1400から開始し、エンコーダは、パーズテ
ーブルを走査してREQTID(即ち2)に等しいID
のグループ記述子を捜す。これは、直ちにGDT142
4によって満足される。
【0070】 2.GDT1424をスタックに押し込み、そして最初
の子記述子、即ちIDT1428から走査を始める。
【0071】 3.IDT1428は識別したものではなく(即ち、表
1でID=0)、従ってその値を計算しなくてはならず
、それは、コール元からのデータとして渡していない。 この場合、このデータストリーム中のその次の2バイト
を16進数’0000’に初期化し、そしてCURSO
Rを2(これは、ITEMFLEN記述子(表1の文1
3)内でコード化した長さである)だけ増分させる。 このカーソル値は、エンコーダ作業領域内において、そ
の項目記述子(図12参照)のDSA(動的セーブ領域
)フィールドが指定したオフセットの所にセーブする。 これは、後で、長さ値を埋め戻すのに用いる。
【0072】次に、エンコーダは、その次の記述子ID
T1430を取り出す。 4.IDT1430は識別したものであり、そしてその
項目値16進’00B2’は、先に述べたようにテンプ
レートDに対する項目ベクトルを介して取り出す。その
値は、データストリームへ出し、そしてCURSORを
2だけ増分させる。
【0073】次の記述子、即ちGDT1438を取り出
す。 5.GDT1438は、表1内では識別しておらず(I
Dは、文15では省かれている)、従ってそれはスタッ
クし、そしてこのグループの最初のメンバ記述子IDT
1442から処理を開始する。
【0074】 6.項目Hのデータ参照及びデータ長は、テンプレート
Dに対する項目ベクトル(図15)の第2要素から取り
出し、そして項目Hに対するそのデータ要素をデータス
トリームに出す。即ち、D.FLDL(2)から始まる
データのD.FLDL(2)(12)バイトをデータス
トリームに移動させ、そしてCURSORを12だけ増
加させる。表1の文17のパラメータITEMVLEN
で述べている通りIDT1442は可変長記述子である
ので、追加の処理を行って、文17のLENパラメータ
が規定した長さフィールドに埋め戻しを行う。このLE
Nパラメータは、文16を参照している。この文16の
DELV記述子(LEN1438)の定数(4)をデー
タ長さに加えて、値16を得る。文16の参照IDT1
428は、この項目の長さフィールドを規定する記述子
を指している。項目IDT1428のデータストリーム
・カーソル位置を以前にセーブしたということを覚えて
いると思うが、エンコーダは、IDT1428中のDS
Aフィールドを用いて、データストリーム内にカーソル
位置14にて値16(16進’0010’)を記憶させ
る。
【0075】 7.次の記述子IDT1442を取り出し、その結果、
CURDES=1438となる。この記述子は、スタッ
クの最上部にあるもの(参照されたもの)でもあるので
、“グループ終了”であることを知らせる。1つのグル
ープの処理中、データストリームに出力したデータのそ
の蓄積した長さは、そのスタック内に保持している。 そのグループ終了が生起した時、もしそのグループが“
長さ限定型”の場合には、そのグループ長さを用いて長
さフィールドに埋め戻しを行う。文15のOCCURS
節でその“LENGTH”キーワードを指定しているの
で、GDT1438はその長さ限定形である。この処理
は、IDT1442に関して前述した処理に類似したも
のである。この単純な例では、そのグループGDT14
38の長さ指定は、可変長の項目IDT1442の長さ
指定と同一であり、従ってこのグループの長さは、1項
目しかないので、12である。それ故、上記と同じ結果
が生ずる、即ち、値16をカーソル位置14にて記憶さ
せる。そして、ここで、スタックをポップさせ、そして
GDT1438の次の記述子、即ちGDT1424から
走査を継続する。
【0076】 8.記述子1424が今ではスタックの最上部にあるの
で、グループ終了を知らせる。この必要なグループ終了
処理は、GDT1424が長さ限定形ではないので、最
小である。その最上部スタック・エントリの蓄積した長
さを以前のエントリに加算し、そしてそのスタックをポ
ップさせる。しかしながら、処理は直ちには継続しない
が、その理由は、その終了したグループのIDがコール
元のREQTIDと一致していて、現行テンプレートの
処理が完了していることを示しているからである。次に
、CURDESをGDT1424の次の記述子(即ち1
410)にセットし、CURTIDを空にセットし、そ
して制御をRC=0と共にコール元に戻して、テンプレ
ートDを首尾よくエンコードし終えたことを指示する。 テンプレートJのエンコーダ処理 パラメータ・セットアップ及び手順コール(最初のオカ
レンス) 1.J.FLAGS.NULL(1)=’0’及びJ.
FLAGS.ULEN(1)=’1’のセットを行う。 2.J.FLDL(1)=4(’IEEE’内の文字数
)。 3.データ要素’IEEE’を参照するように、J.F
LDP(1)をセットする。 4.項目Kが存在することを示すために、J.FLAG
S.NULL(1)=’0’とする。 5.REQTID=3(テンプレートJのTID)。 6.LASTFLAG=’0’(反復グループ1436
の最後のオカレンスではない)。 7.CALL  GDPENCOD(HANDLE,L
ASTFLAG,RC)。
【0077】テンプレートJ(最初のオカレンス)のア
プリケーション処理 1.テンプレートDのオカレンスを首尾よくエンコード
した後でコール元に戻った時、エンコーダはCURDE
S=1410及びCURTID=0の状態で出発したこ
とを思い出されたい。GDT1424をスタックからポ
ップさせて出したので、現在のスタック・エントリの最
上部はGDT1410を反映している。REQTID=
3でエンコーダに再び入った時、CURTIDが空(0
)でCURDESがそのスタックの最上部の要素と合致
しているので、そのスタックをポップさせ、そしてCU
RDESを次の記述子即ちIDT1446にセットする
【0078】 2.IDT1446は、非識別(固定長)項目である。 この場合の処理は、IDT1428の処理と似たもので
ある。データストリームの次の4バイトを16進’00
000000’に初期化し、CURSORを4だけ増分
させ、そしてカーソル値をある作業領域内に記述子ID
T1446内で指定したDSAオフセットの所でセーブ
する。そして、次の記述子GDT1436を取り出す。
【0079】 3.GDT1436は、GDPENCOD手順コールに
おいて渡したREQTIDと合致したID=J(TID
=3)を有している。従って、これを、処理するために
選択する。GDT1436は、文のOCCURS節で指
定した通りの、長さ限定形反復グループを指定している
。これは、そのグループの全てのオカレンスをエンコー
ドし終えた後、その長さフィールド(即ちこの例ではI
DT1446)を当該グループの(全オカレンスの)合
計バイト数にセットする、ということを意味している。
【0080】 4.GDT1436をスタックに押し込み、そしてその
最初の子記述子IDT1450から処理を続行する。
【0081】 5.他の非識別固定長フィールドと同様にこのIDT1
450を処理し、そしてIDT1454をIDT145
0の次ポインタを介して取り出す。
【0082】 6.IDT1450は識別したものであり(ID=Kま
たはIID=1)、従ってこの項目ベクトル内で参照し
たデータ要素(即ち、’IEEE’)を、前述のように
データストリームに出す。同様にして、その長さフィー
ルド(IDT1450)を、データストリーム内で、こ
の場合16進’04’に埋め戻す。続いて、次の記述子
GDT1436を取り出す。
【0083】 7.前述の場合と同じように、CURDES=1436
であり、そして記述子1436も、現在の(最上部の)
スタック要素として反映している。しかしながら、この
場合、グループが反復の最中であってそのLASTFL
AGがセットされていない(即ち2進’1’)ので、グ
ループ終了条件を起こさせていない。そして、スタック
はポップさせないが、制御をコール元に戻し、テンプレ
ートJの次のオカレンスに備える。
【0084】パラメータ・セットアップ及び手順コール
(第2のオカレンス) 1.J.FLDL(1)=3(’ACM’内の文字数)
2.データ要素’ACM’を参照するために、J.FL
DP(1)をセットする。 3.LASTFLAG=’1’(反復グループ1436
の最後のオカレンス)。 4.CALL  GDPENCOD(HANDLE,R
EQTID,LASTFLAG,RC)。 そのFLAGSフィールドは、最初のオカレンスの時の
設定値から無変化のままである。
【0085】 テンプレートJ(第2のオカレンス)のエンコーダ処理
1.エンコーダへ再び入る時、CURDES=1436
、CURTID=3、及びREQTID=3である。 テンプレートJのこの2回目(最後)のオカレンスを処
理するため、処理は、最初の子記述子(IDT1450
)から続行する。
【0086】 2.そのデータ要素が’IEEE’ではなく’ACM’
であるということ以外は、最初のオカレンスに対しステ
ップ5−6で説明した処理を繰り返す。
【0087】 3.ここで、CURDES=1436であり、記述子1
436は前に述べたようにスタックの最上部にある。し
かし、LASTFLAG=’1’なので、グループ終了
処理を行う。その長さフィールド(IDT1446)に
埋め戻しを行って蓄積値9にし、そしてスタックをポッ
プさせて、次の記述子(EDT1460)を取り出す。
【0088】 4.制御をコール元に戻す。しかし、CURDESが“
END”記述子を参照しているので、そのリターンコー
ド(RC)をセットして、このデータストリームのパー
ジングが完了したことを示す。
【0089】デコード論理 デコードでは、項目ベクトルのフィールドは、そのほと
んどの部分をデコーダによってセットし、そしてそのフ
ィールドを、1つのテンプレート・オカレンスのデコー
ドから制御が戻った後にコール元のプログラムが調べる
。もしデータストリーム中である項目についての何のオ
カレンスも見い出せない場合には、デコーダは、その項
目に関する空フラグ(FLAGS.NULL)をセット
する。もしそれ以外の場合には、デコーダは、FLDL
内でその項目長を返し、そしてFLAGS.MOVEの
設定値に依存して、デコーダ作業記憶領域に保持したそ
の項目データに対する参照を返すようにすることができ
る。このデコーダをコールする前に、コール元は、FL
AGS.MOVE=2進’1’のセットを行って、これ
により、デコーダがこれのバッファからコール元が指定
したデータ領域にその項目データを移動させるべきであ
ることを示す。この場合、そのアプリケーションは、そ
のFLDPフィールドもその目標データ領域を参照する
ようにセットしなくてはならない。もしFLAGS.M
OVE=’0’(2進)ならば、デコーダはFLDPを
セットして、これの作業記憶領域内のそのデータを参照
する。この場合、コール元は、制御が戻った後その項目
データを処理する必要がある。
【0090】デコーダが返すもう1つのフィールドは、
1バイトのシーケンス・フィールドFLAGS.SEQ
である。このフィールドは、項目をデコードした順序を
得るために用いるものであり、これは、テンプレート内
の(おそらく多くの項目の)非空の全項目を直ちに判別
するのに走査することができるリストとして役立つ。具
体的に説明するが、その項目ベクトルの最初の要素から
始めると、FLAGS.SEQ(J)は、そのテンプレ
ートのためにデコードしたJ番目の項目の項目番号を含
んでいる。例えば、もしあるテンプレートが30個の項
目を含んでおり、そして項目9、15、26及び6のみ
をこの順序でデコードしたとすると、FLAGS.SE
Q(1)、FLAGS.SEQ(2)、FLAGS.S
EQ(3)及びFLAGS.SEQ(4)は、それぞれ
9、15、26及び6の値を含むことになる。処理した
その項目数をデコーダが返すので、アプリケーションは
、2進’0’の空フラグを捜すためにその項目ベクトル
全体を走査する必要なく、それら非空項目に直ちにアク
セスすることができる。
【0091】GDPDECODへのコールは、次のよう
に行う。CALL  GDPDECOD(HANDLE
,REQTID,ITEMCOUNT,LASTFLA
G,RC,USERBITS)を行い、これにおいて、
HANDLEは、GDPDINITが発生し、そしてこ
のHANDLEは、制御情報、パーズテーブル及びその
他の資源を参照する。
【0092】REQTIDを返し、これは、デコードし
たオカレンスに対応したテンプレートを識別する、デコ
ーダが返してきたテンプレート識別子(TID)を含ん
でいる。
【0093】ITEMCOUNTを返し、これは、最後
のコール時にデコードした項目数を含んでいる。
【0094】ある1つの反復グループを処理する時、デ
コーダがLASTFLAGをセットする。ある反復グル
ープの最後のオカレンスを処理し終えた時、このフラグ
を’1’(TRUE)にセットし、その他の場合’0’
(FALSE)にセットする。
【0095】RCは、この手順の状態を返すリターンコ
ードである。その取り得る値は、OK、ERROR、D
ECODING_COMPLETEである。
【0096】USERBITSは、例示として32ビッ
ト(フルワード)のビットベクトルであり、これはパー
ズテーブル内でコード化したTESTUSER記述子を
介して試験することができる。本例では、この機能は用
いず、従って本例の中では“0”としてコード化してあ
る。
【0097】ここで、初期化を完了し(即ち、GDPD
INITへのコールによって)、またそのデータ構造を
図20に示すように確立した、と仮定する。図20にお
いて、そのFLAGSフィールドは、シーケンス・フィ
ールド(SEQ)と、そしてM(FLAGS.MOVE
)、N(FLAGS.NULL)、及びL(FLAGS
.ULEN)で表した数個のブール値と、から成ってい
る。
【0098】GDPDINITをコールし終わってHA
NDLEが返ってきた後、CURSORを初期化して入
力データストリームの最初のバイトを参照する。GDP
DECODへのコールのためには、移動モードを項目B
に対して要求する。その他の全項目は、位置指定モード
を用いる。ここで、それら項目ベクトル内の全FLAG
Sバイトが16進’00’に初期化されていると仮定す
る。従って、パラメータ・セットアップ及びコール・シ
ーケンスは、以下のようになる。 1.B.FLAGS.MOVE(1)=’1’;2.B
.FLDP(1)=項目Bの10バイト・データ領域へ
の参照 処理は、次のように行う。 1.CURSOR=GDT1410から始め、デコーダ
は、OCCURS式を評価して、このグループのオカレ
ンスがデータストリーム内に存在するかどうか判定する
。述部TESTLKAH(CHK1410)を評価する
ことにより、このデータストリーム内で2バイトのオフ
セットの所を先読みして、その次の2バイト(バイト3
:4)がその定数リスト(TYP1410)内の値のい
ずれかと合致するかどうか見る。バイト3:4が、その
リスト内の最初の定数である16進’00A1’を含ん
でいるので、この試験はTRUEを返す。このTEST
LKAH述部があると、CURSORを進めない。
【0099】 2.そのグループ記述子(GDT1410)をSTAC
Kに押し込む。このSTACKエントリの初期化中、そ
のグループの全ての子メンバを走査して、そのどれが必
要なものであり、またどれがオプション性のものか判別
する。1つの項目ビット・ベクトル(REQDITEM
)を構築して、そのスタック・エントリ内にセーブする
。この場合、3つのメンバ、即ちIDT1418、ID
T1420、及びGDT1424がある。しかし、その
最初のメンバIDT1418のみを、必要なものとして
コード化し、従って、構築したそのビット・ベクトルは
、2進’100’となり、そしてこれをスタック・エン
トリ内にセーブする。処理した項目ビット・ベクトル(
PROCITEM)は、全てゼロに初期化する(即ち、
2進’000’)。
【0100】 3.このグループは識別したものであるので(即ち、I
D=A)、1つのテンプレートの開始を見い出したこと
になる(TID=1)。テンプレートAはTID=1に
対応しているので、ROOTPVEC(1)が参照する
その項目ベクトルは、その現行の項目ベクトル(A)と
なる。次に、デコーダは、全てのFLAGS.NULL
を’1’に初期化する。
【0101】 4.次に、CURDESをこのグループの最初のメンバ
、即ちIDT1418にセットする。
【0102】 5.デコーダは、この記述子が長さ−タイプ記述子であ
って、2バイトの長さフィールドとこれに続く2バイト
のタイプ・フィールドとから構成されていること、を認
識する。
【0103】 6.次に、デコーダは、このデータストリームがその記
述子の定義と合っているかどうか判定する。このデータ
ストリーム内のそのタイプ・フィールド(バイト3:4
)は、記述子IDT1418内で指定したタイプ・フィ
ールドと一致している。
【0104】 7.その長さ値(即ち、16進’000D’)から4を
減算することによって、それのデータ長を求め、この結
果、データ長9を得る。
【0105】 8.デコーダは、バイト5:13からそのデータ値を抽
出し、そしてこれに関連する項目ベクトル値をセットア
ップする。具体的には、A.FLDL(1)=9、A.
FLAGS.NULL(1)=’0’とし、そして移動
モードがこの項目に対して有効なので、このデータスト
リーム内のバイト5:13を、A.FLDP(1)が参
照する場所へ移動させる。更に、A.SEQ(1)=1
とする。
【0106】 9.データストリーム・カーソルを、13(長さ、タイ
プ及びデータのフィールドに必要なバイト数)だけ増分
させる。更に、STACK内のアキュムレータに13を
加えて、処理した合計バイト数を記録する。
【0107】 10.PROCITEMビット・ベクトルを更新して、
このメンバ(当該グループの最初のメンバ)を処理し終
えたことを反映させるようにする。そのビット・ベクト
ルは、2進’100’に更新する。当該グループは、こ
れのメンバ・オカレンスがどんな順序で生起してもよい
セットなので、この項目が、たとえこれが必要なもので
あっても、このデータストリーム内で最初に生起しなか
った、ということになっていたかもしれない。必要とす
る項目のこの有効化は、このグループ・オカレンスの処
理が完了した時に、REQDITEMビット・ベクトル
とPROCITEMとを比較することによって行う。
【0108】 11.CURDESをIDT1420に(IDT141
8の次のポインタを介して)進める。IDT1420を
評価することにより、データストリーム内に一致するバ
イト・ストリングが在るかどうか判定する。ITEML
Tデコード論理は、このデータストリーム内でT(タイ
プ)フィールドが生起する所(バイト16:17)まで
先読みし、そしてその値を、ITEMLT記述子の一部
として発生したタイプ・フィールドに対して試験する。 この場合、バイト16:17が16進’00A2’では
なく16進’00B2’を含んでいるので、その試験は
不合格となる。従って、CURDESを、次の記述子G
DT1424(文10)に進める。
【0109】 12.デコーダは、GDT1424が識別したものであ
って、このグループが新たなテンプレート定義を始める
ことを示している、と気づく。これは、テンプレートA
のデコードを終了させ、従ってデコーダはコール元に戻
って、そのデコードした項目を処理するようにする。そ
のリターンパラメータREQTIDを現行のTID(即
ち、1)にセットし、ITEMCOUNTパラメータを
1にセットし、RC=0を返して、処理が成功したこと
を示す。CURDESはGDT1424に留り、またこ
れと同様に、他の状態情報を非解放の記憶領域にセーブ
し、これによって、デコータが再びコールされた時に処
理を適切に継続できるようにする。また、テンプレート
Aの処理が完了しても、グループGDT1410の処理
は未だ完了していないことに注意しなくてはならない。
【0110】コール元プログラムに戻ると、このプログ
ラムは、REQTIDによってその正確な項目ベクトル
にアクセスする。続いて、非空の項目値を処理する。結
果的には、GDPDECOD(HANDLE,REQT
ID,ITEMCOUNT,LASTFLAG,RC,
0)を再びコールして、第2のテンプレート・オカレン
スDのデコードを続けることになる。
【0111】 テンプレートD(第2のオカレンス)のデコード1.記
述子GDT1424から処理を続行する。データストリ
ームのバイト16:17が16進’00B2’を含んで
いるので、WHEN節がTRUE(真)であると評価す
る。GDT1424はセット・グループ(GDT141
0)の3番目のメンバ要素なので、GDT1424のP
ROCITEMベクトルを2進’101’に更新して、
このGDT1424のオカレンスを見い出したことを反
映させる。この記述子GTD1424は、スタックに押
し込み、(このグループが識別したものであるため)新
たな現行TIDを確立し、そしてCURDESをGDT
1424の最初の子(IDT1428)へと更新する。
【0112】 2.IDT1428を解釈し、そしてその値を、項目セ
ーブ領域内に、その項目記述子のDSAフィールドが指
定したオフセットの所にてセーブする。CURSORを
2だけ増分させ、そして次の記述子IDT1434を(
IDT1428のNEXT参照によって)取り出す。
【0113】 3.IDT1434を解釈し、そして、この項目は識別
したものであるので、これに関連する項目ベクトル要素
を更新して、その値(バイト16:17)を参照するよ
うにする。D.FLDP(1)を、そのデータ値を指す
ようにセットし(位置指定モードが有効)、D.SEQ
(1)=1、D.FLAGS.NULL(1)=’0’
、及びD.FLDL=2とする。CURSORを2だけ
増分し、そして次の記述子GDT1438を取り出す。
【0114】 4.長さ式(LEN1438)を評価し、そしてそれが
正であるか試験して、データストリーム内にこのグルー
プのオカレンスが在るかどうか判定する。これは、DE
LV記述子を解釈することから成っている。記述子ID
T1428に対してセーブした値(ステップ2)を取出
し、そしてこれを4だけ減分させて(即ち16−4)1
2を得る。このグループ長さは0より大きいので、更に
処理するためにそれを選択する。
【0115】 5.GDT1438をスタックに押し込み、そしてCU
RDESをそれの最初の子記述子(IDT1442)に
更新する。
【0116】 6.この可変長さ項目(IDT1442)を解釈する。 これのデータ長は、親グループ(GDT1438)につ
いて既に説明したのと全く同じ方法で判定する。これは
例外的であるが、ここでは本例を簡素化するために、こ
れが発生することとする。この時点で、CURSORは
18に等しくなっている。そのデータ長(即ち、10進
で12)を、それの指定した長さ範囲(4,50)と首
尾よくチェックし、そしてテンプレートDに対するその
項目ベクトルを更新する。具体的に示すと、D.FLA
GS.NULL(2)を2進’0’にセットし、D.F
LDP(2)を文字ストリング“SNA  Netwo
rk”を指すようにセットし、D.SEQ(2)を2(
10進)にセットし、D.FLDL(2)を12(10
進)にセットする。CURSORを12だけ増加し、そ
して次の記述子(GDT1438)を取り出す。
【0117】 7.GDT1438はSTACKの最上部にあり、これ
は、このグループに対する処理が完了していることを示
している。GDT1438は長さ限定グループなので、
チェックを行って、このグループのメンバに対し処理し
たバイト数が、所定のグループ長さ(即ち、16バイト
)に間違いなく等しくなるようにする。続いて、STA
CKをポップさせる。このグループは識別したものでは
ないので、次の記述子GDT1424から処理を続行す
る。
【0118】 8.GDT1424が今やSTACKの最上部にある。 このSTACKをポップさせ、そしてCURDESを次
の記述子(GDT1410)に進める。しかしながら、
GDT1424は識別したものであるので、リターンパ
ラメータをセットし、そして次の記述子を解釈する前に
制御をコール元に戻すようにする。具体的には、REQ
TID=2、ITEMCOUNT=2、RC=0にする
【0119】この時点で、コール元のアプリケーション
は、テンプレートDのその項目ベクトルを処理し、そし
て第3のテンプレート・オカレンス(J(1))をデコ
ードするために戻る。
【0120】 1.CURDES=GDT1410及びCURSOR=
30で処理を続行する。GDT1410はSTACKの
最上部にある。GDT1410はセット・グループであ
り、メンバ・オカレンスはどんな順序で生起してもよい
ので、上記グループ記述子による反復をもう1度要求す
ることがある。従って、WHILE式(CHK1410
)の評価を行い、そしてバイト32:33が記述子TY
P1410が指定したリスト内のどの値とも等しくない
ので、FALSE(偽)値が結果として生ずる。次に、
ベクトルPROCITEM及びベクトルREQDITE
Mを用いてチェックを行って、そのセットの必要な項目
全ての処理が完了したかどうか見る。この試験には合格
となり、従ってSTACkをポップさせて、次の記述子
(IDT1446)を処理のために取り出す。
【0121】 2.IDT1446を処理し、その結果、前述のように
その16進’000009’の値を項目セーブ領域にセ
ーブする。次に、CURSORを4だけ増分して、次の
記述子(GDT1436)を取り出す。
【0122】 3.GDT1436は反復グループである。この反復グ
ループ用の初期処理を実施し、そしてGDT1436を
STACKに押し込む。その初期化処理は以下のものを
含んでいる。 a)そのOCCURS節の評価。このグループは長さ限
定形なので、その長さ式(この場合既に処理した長さフ
ィールドへの単純な参照である)を評価する。その長さ
値(9)は、このグループに関してエンコードした全て
の反復オカレンスの累積長さを示す。 b)その評価した値はゼロより大きいので、GDT14
36をSTACKに押し込み、またそのグループ長さ(
9)をそのスタック・エントリにセーブする。このグル
ープは識別したものであるので、現行TIDをそのグル
ープID(即ち、3)にセットする。 c)STACK内の反復カウンタを1に初期化し、そし
てデータカウント・アキュムレータを0にセットする。 このグループは識別したものであるので、現行TIDを
その記述子ID(即ち、3)に更新する。CURDES
を、それの最初のメンバ記述子(IDT1450)にセ
ットする。
【0123】 4.IDT1450を解釈し、そしてその1バイト値(
4)を将来の参照のためにその項目セーブ領域にセーブ
する。CURSORを1増分して、次の記述子(IDT
1454)を取り出す。
【0124】 5.可変長項目記述子IDT1454を前述のように解
釈する。IDT1454は識別したものであるので、テ
ンプレートJ(3)内の項目K(1)に対する項目ベク
トルを更新して、その値(“IEEE”)をコール元に
返す。CURSORを4増分して、次の記述子(GDT
1436)を取り出す。
【0125】 6.GDT1436はSTACKの最上部にあり、これ
は、1つのオカレンスの処理が完了したことを示してい
る。各オカレンスをデコードした後の反復項目について
、終了規準を評価して、その最後のオカレンスを処理し
終えたかを判定する。この反復グループに対しては、デ
コードしたバイト数が、その反復グループの初期化中に
計算したグループ長に等しくなった時、処理が完了した
ことになる。この時点では、このグループの1回の反復
によって5バイトを処理したことになって、このグルー
プ内には4バイト残っていることになる。従って、LA
STFLAGを’0’(偽)にセットし、そして制御を
コール元に戻す。パラメータITEMCOUNTを1に
セットし、REQTIDに現行TID(即ち、3)を割
り当てる。
【0126】この時点で、コール元のアプリケーション
に戻って、テンプレートJ(1)のデコード済みオカレ
ンスを処理する。LASTFLAGがFALSE(偽)
なので、アプリケーションは結局GDPDECODに対
する別のコールを出して、第4のテンプレート・オカレ
ンス(J(2))をデコードするようにする。
【0127】 1.記述子IDT1450とIDT1454とを処理す
るステップは、前述のインスタンス(J(1))と同様
である。IDT1454の後、CURDES=1436
とする。
【0128】 2.前述の場合のように、反復グループ終了条件を計算
する。この時、しかしながら、蓄積した処理バイト・カ
ウント(9)が前もって計算したグループ長と等しいの
で、TRUE(真)値が得られる。従って、反復限度の
チェック等、必要な全ての終了グループ処理を行い、ス
タックをポップさせ、そしてLASTFLAGを’1’
(真)にセットする。CURDESが現在“終了記述子
”(EDT1460)を参照しているのを検出した時、
リターンコードを“DECODING_COMPLET
E”にセットし、そして制御をコール元に返す。
【0129】コール元は、テンプレートJの最後のオカ
レンスをデコードし終わり、従ってデコードが完了した
と判断する。
【0130】図21は、本発明を実施することができる
システムの一例である。この図には、別個のプロセッサ
2100及び2102を示してあり、これらは、そのシ
ステムの別々の場所に位置していてもいなくてもよい。 それらプロセッサは、通信チャンネル2104によって
接続してある。これらプロセッサは、いつでも実行でき
るある数のアプリケーション・プログラム、例えば21
06、2108及び2110、2112を含むことがで
きる。その一方のプロセッサ内のそれらアプリケーショ
ンの内のいくつかまたはその全てのものは、チャンネル
2104を介して、他方のプロセッサ内のアプリケーシ
ョン・プログラムと通信するようにすることができる。 このような通信は、双方のプロセッサ内の共通のパーザ
を介して行う。図示したように、それらパーザの各々は
、記述した本発明に従って、エンコード部2118、2
120とデコード部2122、2124とに分割してあ
る。プロセッサ2100内の2126のようなメモリ記
憶装置及びプロセッサ2102内の2128のようなメ
モリ記憶装置は、プロセッサ内のアプリケーション・プ
ログラムと各パーザとの間のAPIの一部を形成してい
る。本図示例では、このメモリは、図15に示したデー
タ構造を含んでおり、これは、そのチャンネル上のデー
タストリームの詳細の重負担からアプリケーションを大
いに解放し、従って各アプリケーションに好都合な方法
でアプリケーションとパーザとの間で容易にデータを渡
すことができるようになる。
【0131】
【発明の効果】本発明のアプリケーション・プログラム
・インターフェース(API)を用いれば、アプリケー
ション・プログラムは、フォートランにおけるフォート
ラン文のような高水準言語文を用いたプログラマと同様
の形式で、データをパーザに渡しまたパーザから受け取
ることができる。このAPIによって、各アプリケーシ
ョンをデータストリームの複雑さから遮蔽することがで
きる。長さフィールドの計算や自己定義型データストリ
ームに必要なコードポイントの挿入等の詳細は、パーザ
によって自動的に処理するようにする。また、このAP
Iによって、そのアプリケーションにとって最も好都合
なフォーマットで、パーザとのデータのやり取りが可能
となる。例えば、そのインターフェース・オプションに
よって、データをアプリケーションが指定し構成したデ
ータ領域に移動させたり、可変長さフィールドに空白を
詰めたり、指定した順番で各フィールドを(データスト
リーム中でのそれらの順序とは関係なく)呈示したりす
る、という特徴を得ることができる。エンコード・フェ
ーズの間ではエンコーダが自動的にフィールドを構築し
、デコード・フェーズの間ではデコーダがフィールドを
解釈し、そしてもしコール元のアプリケーションが必要
としないならそれらを破棄するようにする。また、パー
ザ内のアサーション機能によって、パーズのある段階で
生じなくてはならない有効状態について試験を行うこと
ができる。ネスト状構造及び反復構造に関する試験は、
次に使うべき記述子を決めるためにパーザにデータスト
リーム中を先読みさせる“ルックアヘッド”機能と同様
に、パーズテーブル内に組み込むことができる。また、
複雑な式をコード化して、フィールドの存在規準または
有効規準を指定するようにすることができる。
【図面の簡単な説明】
【図1】種々の例示的なデータストリーム・フォーマッ
トの1つを示す図であり、これは、実際に出くわす可能
性のある種々の異なったデータストリームの1例であっ
て、これに対し本発明を適用することができる。
【図2】種々の例示的なデータストリーム・フォーマッ
トの1つを示す図であり、これは、実際に出くわす可能
性のある種々の異なったデータストリームの1例であっ
て、これに対し本発明を適用することができる。
【図3】種々の例示的なデータストリーム・フォーマッ
トの1つを示す図であり、これは、実際に出くわす可能
性のある種々の異なったデータストリームの1例であっ
て、これに対し本発明を適用することができる。
【図4】種々の例示的なデータストリーム・フォーマッ
トの1つを示す図であり、これは、実際に出くわす可能
性のある種々の異なったデータストリームの1例であっ
て、これに対し本発明を適用することができる。
【図5】種々の例示的なデータストリーム・フォーマッ
トの1つを示す図であり、これは、実際に出くわす可能
性のある種々の異なったデータストリームの1例であっ
て、これに対し本発明を適用することができる。
【図6】種々の例示的なデータストリーム・フォーマッ
トの1つを示す図であり、これは、実際に出くわす可能
性のある種々の異なったデータストリームの1例であっ
て、これに対し本発明を適用することができる。
【図7】種々の例示的なデータストリーム・フォーマッ
トの1つを示す図であり、これは、実際に出くわす可能
性のある種々の異なったデータストリームの1例であっ
て、これに対し本発明を適用することができる。
【図8】アプリケーション・プログラムとデータストリ
ーム・エンコーダ・ルーチンとのインターフェースを概
括的に示す図。
【図9】アプリケーション・プログラムとデータストリ
ーム・デコーダ・ルーチンとのインターフェースを概括
的に示す図。
【図10】例示的なある1つのパーズテーブルを形成す
るグループ記述子及び項目記述子の論理的組織を示す図
であり、そのパーズテーブルが、パーザのエンコード用
ルーチン及びデコード用ルーチンに対し、ある特定のタ
イプのデータストリームを処理する方法を知らせるよう
になっている。
【図11】グループ記述子の例示的なレイアウトを示す
図。
【図12】項目記述子の例示的なレイアウトを示す図。
【図13】グループ記述子A,D,G,J及び関連する
項目記述子B,C,F,H及びKを含む1つのパーズテ
ーブルの概念的組織を示す図。
【図14】図13のパーズテーブルを更に詳細に示す図
【図15】そのパーザとアプリケーション・プログラム
との間のデータ・インターフェースを形成する例示的な
データ構造を示す図。このインターフェースは、部分的
に、使用中のある特定のデータストリームについて詳細
に知るという負担からアプリケーション・プログラムを
解放する。
【図16】図17と一緒になって、アプリケーション・
プログラムとそのパーザのエンコード用ルーチン及びデ
コード用ルーチンとの間のコール用インターフェースを
より詳細に示す図。
【図17】図16と一緒になって、アプリケーション・
プログラムとそのパーザのエンコード用ルーチン及びデ
コード用ルーチンとの間のコール用インターフェースを
より詳細に示す図。
【図18】図13及び図14のパーズテーブルに関連し
た本発明の動作を説明するのに使う例示的な1つのデー
タストリーム・フォーマットを示す図。
【図19】図18の総括的なデータストリームに関連す
る具体的なエンコード例を示す図。
【図20】図18の具体例に関連する図15のデータ構
造インターフェースをより詳細に示す図。
【図21】本発明を実施することができるシステムの1
例を示す図。
【符号の説明】
2100、2102    プロセッサ2104   
 通信チャンネル 2106、2108、2110、2112    アプ
リケーション・プログラム

Claims (10)

    【特許請求の範囲】
  1. 【請求項1】  データ通信チャンネルを有する少なく
    とも1つの処理ノードを含むデータ処理システムに用い
    るための、前記チャンネル上で入来するデータをパージ
    ングしそして前記ノード上で実行するプログラムに前記
    データを通信する方法であって、イ)  パーザと前記
    プログラムとの間のこの通信インスタンスを初期化し、
    この初期化が、パーズテーブル内で定義したテンプレー
    トに対応するデータストリーム内の個々のデータ項目の
    フォーマットを定義するそのパーズテーブルを識別する
    ことと、前記個々の項目に対しプライベートな記憶域を
    割り当てることとを含み、その後、ロ)  前記プログ
    ラムによって、前記パーズテーブルを識別するコールを
    前記パーザへ発することにより、前記チャンネル上で前
    記パーザが受け取ったデータの1テンプレート分を要求
    し、ハ)  前記パーザによって、前記識別したパーズ
    テーブルに従って前記入来データをデコードして、個々
    のデータ項目を抽出し、そしてニ)  該個々のデータ
    項目を、これらのそれぞれに割り当てた前記プログラム
    用の記憶領域に記憶させる、ステップから成る方法。
  2. 【請求項2】  請求項1の方法であって、前記チャン
    ネルに送るために前記プログラムからのデータをパージ
    ングするステップを更に含み、前記パージングは、前記
    プログラムによって、1テンプレート分のデータ項目を
    これらの各々に割り当てた記憶領域内に記憶し、前記パ
    ーズテーブルを識別するコールを前記パーザに発するこ
    と、を含んでいる方法。
  3. 【請求項3】  請求項1または2の方法であって、1
    つの前記パーズテーブルは、1つのデータストリーム内
    の個々のデータ項目の生起順序を定義する複数のデータ
    記述子を含んでいる、方法。
  4. 【請求項4】  請求項3の方法であって、前記データ
    記述子は、更に前記個々のデータ項目の長さを定義して
    いる、方法。
  5. 【請求項5】  請求項3の方法であって、前記データ
    ストリーム内の前記データ記述子及び情報は、更に前記
    個々のデータ項目の長さを定義している、方法。
  6. 【請求項6】  請求項1または2の方法であって、1
    つの前記プログラムと前記パーザとの間のインターフェ
    ースは、前記個々のデータ項目のための前記プライベー
    ト記憶域を前記パーズテーブルと組み合わさって指すデ
    ータ構造を含んでいる、方法。
  7. 【請求項7】  請求項3の方法であって、1つの前記
    プログラムと前記パーザとの間のインターフェースは、
    前記個々のデータ項目のための前記プライベート記憶域
    を前記パーズテーブルと組み合わさって指すデータ構造
    を含んでいる、方法。
  8. 【請求項8】  請求項7の方法であって、前記データ
    記述子はデータグループ記述子とデータ項目記述子とを
    含み、各グループ記述子は1つ以上の他のグループ記述
    子または項目記述子を含み、前記各グループ記述子は、
    該グループ記述子内に含まれている項目記述子が識別す
    るデータ項目の規定した特徴を記述するグループ記述子
    タイプ識別を含み、各前記項目記述子は、これが表すデ
    ータ項目の規定した特徴を記述する項目記述子タイプ識
    別を含んでいる、方法。
  9. 【請求項9】  請求項8の方法であって、前記データ
    構造は更に、前記グループ記述子の内の1つまたはそれ
    以上と個々に連係させた複数のテンプレートを含み、各
    前記テンプレートは、該グループ記述子に関連する前記
    データストリームの前記個々のデータ項目を記述する情
    報を含んでいる、方法。
  10. 【請求項10】  請求項9の方法であって、前記デー
    タ構造は更に、複数組の項目ベクトルを含み、各前記組
    は、1つのテンプレートと、プライベート記憶域内の複
    数の項目記憶場所とに関連している、方法。
JP3327686A 1991-03-22 1991-12-11 汎用データストリーム・パーザ Expired - Lifetime JPH0673118B2 (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US07/673,439 US5339421A (en) 1991-03-22 1991-03-22 General data stream parser for encoding and decoding data and program interface for same
US673439 1991-03-22

Publications (2)

Publication Number Publication Date
JPH04355855A true JPH04355855A (ja) 1992-12-09
JPH0673118B2 JPH0673118B2 (ja) 1994-09-14

Family

ID=24702658

Family Applications (1)

Application Number Title Priority Date Filing Date
JP3327686A Expired - Lifetime JPH0673118B2 (ja) 1991-03-22 1991-12-11 汎用データストリーム・パーザ

Country Status (3)

Country Link
US (1) US5339421A (ja)
EP (1) EP0505305A2 (ja)
JP (1) JPH0673118B2 (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2011129150A (ja) * 2003-06-12 2011-06-30 Reuters America ビジネスプロセスの自動化

Families Citing this family (66)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5474385A (en) * 1992-03-02 1995-12-12 Ta Instruments, Inc. Method and apparatus for parsed dynamic differential analysis
US5579467A (en) * 1992-05-27 1996-11-26 Apple Computer, Inc. Method and apparatus for formatting a communication
EP0739518A4 (en) * 1994-01-06 2001-04-25 Cfi Proservices Inc HOUSE BANKING SYSTEM
US5754855A (en) * 1994-04-21 1998-05-19 International Business Machines Corporation System and method for managing control flow of computer programs executing in a computer system
US5724572A (en) * 1994-11-18 1998-03-03 International Business Machines Corporation Method and apparatus for processing null terminated character strings
WO1997008616A1 (en) * 1995-08-29 1997-03-06 Bell Communications Research, Inc. System and method for parsing and building data signals
JP3208318B2 (ja) * 1996-03-06 2001-09-10 インターナショナル・ビジネス・マシーンズ・コーポレーション カードホルダ
US6039245A (en) 1996-06-10 2000-03-21 Diebold, Incorporated Financial transaction processing system and method
US7167924B1 (en) 1996-06-10 2007-01-23 Diebold, Incorporated Financial transaction processing system and method
US6275871B1 (en) * 1996-07-03 2001-08-14 Siemens Aktiengesellschaft Asynchronous transport optimizing observer-pattern-like system supporting several modes for an interface definition language-less communication subsystem
US5860088A (en) * 1996-12-06 1999-01-12 International Business Machines Corporation Method for extraction of a variable length record from fixed length sectors on a disk drive
US6047002A (en) * 1997-01-16 2000-04-04 Advanced Micro Devices, Inc. Communication traffic circle system and method for performing packet conversion and routing between different packet formats including an instruction field
US5946318A (en) * 1997-03-21 1999-08-31 International Business Machines Corporation Method and apparatus for processing and packetizing data from a data stream
US5896383A (en) * 1997-05-01 1999-04-20 Advanced Micro Devices, Inc. System and method for encoding instruction fields within data packets
JP3229240B2 (ja) * 1997-06-10 2001-11-19 インターナショナル・ビジネス・マシーンズ・コーポレーション メッセージ処理方法、メッセージ処理装置及びメッセージ処理を制御するプログラムを格納する記憶媒体
US6378126B2 (en) * 1998-09-29 2002-04-23 International Business Machines Corporation Compilation of embedded language statements in a source code program
US6292773B1 (en) 1999-06-28 2001-09-18 Avaya Technology Corp. Application-independent language module for language-independent applications
US6321190B1 (en) 1999-06-28 2001-11-20 Avaya Technologies Corp. Infrastructure for developing application-independent language modules for language-independent applications
US6976034B1 (en) 1999-10-28 2005-12-13 Lightwaves Systems, Inc. Method of transmitting data including a structured linear database
US6868419B1 (en) * 1999-10-28 2005-03-15 Lightwaves Systems Inc. Method of transmitting data including a structured linear database
US8085813B2 (en) * 1999-10-28 2011-12-27 Lightwaves Systems, Inc. Method for routing data packets using an IP address based on geo position
US9900734B2 (en) 1999-10-28 2018-02-20 Lightwaves Systems, Inc. Method for routing data packets using an IP address based on geo position
US7177940B1 (en) * 2000-04-24 2007-02-13 Microsoft Corporation Representing a service discovery stream as an N-ary tree
US6766368B1 (en) 2000-05-23 2004-07-20 Verizon Laboratories Inc. System and method for providing an internet-based correlation service
US6732153B1 (en) 2000-05-23 2004-05-04 Verizon Laboratories Inc. Unified message parser apparatus and system for real-time event correlation
US6941557B1 (en) * 2000-05-23 2005-09-06 Verizon Laboratories Inc. System and method for providing a global real-time advanced correlation environment architecture
US6934954B1 (en) * 2000-07-31 2005-08-23 Microsoft Corporation Flexible interface for controlling streaming data in passive streaming plug-ins
GB0023169D0 (en) * 2000-09-20 2000-11-01 Ibm Message parsing in message processing systems
US20020044655A1 (en) * 2000-10-18 2002-04-18 Applebaum David C. Information appliance and use of same in distributed productivity environments
US8766773B2 (en) 2001-03-20 2014-07-01 Lightwaves Systems, Inc. Ultra wideband radio frequency identification system, method, and apparatus
US7545868B2 (en) * 2001-03-20 2009-06-09 Lightwaves Systems, Inc. High bandwidth data transport system
US7096212B2 (en) * 2001-11-21 2006-08-22 Forhealth Technologies, Inc. Serial data capture and processing
CN1662880A (zh) * 2002-06-24 2005-08-31 皇家飞利浦电子股份有限公司 用于接收标记语言的数据和皮肤的接收设备
US7753085B2 (en) 2002-12-03 2010-07-13 Forhealth Technologies, Inc. Automated drug preparation apparatus including automated drug reconstitution
US10688021B2 (en) 2002-12-03 2020-06-23 Baxter Corporation Englewood Automated drug preparation apparatus including automated drug reconstitution
US7961705B2 (en) * 2003-04-30 2011-06-14 Lightwaves Systems, Inc. High bandwidth data transport system
US7880909B2 (en) * 2003-05-20 2011-02-01 Bukowski Mark A Extensible framework for parsing varying formats of print stream data
US20040268359A1 (en) * 2003-06-27 2004-12-30 Hanes David H. Computer-readable medium, method and computer system for processing input/output requests
DE10345526A1 (de) * 2003-09-30 2005-05-25 Océ Document Technologies GmbH Verfahren und System zum Erfassen von Daten aus maschinell lesbaren Dokumenten
US7325239B2 (en) * 2003-11-12 2008-01-29 International Business Machines Corporation Method and system of generically managing tables for network processors
WO2006069361A2 (en) 2004-12-22 2006-06-29 Intelligent Hospital Systems Ltd. Automated pharmacy admixture system (apas)
US7783383B2 (en) 2004-12-22 2010-08-24 Intelligent Hospital Systems Ltd. Automated pharmacy admixture system (APAS)
US7931859B2 (en) 2005-12-22 2011-04-26 Intelligent Hospital Systems Ltd. Ultraviolet sanitization in pharmacy environments
US8156233B2 (en) * 2007-04-06 2012-04-10 Cisco Technology, Inc. Streaming of templates and data records in individual streams using a multistream protocol
US8271138B2 (en) 2007-09-12 2012-09-18 Intelligent Hospital Systems Ltd. Gripper device
US7944978B2 (en) * 2007-10-29 2011-05-17 Lightwaves Systems, Inc. High bandwidth data transport system
US8225824B2 (en) 2007-11-16 2012-07-24 Intelligent Hospital Systems, Ltd. Method and apparatus for automated fluid transfer operations
US20100023924A1 (en) * 2008-07-23 2010-01-28 Microsoft Corporation Non-constant data encoding for table-driven systems
US8762969B2 (en) * 2008-08-07 2014-06-24 Microsoft Corporation Immutable parsing
US8554579B2 (en) 2008-10-13 2013-10-08 Fht, Inc. Management, reporting and benchmarking of medication preparation
KR101574603B1 (ko) * 2008-10-31 2015-12-04 삼성전자주식회사 컨디셔널 프로세싱 방법 및 장치
US8386070B2 (en) 2009-03-18 2013-02-26 Intelligent Hospital Systems, Ltd Automated pharmacy admixture system
US8854996B2 (en) * 2010-12-16 2014-10-07 International Business Machines Corporation Accelerating data packet parsing
SG11201501427PA (en) 2012-08-31 2015-03-30 Baxter Corp Englewood Medication requisition fulfillment system and method
EP3453377A1 (en) 2012-10-26 2019-03-13 Baxter Corporation Englewood Improved work station for medical dose preparation system
WO2014065871A2 (en) 2012-10-26 2014-05-01 Baxter Corporation Englewood Improved image acquisition for medical dose preparation system
CA2953392A1 (en) 2014-06-30 2016-01-07 Baxter Corporation Englewood Managed medical information exchange
US11107574B2 (en) 2014-09-30 2021-08-31 Baxter Corporation Englewood Management of medication preparation with formulary management
US11575673B2 (en) 2014-09-30 2023-02-07 Baxter Corporation Englewood Central user management in a distributed healthcare information management system
AU2015358483A1 (en) 2014-12-05 2017-06-15 Baxter Corporation Englewood Dose preparation data analytics
SG10202107686XA (en) 2015-03-03 2021-08-30 Baxter Corp Englewood Pharmacy workflow management with integrated alerts
US10783116B2 (en) * 2015-03-10 2020-09-22 Royal Bank Of Canada Systems and methods for managing data
US10108929B2 (en) * 2016-06-09 2018-10-23 Mastercard International Incorporated Systems and methods for generating a report from stream data
US11321049B2 (en) * 2017-05-04 2022-05-03 The Research Foundation For The State University Of New York Fast binary counters based on symmetric stacking and methods for same
US10241992B1 (en) 2018-04-27 2019-03-26 Open Text Sa Ulc Table item information extraction with continuous machine learning through local and global models
CN114337920B (zh) * 2021-12-23 2024-03-26 中国农业银行股份有限公司 编码解析方法、装置及电子设备

Family Cites Families (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS60218142A (ja) * 1984-04-13 1985-10-31 Hitachi Ltd デ−タの動的型変換方式
EP0350421A3 (en) * 1988-06-28 1991-12-04 International Business Machines Corporation Generalized data stream transform service
US5097533A (en) * 1988-11-29 1992-03-17 International Business Machines Corporation System and method for interfacing computer application programs written in different languages to a software system
US5016009A (en) * 1989-01-13 1991-05-14 Stac, Inc. Data compression apparatus and method
US5146221A (en) * 1989-01-13 1992-09-08 Stac, Inc. Data compression apparatus and method
NL8901827A (nl) * 1989-07-14 1991-02-01 Oce Nederland Bv Systeem voor het verwerken van in bestanden georganiseerde gegevens, alsmede beheersmodule ten gebruike daarin en opslagmedium, voorzien van de programmatuur van deze beheersmodule.
US5023610A (en) * 1990-06-13 1991-06-11 Cordell Manufacturing, Inc. Data compression method using textual substitution

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2011129150A (ja) * 2003-06-12 2011-06-30 Reuters America ビジネスプロセスの自動化

Also Published As

Publication number Publication date
US5339421A (en) 1994-08-16
JPH0673118B2 (ja) 1994-09-14
EP0505305A2 (en) 1992-09-23
EP0505305A3 (ja) 1995-01-18

Similar Documents

Publication Publication Date Title
JPH04355855A (ja) 汎用データストリーム・パーザ
US7590644B2 (en) Method and apparatus of streaming data transformation using code generator and translator
US6658625B1 (en) Apparatus and method for generic data conversion
US6061679A (en) Creating and searching a data structure ordered by ranges of key masks associated with the data structure
US7080094B2 (en) Hardware accelerated validating parser
US7287217B2 (en) Method and apparatus for processing markup language information
Barrett Occam 3 reference manual
US20020141449A1 (en) Parsing messages with multiple data formats
AU2003243169A1 (en) System and method for processing of xml documents represented as an event stream
JP2000099332A (ja) 遠隔手続き呼び出し最適化方法とこれを用いたプログラム実行方法
JPH03198154A (ja) 文字シーケンス検証方法及び装置
WO2005082102A2 (en) Method and apparatus of streaming data transformation using code generator and translator
US20070277164A1 (en) Searching computer programs that use different semantics
Sample et al. Snacc 1.1: A high performance ASN. 1 to C/C++ compiler
Baker A one-pass algorithm for overload resolution in Ada
JP3489216B2 (ja) ファイルシステム
Kearns Extending regular expressions with context operators and parse extraction
Pope Encoding CCITT X. 409 presentation transfer syntax
US20210224295A1 (en) Hierarchical data
JPH11272622A (ja) 並行分散処理システムおよびその方法
Yang On the look-ahead problem in lexical analysis
Schulthess et al. Anatomy of a small Pascal Compiler
Helfgott et al. Linear-time construction of optimal context trees
Horiuchi et al. EPER: Efficient Packed Encoding Rules for ASN.
CA2504491A1 (en) Hardware accelerated validating parser