This-protocol-message = Request | Response Request = Request-Line ; 3.2節参照 [Request-Header] ; 3.4節参照 Object-Header ; 3.4節参照 CRLF [ Object-Body ] ; 3.5節参照 Response = Status-Line ; 3.3節参照 [Response-Header]; 3.4節参照 Object-Header ; 3.4節参照 CRLF [ Object-Body ] ; 3.5節参照
Request-Line = Method SP Handle SP Frame SP CATP-Version SP Request-Code SP Request-Phrase CRLF
(1) Method
メソッドはサーバへのリクエストを示すトークンである。メソッドは、大文字、小文字を区別し、拡張が可能である。
メソッドの詳細については、4章を参照。
Method = "GETHANDLE" | "RELEASEHANDLE" | "RELEASEFRAME" | "SEARCH" | "RETRIEVE" | "SCAN" | "INDEXLIST" | "INSERT" | "UPDATE" | "DELETE" | "SERVERPROCEDURECALL" | extension-method
ハンドルはサーバがクライアントを特定するためのキーとなるエレメントである。ハンドルは"GETHANDLE"メソッドを用いたリクエスト(GETHANDLEリクエストと呼ぶ)によりサーバから取得することができる。クライアントはハンドル確保後RELEASEHANDLEリクエストによりハンドルが解放されるまでハンドルの内容を変更してはならない。尚、ハンドルは一つのクライアントに対し複数生成することも可能である(GETHANDLEリクエストを複数発行可能である
Handle = 10CHAR
(3) Frame
フレームは同一のハンドルに対するリクエストに対し、サーバが生成する情報を識別するものである。ハンドルがクライアントで変更してはならないのに対し、フレームはクライアントで変更可能である。この場合、サーバは変更前のフレームとは別のフレームとして取り扱うべきである。
Frame = 3DIGIT
(4) CATP-Version
CATPバージョンは、リクエストで用いられるCATPのバージョンを示す。本プロトコルのCATPバージョンは、"CATP/1.0"を用いる。
CATP-Version = "CATP" "/" 1*DIGIT "." 1*DIGIT
(5) Request-Code
リクエストコードは、リクエストを表すコードである数字3桁の0を指定する。
Request-Code = "000" ; 数字3桁の0
(6) Request-Phrase
リクエストの説明句として、下記のトークンを指定する。
Request-Phrase = "REQUEST"
ステータスラインは、メソッドトークンではじまり、ハンドル、フレーム、プロトコールバージョンとそれに続く、数字のステータスコードとそれに関連した言葉からなっており、それぞれの要素はスペースで区切られている。最後のCRLF以外には、CRやLFを挿入してはならない。
Status-Line = Method SP Handle SP Frame SP CATP-Version SP Status-Code SP Reason-Phrase CRLF
(1) Method
メソッドはクライアントがリクエストラインに指定したメソッドと同じである(3.2 (1)参照)。
(2) Handle
ハンドルはステータスラインがGETHANDLEリクエストに対すものである場合、サーバで割り当てたハンドルを意味する。また、GETHANDLE以外のリクエストの場合はクライアントがリクエストラインに指定したハンドルと同じである。このフィールドのフォーマットは、リクエストラインのそれと同じである(3.2 (2)参照)。
(3) Frame
フレームはステータスラインがGETHANDLEリクエストに対すものである場合、サーバで割り当てたフレームを意味する。また、GETHANDLE以外のリクエストの場合は、クライアントがリクエストラインに指定したフレームと同じである。このフィールドのフォーマットは、リクエストラインのそれと同じである(3.2 (3)参照)。
(4) CATP-Version
CATPバージョンは、サーバで使用されるプロトコールのバージョンを指定する。このフィールドのフォーマットは、リクエストラインのそれと同じである(3.2 (4)参照)。クライアントがリクエストラインで指定したCATPバージョンが、サーバがサポートしているバージョンよりも古い場合、サーバはそのバージョンをサポートしていることが望まれる。その場合クライアント指定のCATPバージョンをステータスラインに指定する。
ステータスコードは、サーバがリクエストを理解し、それに答えようとした試みに対する結果を示す3桁の整数のコードである。
Status-Code = 3DIGIT
ステータスコードの最初の桁は、CATPのレスポンスのクラスを定義している。最後の2つの桁は、コードをカテゴリー化する役割は持たない。最初の桁には、下記の5つの値が存在する。
・ 1xx : 未定義 (将来の使用のために予約) ・ 2xx : 成功 リクエストされたアクションは適切に受理され処理された。 ・ 3xx : 警告成功 リクエストされたアクションは適切に受理され警告を伴って処理された。 クライアント(ユーザ)にて適切に対処する必要がある。 ・ 4xx : クライアントエラー リクエストに間違った構文があるか、または実行がもともと不可能である。 ・ 5xx : サーバエラー サーバはリクエストを遂行できなかった。
尚、下2桁の詳細はサーバの実装に依存する。
(6) Reason-Phrase
説明句は、ステータスコードへの短い説明を与えること意図したものである。ステータスコードは、コンピュータによる使用、説明句は人間による使用を意図して作成された。クライアントは、説明句の理由を解釈する必要はないし、それをユーザへ示さなくてもよい。
Reason-Phrase = text
ヘッダは一つ以上のフィールドから構成される。
Header = 1*Field Field = Tag ":" Value CRLF Tag = token Value = text
Request-Header = Header
詳細は4章の各リクエストのリクエストヘッダを参照。
Response-Header = Header
オブジェクトヘッダはオブジェクトボディ(Object- Body)の情報を記述するヘッダである。
Object-Header = Header Object-Header = Content-Length [Encoding]
(1) Content-Length
コンテントレングスはオブジェクトボディのサイズをオクテット単位で指定する。
Content-Length = "Content-Length" ":" 1*DIGIT CRLF ; 単位オクテット
(2) Encoding
エンコーディングはオブジェクトボディのエンコーディング方式を指定する。
Encoding = "Encoding" ":" ( "JIS7" | "ISO2022JP" | "GB" | "UTF8" | "UTF8E" | "GBK" )
ただし、本プロトコルバージョンではJIS7 のみをサポートする。
オブジェクトボディには単一レコードと複数レコードがある。オブジェクトボディの詳細は4章の各リクエスト/レスポンスを参照。
Object-Body = Record | Multi-record
(1) Record
単一のレコードを意味する。Recordの形式は各リクエスト並びにレスポンスにより異なる。
(2) Multi-record
複数のレコードを意味する。Multi-recordは各Recordをレコードデリミタで区切って使用する。
Multi-record = 1*(Record-delimiter Record) Close-delimiter Record-delimiter = "--" boundary CRLF Close-delimiter = "--" boundary "--" CRLF boundary = 0*69( bchar | SP ) bchar ; boundaryはMulti-record内で同一とする bchar = DIGIT | ALPHA | "'" | "(" | ")" | "+" | "_" | "," | "-" | "." | "/" | ":" | "=" | "?"
Recordの形式は各リクエスト並びにレスポンスにより異なる。
サーバが必要に応じて返送する診断メッセージは、オブジェクトボディに単一レコードとして設定される。
Diagnostic-record = Record Record = 1*Message Message = text CRLF