従来クライアント/サーバ方式によるデータベースの検索・更新システムは"stateful"すなわちセッション指向のプロトコルの上に構築されていた。ところが最近のインターネットの主流はwebブラウザ/サーバで使用されているHTTP[1]のようにセッションの概念をもたない"stateless"なプロトコルである。本プロトコルはデータベースの検索・更新システムに対し、セッションに依存しないクライアントとサーバ間のメッセージ交換方式を規定するものであり、HTTPのような"stateless"なプロトコルの上に実装可能なようにデザインされている。また従来のセッション指向のプロトコルへの実装も可能なようにデザインされている。
本プロトコルによる通信は、リクエストとそれに対するレスポンスという枠組で行なわれる。リクエストを行なうプログラムをクライアントと呼び、それを受けとるプログラムをサーバと呼ぶ。本プロトコルの特徴は、クライアントとサーバ間でハンドルをやり取りする点にある。ハンドルとは、ハンドル確保のリクエストによりサーバよりクライアントに割り当てられるものであり、ハンドルを解放するまで有効なクライアント識別情報である。また、ハンドルにはフレームがバンドルしている。フレームは同一のハンドルに対し任意のリクエストの結果サーバに生成された情報を識別するものである。クライアントは複数のハンドルを取得可能である。また、同一のハンドルに対し複数のフレームを取得可能である。
ハンドルの実装例として、ハンドル確保のリクエストに対しサーバがクライアントに対応するユーザ情報等をバンドルすることが可能である。また、本プロトコルでは、少なくともフレームに、データベースの検索の結果生成される検索結果集合をバンドルさせることを規定している。これは、RETRIEVEメソッドやSCANメソッドのように検索結果集合を取り扱うメソッドを規定しているためである。
データベースを検索し、任意のデータベースレコードを更新する一連の処理を例に本プロトコルのメッセージ交換の概要を示す。本プロトコルにおけるリクエストは1つのリクエストライン、必要に応じて複数のヘッダフィールド/ボディ部内のレコードから構成される。また、レスポンスは1つのステータスライン、必要に応じて複数のヘッダフィールド/ボディ部内のレコードから構成される。
(1) クライアントはハンドル確保のリクエスト(GETHANDLEメソッドリクエスト)をサーバに送信する。サーバは本リクエストが妥当であれば当該クライアントに対しハンドルを割り当てレスポンスとして返送する。その際、ハンドルにバンドルするフレームとしてデフォルトのフレームを返送する。
(2) クライアントはハンドルの確保に成功した場合に次のリクエスト処理を行う。例えばデータベースの検索が必要になった場合、取得したハンドルとフレーム(または新たなフレーム)並びに検索条件式等をもとに検索リクエスト(SEARCHメソッドリクエスト)をサーバに送信する。サーバはリクエスト内のハンドルが妥当なものであれば、リクエストに基づきデータベースの検索を試み、検索結果をレスポンスとして返送する。その際、サーバは検索結果集合等をリクエストにより指定されたフレームにバンドルする。また、検索結果、該当するデータベースレコードを複数返送することも可能である。
(3) クライアントはデータベースにレコードの登録が必要になった場合、取得したハンドルと登録レコード等をもとに登録リクエスト(INSERTメソッドリクエスト)をサーバに送信する。サーバはリクエスト内のハンドルが妥当なものであれば、リクエストに基づきデータベースへのレコードの登録を試みる。その結果をレスポンスとしてクライアントに返送する。
(4) クライアントはサーバへのリクエストが不要になった場合、ハンドル解放のリクエスト(RELEASEHANDLEメソッドリクエスト)をサーバに送信する。サーバは本リクエストが妥当であればハンドル並びにハンドルにバンドルされた情報(フレーム等)を解放し、その結果をレスポンスとして返送する。
本プロトコルで使用している用語に対し特に説明が必要と思われる主な用語について記述する。
コネクション(connection)
通信の目的のために2者の間に仮想回線を開設すること。
リクエスト(request)
本プロトコルのリクエストメッセージ(3章、4章で定義されている)。
レスポンス(response)
本プロトコルのレスポンスメッセージ(3章、4章で定義されている)。
クライアント(client)
リクエストを送る目的でコネクションを確立するプログラム。
サーバー(server)
リクエストに対しレスポンスを返して答えるためにコネクションを受けつけるプログラム
メソッド
本プロトコルが提供するサービスで、リクエスト並びにレスポンスを種別する。
本プロトコルの内容は、拡張BNF記法を用いて記述されている。拡張BNF記法は、以下のような構造を持っている。
name = definition
ルールの名前(name)は、単に名前そのもので("<"や">"では囲まない)、その定義(definition)とは「=」で区切られる。スペースは、継続行のインデントが1行以上にわたるルールの定義を示すために使われる場合にのみ意味を持つ。いくつかの基本的なルールは、SP、TAB、CRCF、DIGIT、ALPHAなどの大文字で表現されている。角括弧("<"や">")は、その存在がルール名の使用を識別するのに役立つ場合には、定義の中で使用される。
"literal"
引用符で囲まれたテキストはリテラルテキストを意味する。特に記述されていなければ、テキストは大文字、小文字の区別をしない。
rule1 | rule2
("|")をはさむ要素は、選択可能なものである。例えば、"yes | no"は、yesとnoのどちらでもよいということを意味する。
(rule1 rule2)
括弧で囲まれた要素は、単一の要素として扱われる。即ち、"(elem (foo | bar) elem)"は、"elem foo elem"と"elem bar elem"というトークンの列を表現する。
*rule
"*"という文字は、繰り返しの要素の前に置かれる。上記の例の完全な表現形式は、"<n>*<m>element"で、最低<n>回と最大でも<m>回要素が出現することを示す。デフォルトの値は、0と無限であり、"*(element)"は、0も含めていかなる数の要素にも対応する。"1*element"は少なくとも1個の要素に対応し、"1*2element"は1つまたは2つの要素に対応する。
[rule]
箱括弧は、オプションの要素を示す。"[foo bar]"は、"*1(foo bar)"と同じである。
N rule
"<n>(element)"は繰り返しの特殊な形態であり、"<n>*<n>(element)"と同じである。これは、(element)が<n>回出現することを表す。2DIGITは、2桁の数字であり、3ALPHAは3つのアルファベット文字列である。
#rule
構造子"#"は、"*"と似た意味を持ち、要素のリストを定義するために定義されている。完全な表現形式は、"<N>#<M>ELEMENT"であり、1つ以上の(",")で区切られた少なくとも<N>最大でも<M>の要素を表す。区切りには、いくつかのスペースの列(LWS)が加わってもよい。この記法は、リストの通常の表現形態を非常に簡単にする。例えば、
"( *LWS ELEMENT *( *LWS "," *LWS ELEMENT ))"のようなルールは、"1#ELEMENT"として示すことができる。この構造子が使われる場合には、ヌル要素が許容されている。しかし、存在する要素の個数には数えられない。例えば、"(ELEMENT), , (ELEMENT)"は許されているが、2つの要素としてしか数えられない。このため、少なくとも1つの要素が要求されている場合には、最低1つのヌルでない要素が存在しなければならない。デフォルトの値は、0と無限であり、"#(ELEMENT)"は0を含めて如何なる数の要素のリストにもなりえる。"1#ELEMENT"は、少なくとも1つ以上の要素を表現し、"1#2ELEMENT"は1または2の要素を表現する。
; comment
ルールテキストの右側に置かれたセミコロンは、それ以降から行末までがコメントであることを示す。これは、仕様の規定に対して有用な注釈をつけるための簡便な方法である。
基本的な構文構造を記述するために、この仕様書では以下のようなルールが使用されている。
OCTET = <すべての8ビット文字>
CHAR = <すべてのASCII文字(octets 0 - 127)>
UPALPHA = <すべてのASCIIの大文字(AからZまで)>
LOALPHA = <すべてのASCIIの小文字("a"から"z"まで)>
ALPHA = UPALPHA | LOALPHA
DIGIT = <すべてのASCII数字("0"から"9"まで)>
CTL = <すべてのASCIIコントロール文字(octets 0 - 31)及びDEL(127)>
CR = <ASCII CR, キャリッジリターン(13)>
LF = <ASCII LF, ラインフィード(10)>
SP = <ASCII SP, スペース(32)>
HTAB = <ASCII HT, タブ(9)>
<"> = <ASCII ダブルクオータ>
CRLF = LF ; 本仕様書ではCRLFはLF一文字と定義
本プロトコルのヘッダーを複数の行に分割する場合には、継続行はスペースの並びで始まるようにしなければならない。連続したスペースは、意味的にはSPと同じ(改行による折り返しも含めて)である。
LWS = [CRLF] ( SP | HTAB )
多くの本プロトコルのヘッダーフィールドの値は、LWSまたは特殊文字により区切られる。これらの特殊文字をパラメーターの値として使用する場合には、引用符つきの文字列に入れておかなくてはならない。
word = token | quoted-string
token = 1*<CTLsまたはtspecialsを除くすべてのCHAR>
tspecials = "(" | ")" | "<" | ">" | "@" | "," | ";" | ":" | "\" | <"> | "/" | "[" | "]" | "?" | "=" | SP | HTAB
テキストの文字列は、ダブルクオータまたは角括弧を用いて引用されている場合には、1つの単語として取り扱われる。
quoted-string = ( <"> *(qdtext) <"> ) | ( "<" *(qatext) ">" )
qdtext = <<">とCTLsを除くすべてのCHAR、ただしLWSは含めるものとする>
qatext = <"<"、 ">"とCTLsを除く,すべてのCHAR、ただしLWSは含めるものとする>
以下のテキストルールは、記述的なフィールド内容に対してのみ用いられる。
text = <CTLsを除くすべてのOCTET、ただしLWSは含めるものとする>
本プロトコルのメッセージは、クライアントのリクエストとサーバのレスポンスからなっている。
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節参照
クライアントとサーバ間で転送されるのはOCTETs である。
リクエストライン(Request-Line)、リクエストヘッダ(Request-Header)、ステータスライン(Status-Line)、レスポンスヘッダ(Response-Header)、オブジェクトヘッダ(Object-Header)の記述コードはASCIIを使用する。
オブジェクトボディの記述コードはオブジェクトヘッダ中のEncodingフィールド(3.4.3参照)による。
リクエストラインは、メソッドトークンではじまり、ハンドル、フレームとプロトコールのバージョン、リクエストコード、リクエストフレーズが続き、CRLFで終わる。各要素は、スペースで区切られる。最後のCRLF以外には、CRやLFを挿入してはならない。
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
(2) Handle
ハンドルはサーバがクライアントを特定するためのキーとなるエレメントである。ハンドルは"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バージョンをステータスラインに指定する。
(5) Status-Code
ステータスコードは、サーバがリクエストを理解し、それに答えようとした試みに対する結果を示す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
詳細は4章の各レスポンスのレスポンスヘッダを参照。
オブジェクトヘッダはオブジェクトボディ(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” | “GBK” | “UTF8” )
オブジェクトボディには単一レコードと複数レコードがある。オブジェクトボディの詳細は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の形式は各リクエスト並びにレスポンスにより異なる。
(3) 診断メッセージ
サーバが必要に応じて返送する診断メッセージは、オブジェクトボディに単一レコードとして設定される。
Diagnostic-record = Record
Record = 1*Message
Message = text CRLF
本プロトコルで使用可能なメソッドについて記述する。尚、本文中のリクエストライン、ステータスライン、オブジェクトヘッダについては3章を参照。
GETHANDLEメソッドはクライアントがサーバに対しハンドルを要求するメソッドである。
Request-Line = Method SP Handle SP Frame SP CATP-Version SP
Request-Code SP Request-Phrase CRLF
(1) Method
Method = "GETHANDLE"
(2) Handle
ハンドルには10桁の任意の数字を指定する。但し、このハンドルの値はサーバにて参照されない。
(3) Frame
フレームには3桁の任意の数字を指定する。但し、このフレームの値はサーバにて参照されない。
(4) CATP-Version
クライアントがサポートしている最新のCATPバージョンを指定する。
(5) Request-Code
リクエストコードは、リクエストを表すコードである数字3桁の0を指定する。
Request-Code = "000" ; 数字3桁の0
(6) Request-Phrase
リクエストの説明句として、下記のトークンを指定する。
Request-Phrase = "REQUEST"
リクエストヘッダにはユーザの認証情報を記述する。
Request-Header = Authetication-info
(1) Authetication-info
クライアントに対するユーザの認証情報を指定する。
Authetication-info = "Authenticate" ":" Authenticate CRLF
Authenticate = text
(1) Content-Length
本メソッドはオブジェクトボディを必要としないため、Content-Lengthに0を指定する。
(2) Encoding
オブジェクトボディのエンコーディング方式を指定する。本メソッドでは省略しても良い。
本メソッドはオブジェクトボディを必要としない。
Status-Line = Method SP Handle SP Frame SP CATP-Version SP
Status-Code SP Reason-Phrase CRLF
(1) Method
メソッドはクライアントがリクエストラインに指定したメソッドと同じものを指定する。
(2) Handle
ステータスコードが成功を意味する場合、サーバで割り当てたハンドルを指定する。この場合、クライアントは以降のリクエスト(GETHANDLE以外)でこのハンドルをリクエストラインに指定する必要がある。ステータスコードが成功以外の場合、本値は意味を持たない。
(3) Frame
ステータスコードが成功を意味する場合、サーバで割り当てたフレームを指定する。
(4) CATP-Version
CATPバージョンは、サーバで使用されるプロトコールのバージョンを指定する。クライアントがリクエストラインで指定したCATPバージョンが、サーバがサポートしているバージョンよりも古い場合、サーバはそのバージョンをサポートしていることが望まれる。その場合クライアント指定のCATPバージョンをステータスラインに指定する。
(5) Status-CodeとReason-Phrase
サーバでのリクエストに対する処理結果を意味する。各コードの詳細並びにReason-Phraseはサーバの実装による。
(a) 2xx : 成功
本メソッドがサーバにおいて正常に処理されたことを意味する。この場合、ステータスラインのハンドル並びにフレームは有効であり、以降のリクエストで使用可能であることを意味する。
(b) 4xx : クライアントエラー
リクエストに間違った構文があるか、または実行がもともと不可能であることを意味する。この場合、ステータスラインのハンドル並びにフレームは無効であり、以降のリクエストで使用できないことを意味する。
(c) 5xx : サーバエラー
サーバはリクエストを遂行できなかったことを意味する。この場合、ステータスラインのハンドル並びにフレームは無効であり、以降のリクエストで使用できないことを意味する。
GetHandle-Response-Header = [Support-method-info]
(1) Support-method-info
サーバで実装している本プロトコルのメソッドを指定する。本フィールドが省略された場合、ステータスラインのCATPバージョンで示されるプロトコルバージョンのすべてのメソッドを実装していることを意味する。
Support-method-info = "Support-method" ":" Support-method CRLF
Support-method = 1#method ; methodは3.2(1)のMethod参照
(1) Content-Length
オブジェクトボディに診断メッセージが存在する場合、そのレングスを指定する。存在しない場合は0を指定する。
(2) Encoding
オブジェクトボディのエンコーディング方式を指定する。オブジェクトボディが存在しない場合は省略しても良い。
ステータスコードが正常以外の場合に診断メッセージを指定することができる。
RELEASEHANDLEメソッドはクライアントがサーバに対しハンドルの解放を要求するメソッドである。この要求によりハンドルにバンドルされている全てのフレームも解放される。
Request-Line = Method SP Handle SP Frame SP CATP-Version SP
Request-Code SP Request-Phrase CRLF
(1) Method
Method = "RELEASEHANDLE"
(2) Handle
開放を要求するハンドルを指定する。指定するハンドルはGETHANDLEリクエストによって取得したものでなければならない。
(3) Frame
フレームには3桁の任意の数字を指定する。但し、このフレームの値はサーバにて参照されない。
(4) CATP-Version
クライアントがサポートしている最新のCATPバージョンを指定する。
(5) Request-Code
リクエストコードは、リクエストを表すコードである数字3桁の0を指定する。
Request-Code = "000" ; 数字3桁の0
(6) Request-Phrase
リクエストの説明句として、下記のトークンを指定する。
Request-Phrase = "REQUEST"
本メソッドはリクエストヘッダを必要としない。
(1) Content-Length
本メソッドはオブジェクトボディを必要としないため、Content-Lengthに0を指定する。
(2) Encoding
オブジェクトボディのエンコーディング方式を指定する。本メソッドでは省略しても良い。
本メソッドはオブジェクトボディを必要としない。
Status-Line = Method SP Handle SP Frame SP CATP-Version SP
Status-Code SP Reason-Phrase CRLF
(1) Method
メソッドはクライアントがリクエストラインに指定したメソッドと同じものを指定する。
(2) Handle
ハンドルはクライアントがリクエストラインに指定したハンドルと同じものを指定する。
(3) Frame
フレームはクライアントがリクエストラインに指定したフレームと同じものを指定する。
(4) CATP-Version
CATPバージョンは、サーバで使用されるプロトコールのバージョンを指定する。クライアントがリクエストラインで指定したCATPバージョンが、サーバがサポートしているバージョンよりも古い場合、サーバはそのバージョンをサポートしていることが望まれる。その場合クライアント指定のCATPバージョンをステータスラインに指定する。
(5) Status-CodeとReason-Phrase
サーバでのリクエストに対する処理結果を意味する。各コードの詳細並びにReason-Phraseはサーバの実装による。
(a) 2xx : 成功
本メソッドがサーバにおいて正常に処理されたことを意味する。この場合、ステータスラインに指定されたハンドル並びにそれにバンドルされていたフレームが全て解放されたことを意味する。
(b) 4xx : クライアントエラー
リクエストに間違った構文があるか、または実行がもともと不可能であることを意味する。この場合、ステータスラインで指定されたハンドルは解放されていないことを意味する。
(c) 5xx : サーバエラー
サーバはリクエストを遂行できなかったことを意味する。この場合、ステータスラインで指定されたハンドルの状態は保証されない。
本メソッドはレスポンスヘッダを必要としない。
(1) Content-Length
オブジェクトボディに診断メッセージが存在する場合、そのレングスを指定する。存在しない場合は0を指定する。
(2) Encoding
オブジェクトボディのエンコーディング方式を指定する。オブジェクトボディが存在しない場合は省略しても良い。
ステータスコードが正常以外の場合に診断メッセージを指定することができる。
RELEASEFRAMEメソッドはクライアントがサーバに対しフレームの解放を要求するメソッドである。
Request-Line = Method SP Handle SP Frame SP CATP-Version SP
Request-Code SP Request-Phrase CRLF
(1) Method
Method = "RELEASEFRAME"
(2) Handle
開放を要求するフレームがバンドルしているハンドルを指定する。指定するハンドルはGETHANDLEリクエストによって取得したものでなければならない。
(3) Frame
開放を要求するフレームを指定する。
(4) CATP-Version
クライアントがサポートしている最新のCATPバージョンを指定する。
(5) Request-Code
リクエストコードは、リクエストを表すコードである数字3桁の0を指定する。
Request-Code = "000" ; 数字3桁の0
(6) Request-Phrase
リクエストの説明句として、下記のトークンを指定する。
Request-Phrase = "REQUEST"
本メソッドはリクエストヘッダを必要としない。
(1) Content-Length
本メソッドはオブジェクトボディを必要としないため、Content-Lengthに0を指定する。
(2) Encoding
オブジェクトボディのエンコーディング方式を指定する。本メソッドでは省略しても良い。
本メソッドはオブジェクトボディを必要としない。
Status-Line = Method SP Handle SP Frame SP CATP-Version SP
Status-Code SP Reason-Phrase CRLF
(1) Method
メソッドはクライアントがリクエストラインに指定したメソッドと同じものを指定する。
(2) Handle
ハンドルはクライアントがリクエストラインに指定したハンドルと同じものを指定する。
(3) Frame
フレームはクライアントがリクエストラインに指定したフレームと同じものを指定する。
(4) CATP-Version
CATPバージョンは、サーバで使用されるプロトコールのバージョンを指定する。クライアントがリクエストラインで指定したCATPバージョンが、サーバがサポートしているバージョンよりも古い場合、サーバはそのバージョンをサポートしていることが望まれる。その場合クライアント指定のCATPバージョンをステータスラインに指定する。
(5) Status-CodeとReason-Phrase
サーバでのリクエストに対する処理結果を意味する。各コードの詳細並びにReason-Phraseはサーバの実装による。
(a) 2xx : 成功
本メソッドがサーバにおいて正常に処理されたことを意味する。すなわち、ステータスラインに指定されたフレームが解放されたことを意味する。
(b) 4xx : クライアントエラー
リクエストに間違った構文があるか、実行がもともと不可能である、または存在しないフレームが指定されたことを意味する。この場合フレームは解放されていないことを意味する。
(c) 5xx : サーバエラー
サーバはリクエストを遂行できなかったことを意味する。この場合フレームが正しく解放されたかどうかは不明である。
本メソッドはレスポンスヘッダを必要としない。
(1) Content-Length
オブジェクトボディに診断メッセージが存在する場合、そのレングスを指定する。存在しない場合は0を指定する。
(2) Encoding
オブジェクトボディのエンコーディング方式を指定する。オブジェクトボディが存在しない場合は省略しても良い。
ステータスコードが正常以外の場合に診断メッセージを指定することができる。
クライアントがサーバにデータベースの検索を要求するメソッドである。サーバは、リクエストで指定された検索条件でデータベースを検索し、リクエストに応じた形式でデータベースレコードをレスポンスとして返す。また、リクエストラインに新しいフレームが指定された場合、サーバはそのフレームを新たに割り当て、検索の結果生成された検索結果集合等をバンドルする必要がある。
Request-Line = Method SP Handle SP Frame SP CATP-Version SP
Request-Code SP Request-Phrase CRLF
(1) Method
Method = "SEARCH"
(2) Handle
GETHANDLEリクエストによって取得したハンドルを指定する。
(3) Frame
本リクエストの結果生成される検索結果集合をバンドルするフレームを指定する。フレームはクライアントにおいてフレームの定義の範囲内で新たに指定することができる。この場合、サーバは指定されたハンドルの下にフレームを新たに割り当て、検索結果集合等をバンドルする必要がある。また、以前生成したフレームを指定してもよい(最初に割り当てられたフレームはGETHANDLEレスポンスで返される)。この場合、サーバは検索結果集合等をもとに指定されたフレームを更新する。
(4) CATP-Version
クライアントがサポートしている最新のCATPバージョンを指定する。
(5) Request-Code
リクエストコードは、リクエストを表すコードである数字3桁の0を指定する。
Request-Code = "000" ; 数字3桁の0
(6) Request-Phrase
リクエストの説明句として、下記のトークンを指定する。
Request-Phrase = "REQUEST"
Request-Header = Database-names
[Small-set-element-set-names]
[Medium-set-element-set-names]
[Small-set-upper-bound]
[Large-set-lower-bound]
[Medium-set-present-number]
(1) Database-names
検索対象のデータベース名を指定する。データベース名はリスト形式で複数指定可能である。
Database-names = "Database-names" ":" 1#Database-name CRLF
Database-name = token
(2) Small-set-element-set-names
データベースの検索の結果、ヒット件数がSmall-set-upper-bound((4)参照)の場合に取得したいデータベースレコードの編集形式を指定する。
Small-set-element-set-names = "Small-set-element-set-names" ":" Edit-type CRLF
Edit-type = 1DIGIT
尚、Edit-typeと編集形式の対応は、サーバの実装による。
(3) Medium-set-element-set-names
データベースの検索の結果、ヒット件数がSmall-set-upper-bound((4)参照)より大きく、かつLarge-set-lower-bound((5)参照)より小さい場合に取得したいデータベースレコードの編集形式を指定する。
Medium-set-element-set-names = "Medium-set-element-set-names" ":" Edit-type CRLF
Edit-type = 1DIGIT
尚、Edit-typeと編集形式の対応は、サーバの実装による。
(4) Small-set-upper-bound
データベースの検索の結果、ヒットしたデータベースレコードを全件取得する場合のヒット件数の上限値を指定する。クライアントが本値を指定した場合、サーバは本値とヒット件数を比較し”ヒット件数 <= 本値”の場合Small-set-element-set-namesで指定された形式のデータベースレコードを返す。
Small-set-upper-bound = "Small-set-upper-bound" ":" Value CRLF
Value = 1*DIGIT
(5) Large-set-lower-bound
データベースの検索の結果、ヒットしたデータベースレコードを1件も転送しないヒット件数の下限値を指定する。クライアントが本値を指定した場合、サーバは本値とヒット件数を比較し”ヒット件数 >= 本値”の場合データベースレコードを返送しない。
Large-set-lower-bound = "Large-set-lower-bound" ":" Value CRLF
Value = 1*DIGIT
(6) Medium-set-present-number
データベースの検索の結果、ヒット件数が”Small-set-upper-bound < ヒット件数 < Large-set-lower-bound”の場合に転送するデータベースのレコード件数を指定する。
Medium-set-present-number = "Medium-set-present-number" ":" Value CRLF
Value = 1*DIGIT
(1) Content-Length
オブジェクトボディのレングスを指定する。
(2) Encoding
オブジェクトボディのエンコーディング方式を指定する。
オブジェクトボディには検索条件式を単一レコードで指定する。検索条件式は、RPN(逆ポーランド記法)を用いる。
Object-Body = Record ; 単一レコード
Record = RPN-Query
RPN-Query = Argument | <Argument + Argument + Operator> ; "+"は後続を意味する
Argument = Operand | RPN-Query
Operand = Tag "=" Value
Tag = token ; データベースのフィールドタグ
Value = <"> text <"> ; text内の<">は<\><">と記述
operator = AND | OR | AND-NOT
Status-Line = Method SP Handle SP Frame SP CATP-Version SP
Status-Code SP Reason-Phrase CRLF
(1) Method
メソッドはクライアントがリクエストラインに指定したメソッドと同じものを指定する。
(2) Handle
ハンドルはクライアントがリクエストラインに指定したハンドルと同じものを指定する。
(3) Frame
フレームはクライアントがリクエストラインに指定したフレームと同じものを指定する。
(4) CATP-Version
CATPバージョンは、サーバで使用されるプロトコールのバージョンを指定する。クライアントがリクエストラインで指定したCATPバージョンが、サーバがサポートしているバージョンよりも古い場合、サーバはそのバージョンをサポートしていることが望まれる。その場合クライアント指定のCATPバージョンをステータスラインに指定する。
(5) Status-CodeとReason-Phrase
サーバでのリクエストに対する処理結果を意味する。各コードの詳細並びにReason-Phraseはサーバの実装による。
(a) 2xx : 成功
本メソッドがサーバにおいて正常に処理されたことを意味する。すなわち、サーバは検索結果集合等を生成し、リクエストラインで指定されたフレームにバンドルしたことを意味する。
(b) 4xx : クライアントエラー
リクエストに間違った構文があるか、実行がもともと不可能である。
(c) 5xx : サーバエラー
サーバはリクエストを遂行できなかったことを意味する。
Response-Header = Database-names
Result-count
Number-of-records-returned
Next-result-set-position
(1) Database-names
検索の結果ヒットしたデータベース名を指定する。データベース名はリスト形式で複数指定可能である。
Database-names = "Database-names" ":" 1#Database-name CRLF
Database-name = token
(2) Result-count
データベース検索の結果ヒットしたデータベースレコード数を指定する。
Result-count = "Result-count" ":" 1*DIGIT CRLF
(3) Number-of-records-returned
オブジェクトボディ(Object-Body)に設定されたレコード数を指定する。
Number-of-records-returned = "Number-of-records-returned" ":" 1*DIGIT CRLF
(4) Next-result-set-position
検索結果集合内の次のポインタを指定する。クライアントは、続きのデータベースレコードを取得したい場合RETRIVEメソッドに本ポインタを指定することができる。
Next-result-set-position = "Next-result-set-position" ":" 1*DIGIT CRLF
(1) Content-Length
オブジェクトボディのレングスを指定する。
(2) Encoding
オブジェクトボディのエンコーディング方式を指定する。オブジェクトボディが存在しない場合は省略しても良い。
オブジェクトボディには検索の結果、該当するデータベースレコードまたは診断レコードを設定する。データベースレコードの場合、その形式並びに設定されるレコード件数はRequest-Headerの各フィールドの指定に従う。また、複数レコードをオブジェクトボディに設定する場合は"multi-part"タイプ(3.5節参照)の処理方式に従う。
尚、下記の場合はオブジェクトボディ部にデータベースレコードは設定されない。
・ Status-Codeが成功以外を示す場合
・ Result-countが0の場合
・ Request-Headerの各フィールドの解析の結果、転送レコード数が0になる場合
Object-Body = Diagnostic-record | Database-record
Database-record = Record | Multi-record ; Multi-recordについては3.5節参照
Record = 1*DB-field
DB-field = Field | Group-field ; 単一フィールドとグループフィールド
Group-Field = Group-field-start 1*DB-field Group-field-end
Group-field-start = "<" Group-name ">" CRLF
Group-field-end = "</" [Group-name] ">" CRLF
Group-name = token
Field = Tag "=" Value CRLF
Tag = token ; データベースのフィールドタグ
Value = text
クライアントがサーバにSEARCHまたはSCANリクエストに対するデータベースレコードを要求するメソッドである。サーバは、リクエストで指定されたフレームにバンドルしている検索結果より、指定されたデータベースレコードをレスポンスとして返す。
Request-Line = Method SP Handle SP Frame SP CATP-Version SP
Request-Code SP Request-Phrase CRLF
(1) Method
Method = "RETRIEVE"
(2) Handle
GETHANDLEリクエストによって取得したハンドルを指定する。
(3) Frame
SEARCHまたはSCANリクエストで指定したフレームを指定する。
(4) CATP-Version
クライアントがサポートしている最新のCATPバージョンを指定する。
(5) Request-Code
リクエストコードは、リクエストを表すコードである数字3桁の0を指定する。
Request-Code = "000" ; 数字3桁の0
(6) Request-Phrase
リクエストの説明句として、下記のトークンを指定する。
Request-Phrase = "REQUEST"
Request-Header = Result-set-start-position
Number-of-records-requested
[Element-set-names]
(1) Result-set-start-position
フレームにバンドルされている検索結果集合内の相対位置を指定する。サーバは本値からNumber-of-records-requested分に対応するデータベースレコードをデータベースから取得しレスポンスとして返す。
Result-set-start-position = "Result-set-start-position" ":" 1*DIGIT CRLF
(2) Number-of-records-requested
フレームにバンドルされている検索結果集合内の相対位置からの要求件数を指定する。
Number-of-records-requested = "Number-of-records-requested" ":" 1*DIGIT CRLF
(3) Element-set-names
データベースレコードの編集形式を指定する。
Element-set-names = "Element-set-names" ":" Edit-type CRLF
Edit-type = 1DIGIT
尚、Edit-typeと編集形式の対応は、サーバの実装による。
(1) Content-Length
本メソッドはオブジェクトボディを必要としないため、Content-Lengthに0を指定する。
(2) Encoding
オブジェクトボディのエンコーディング方式を指定する。本メソッドでは省略しても良い。
レスポンスのオブジェクトボディのエンコーディング方式を指定する。省略した場合は,"JIS7"となる。
本メソッドはオブジェクトボディを必要としない。
Status-Line = Method SP Handle SP Frame SP CATP-Version SP
Status-Code SP Reason-Phrase CRLF
(1) Method
メソッドはクライアントがリクエストラインに指定したメソッドと同じものを指定する。
(2) Handle
ハンドルはクライアントがリクエストラインに指定したハンドルと同じものを指定する。
(3) Frame
フレームはクライアントがリクエストラインに指定したフレームと同じものを指定する。
(4) CATP-Version
CATPバージョンは、サーバで使用されるプロトコールのバージョンを指定する。クライアントがリクエストラインで指定したCATPバージョンが、サーバがサポートしているバージョンよりも古い場合、サーバはそのバージョンをサポートしていることが望まれる。その場合クライアント指定のCATPバージョンをステータスラインに指定する。
(5) Status-CodeとReason-Phrase
サーバでのリクエストに対する処理結果を意味する。各コードの詳細並びにReason-Phraseはサーバの実装による。
(a) 2xx : 成功
本メソッドがサーバにおいて正常に処理されたことを意味する。
(b) 4xx : クライアントエラー
リクエストに間違った構文があるか、実行がもともと不可能である。
(c) 5xx : サーバエラー
サーバはリクエストを遂行できなかったことを意味する。
Response-Header = Number-of-records-returned
Next-result-set-position
(1) Number-of-records-returned
オブジェクトボディ(Object-Body)に設定されたレコード数を指定する。
Number-of-records-returned = "Number-of-records-returned" ":" 1*DIGIT CRLF
(2) Next-result-set-position
検索結果集合内の次のポインタ
Next-result-set-position = "Next-result-set-position" ":" 1*DIGIT CRLF
(1) Content-Length
オブジェクトボディのレングスを指定する。
(2) Encoding
オブジェクトボディのエンコーディング方式を指定する。オブジェクトボディが存在しない場合は省略しても良い。
オブジェクトボディには、該当するデータベースレコードまたは診断レコードを設定する。データベースレコードの場合、その形式並びに設定されるレコード件数はRequest-Headerの各フィールドの指定に従う。また、複数レコードをオブジェクトボディに設定する場合は"multi-part"タイプ(3.5節参照)の処理方式に従う。
尚、下記の場合はオブジェクトボディ部にデータベースレコードは設定されない。
・ Status-Codeが成功以外を示す場合
・ Request-Headerの各フィールドの解析の結果、転送レコード数が0になる場合
Object-Body = Diagnostic-record | Database-record
Database-record = Record | Multi-record ; Multi-recordについては3.5節参照
Record = 1*DB-field
DB-field = Field | Group-field ; 単一フィールドとグループフィールド
Group-Field = Group-field-start 1*Field Group-field-end
Group-field-start = "<" Group-name ">" CRLF
Group-field-end = "</" [Group-name] ">" CRLF
Group-name = token
Field = Tag "=" Value CRLF
Tag = token ; データベースのフィールドタグ
Value = text
クライアントがサーバに検索結果集合の絞り込みを要求するメソッドである。サーバは、フレームにバンドルされた検索結果集合をリクエストで指定された検索条件をもとに絞り込み、リクエストに応じた形式でデータベースレコードをレスポンスとして返す。
Request-Line = Method SP Handle SP Frame SP CATP-Version SP
Request-Code SP Request-Phrase CRLF
(1) Method
Method = "SCAN"
(2) Handle
GETHANDLEリクエストによって取得したハンドルを指定する。
(3) Frame
本リクエストの結果がバンドルするフレームを指定する。フレームはクライアントにおいてフレームの定義の範囲内で新たに指定することができる。この場合、サーバは指定されたハンドルの下にフレームを新たに割り当て、スキャン結果(検索結果集合等)をバンドルすることになる。また、以前生成したフレームを指定してもよい(最初に割り当てられたフレームはGETHANDLEレスポンスで返される)。この場合、サーバはスキャン結果(検索結果集合等)をもとに指定されたフレームを更新する。
(4) CATP-Version
クライアントがサポートしている最新のCATPバージョンを指定する。
(5) Request-Code
リクエストコードは、リクエストを表すコードである数字3桁の0を指定する。
Request-Code = "000" ; 数字3桁の0
(6) Request-Phrase
リクエストの説明句として、下記のトークンを指定する。
Request-Phrase = "REQUEST"
Request-Header = Target-frame
[Small-set-element-set-names]
[Medium-set-element-set-names]
[Small-set-upper-bound]
[Large-set-lower-bound]
[Medium-set-present-number]
(1) Target-frame
スキャンの対象となるフレームを指定する。
Target-frame = "Target-frame" ":" Frame CRLF
Frame = 3DIGIT
(2) Small-set-element-set-names
スキャンの結果、ヒット件数がSmall-set-upper-bound((4)参照)の場合に取得したいデータベースレコードの編集形式を指定する。
Small-set-element-set-names = "Small-set-element-set-names" ":" Edit-type CRLF
Edit-type = 1DIGIT
尚、Edit-typeと編集形式の対応は、サーバの実装による。
(3) Medium-set-element-set-names
スキャンの結果、ヒット件数がSmall-set-upper-bound((4)参照)より大きく、かつLarge-set-lower-bound((5)参照)より小さい場合に取得したいデータベースレコードの編集形式を指定する。
Medium-set-element-set-names = "Medium-set-element-set-names" ":" Edit-type CRLF
Edit-type = 1DIGIT
尚、Edit-typeと編集形式の対応は、サーバの実装による。
(4) Small-set-upper-bound
スキャンの結果、ヒットしたデータベースレコードを全件取得する場合のヒット件数の上限値を指定する。クライアントが本値を指定した場合、サーバは本値とヒット件数を比較し”ヒット件数 <= 本値”の場合Small-set-element-set-namesで指定された形式のデータベースレコードを返す。
Small-set-upper-bound = "Small-set-upper-bound" ":" Value CRLF
Value = 1*DIGIT
(5) Large-set-lower-bound
スキャンの結果、ヒットしたデータベースレコードを1件も転送しないヒット件数の下限値を指定する。クライアントが本値を指定した場合、サーバは本値とヒット件数を比較し”ヒット件数 >= 本値”の場合データベースレコードを返送しない。
Large-set-lower-bound = "Large-set-lower-bound" ":" Value CRLF
Value = 1*DIGIT
(6) Medium-set-present-number
スキャンの結果、ヒット件数が”Small-set-upper-bound < ヒット件数 < Large-set-lower-bound”の場合に転送するデータベースのレコード件数を指定する。
Medium-set-present-number = "Medium-set-present-number" ":" Value CRLF
Value = 1*DIGIT
(1) Content-Length
オブジェクトボディのレングスを指定する。
(2) Encoding
オブジェクトボディのエンコーディング方式を指定する。
オブジェクトボディには検索条件式(絞り込み条件式)を単一レコードで指定する。検索条件式は、RPN(逆ポーランド記法)を用いる。
Object-Body = Record ; 単一レコード
Record = RPN-Query
RPN-Query = Argument | <Argument + Argument + Operator> ; "+"は後続を意味する
Argument = Operand | RPN-Query
Operand = Tag "=" Value
Tag = token ; データベースのフィールドタグ
Value = <"> text <"> ; text内の<">は<\><">と記述
operator = AND | OR | AND-NOT
Status-Line = Method SP Handle SP Frame SP CATP-Version SP
Status-Code SP Reason-Phrase CRLF
(1) Method
メソッドはクライアントがリクエストラインに指定したメソッドと同じものを指定する。
(2) Handle
ハンドルはクライアントがリクエストラインに指定したハンドルと同じものを指定する。
(3) Frame
フレームはクライアントがリクエストラインに指定したフレームと同じものを指定する。
(4) CATP-Version
CATPバージョンは、サーバで使用されるプロトコールのバージョンを指定する。クライアントがリクエストラインで指定したCATPバージョンが、サーバがサポートしているバージョンよりも古い場合、サーバはそのバージョンをサポートしていることが望まれる。その場合クライアント指定のCATPバージョンをステータスラインに指定する。
(5) Status-CodeとReason-Phrase
サーバでのリクエストに対する処理結果を意味する。各コードの詳細並びにReason-Phraseはサーバの実装による。
(a) 2xx : 成功
本メソッドがサーバにおいて正常に処理されたことを意味する。すなわち、サーバは検索結果集合等を生成し、リクエストラインで指定されたフレームにバンドルしたことを意味する。
(b) 4xx : クライアントエラー
リクエストに間違った構文があるか、実行がもともと不可能である。
(c) 5xx : サーバエラー
サーバはリクエストを遂行できなかったことを意味する。
Response-Header = Result-count
Number-of-records-returned
Next-result-set-position
(1) Result-count
スキャンの結果ヒットしたデータベースレコード数を指定する。
Result-count = "Result-count" ":" 1*DIGIT CRLF
(2) Number-of-records-returned
オブジェクトボディ(Object-Body)に設定されたレコード数を指定する。
Number-of-records-returned = "Number-of-records-returned" ":" 1*DIGIT CRLF
(3) Next-result-set-position
検索結果集合内の次のポインタを指定する。クライアントは、続きのデータベースレコードを取得したい場合RETRIVEメソッドに本ポインタを指定することができる。
Next-result-set-position = "Next-result-set-position" ":" 1*DIGIT CRLF
(1) Content-Length
オブジェクトボディのレングスを指定する。
(2) Encoding
オブジェクトボディのエンコーディング方式を指定する。オブジェクトボディが存在しない場合は省略しても良い。
オブジェクトボディにはスキャンの結果、該当するデータベースレコードまたは診断レコードを設定する。データベースレコードの場合、その形式並びに設定されるレコード件数はRequest-Headerの各フィールドの指定に従う。また、複数レコードをオブジェクトボディに設定する場合は"multi-part"タイプ(3.5節参照)の処理方式に従う。
尚、下記の場合はオブジェクトボディ部にデータベースレコードは設定されない。
・ Status-Codeが成功以外を示す場合
・ Result-countが0の場合
・ Request-Headerの各フィールドの解析の結果、転送レコード数が0になる場合
Object-Body = Diagnostic-record | Database-record
Database-record = Record | Multi-record ; Multi-recordについては3.5節参照
Record = 1*DB-field
DB-field = Field | Group-field ; 単一フィールドとグループフィールド
Group-Field = Group-field-start 1*Field Group-field-end
Group-field-start = "<" Group-name ">" CRLF
Group-field-end = "</" [Group-name] ">" CRLF
Group-name = token
Field = Tag "=" Value CRLF
Tag = token ; データベースのフィールドタグ
Value = text
クライアントがサーバにデータベースのインデックス一覧情報を検索要求するメソッドである。サーバは、リクエストで指定されたインデックスキーワードに対するインデックス一覧をレスポンスとして返す。尚、本メソッドはフレームにバンドルされている検索結果集合を更新しない。
Request-Line = Method SP Handle SP Frame SP CATP-Version SP
Request-Code SP Request-Phrase CRLF
(1) Method
Method = "INDEXLIST"
(2) Handle
GETHANDLEリクエストによって取得したハンドルを指定する。
(3) Frame
フレームには3桁の任意の数字を指定する。但し、このフレームの値はサーバにて参照されない。
(4) CATP-Version
クライアントがサポートしている最新のCATPバージョンを指定する。
(5) Request-Code
リクエストコードは、リクエストを表すコードである数字3桁の0を指定する。
Request-Code = "000" ; 数字3桁の0
(6) Request-Phrase
リクエストの説明句として、下記のトークンを指定する。
Request-Phrase = "REQUEST"
Request-Header = Database-names
[Number-of-entries]
(1) Database-names
検索対象のデータベース名を指定する。データベース名はリスト形式で複数指定可能である。
Database-names = "Database-names" ":" 1#Database-name CRLF
Database-name = token
(2) Number-of-entries
データベースの検索の結果、取得したいインデックスの数を指定する。本フィールドは前方一致等のワイルドカード機能がサーバで実装されている場合に有効である。サーバは本値分のインデックス情報を必ず返送しなければいけないわけではない。本フィールドが省略された場合のデフォルト値はサーバの実装による。
Number-of-entries = "Number-of-entries" ":" 1*DIGIT CRLF
(1) Content-Length
オブジェクトボディのレングスを指定する。
(2) Encoding
オブジェクトボディのエンコーディング方式を指定する。
オブジェクトボディには検索対象のインデックスキーワードを指定する。
Index-keyword = Tag ":" Value CRLF
Tag = token ; 検索対象タグ
Value = text
Status-Line = Method SP Handle SP Frame SP CATP-Version SP
Status-Code SP Reason-Phrase CRLF
(1) Method
メソッドはクライアントがリクエストラインに指定したメソッドと同じものを指定する。
(2) Handle
ハンドルはクライアントがリクエストラインに指定したハンドルと同じものを指定する。
(3) Frame
フレームはクライアントがリクエストラインに指定したフレームと同じものを指定する。
(4) CATP-Version
CATPバージョンは、サーバで使用されるプロトコールのバージョンを指定する。クライアントがリクエストラインで指定したCATPバージョンが、サーバがサポートしているバージョンよりも古い場合、サーバはそのバージョンをサポートしていることが望まれる。その場合クライアント指定のCATPバージョンをステータスラインに指定する。
(5) Status-CodeとReason-Phrase
サーバでのリクエストに対する処理結果を意味する。各コードの詳細並びにReason-Phraseはサーバの実装による。
(a) 2xx : 成功
本メソッドがサーバにおいて正常に処理されたことを意味する。
(b) 4xx : クライアントエラー
リクエストに間違った構文があるか、実行がもともと不可能である。
(c) 5xx : サーバエラー
サーバはリクエストを遂行できなかったことを意味する。
Response-Header = Number-of-fields-returned
(1) Number-of-fields-returned
オブジェクトボディ(Object-Body)に設定されたインデックス情報の数を指定する。
Number-of-fields-returned = "Number-of-fields-returned" ":" 1*DIGIT CRLF
(1) Content-Length
オブジェクトボディのレングスを指定する。
(2) Encoding
オブジェクトボディのエンコーディング方式を指定する。オブジェクトボディが存在しない場合は省略しても良い。
オブジェクトボディには検索の結果、該当するインデックス情報レコードまたは診断レコードを設定する。インデックス情報レコードは、インデックス情報をフィールドとする単一レコードである。
尚、下記の場合はオブジェクトボディ部にインデックス情報レコードは設定されない。
・ Status-Codeが成功以外を示す場合
・ Result-countが0の場合
Object-Body = Diagnostic-record | Index-info-record
Index-info-record = Record
Record = 1*Field
Field = Index-keyword "=" Number-of-record CRLF
Index-keyword = token ; インデックスキーワード
Number-of-record = 1*DIGIT ; インデックスキーワードに対応するデータベースレコード数
クライアントがサーバにデータベースレコードの新規登録を要求するメソッドである。サーバは、リクエストで指定されたデータベースにレコードを登録し、その結果をレスポンスとして返す。また、リクエストの指定によっては登録したレコードを指定された編集形式でレスポンスとして返す。
Request-Line = Method SP Handle SP Frame SP CATP-Version SP
Request-Code SP Request-Phrase CRLF
(1) Method
Method = "INSERT"
(2) Handle
GETHANDLEリクエストによって取得したハンドルを指定する。
(3) Frame
フレームには3桁の任意の数字を指定する。但し、このフレームの値はサーバにて参照されない。
(4) CATP-Version
クライアントがサポートしている最新のCATPバージョンを指定する。
(5) Request-Code
リクエストコードは、リクエストを表すコードである数字3桁の0を指定する。
Request-Code = "000" ; 数字3桁の0
(6) Request-Phrase
リクエストの説明句として、下記のトークンを指定する。
Request-Phrase = "REQUEST"
Request-Header = Database-names
[Returned-edit-type]
(1) Database-names
登録対象のデータベース名を指定する。データベース名は一つだけ指定可能である。
Database-names = "Database-names" ":" Database-name CRLF
Database-name = token
(2) Returned-edit-type
登録が成功した場合で、そのデータベースレコードの返送を望む場合の編集形式を指定する。本フィールドが省略された場合、登録したデータベースレコードの返送はされない。
Returned-edit-type = "Returned-edit-type" ":" Edit-type CRLF
Edit-type = 1DIGIT
尚、Edit-typeと編集形式の対応は、サーバの実装による。
(1) Content-Length
オブジェクトボディのレングスを指定する。
(2) Encoding
オブジェクトボディのエンコーディング方式を指定する。
オブジェクトボディには、登録するデータベースレコードを設定する。登録可能なデータベースレコード数は1件であり、単一レコードとなる。
Object-Body = Database-record
Database-record = Record
Record = 1*DB-field
DB-field = Field | Group-field ; 単一フィールドとグループフィールド
Group-Field = Group-field-start 1*Field Group-field-end
Group-field-start = "<" Group-name ">" CRLF
Group-field-end = "</" [Group-name] ">" CRLF
Group-name = token
Field = Tag "=" Value CRLF
Tag = token ; データベースのフィールドタグ
Value = text
Status-Line = Method SP Handle SP Frame SP CATP-Version SP
Status-Code SP Reason-Phrase CRLF
(1) Method
メソッドはクライアントがリクエストラインに指定したメソッドと同じものを指定する。
(2) Handle
ハンドルはクライアントがリクエストラインに指定したハンドルと同じものを指定する。
(3) Frame
フレームはクライアントがリクエストラインに指定したフレームと同じものを指定する。
(4) CATP-Version
CATPバージョンは、サーバで使用されるプロトコールのバージョンを指定する。クライアントがリクエストラインで指定したCATPバージョンが、サーバがサポートしているバージョンよりも古い場合、サーバはそのバージョンをサポートしていることが望まれる。その場合クライアント指定のCATPバージョンをステータスラインに指定する。
(5) Status-CodeとReason-Phrase
サーバでのリクエストに対する処理結果を意味する。各コードの詳細並びにReason-Phraseはサーバの実装による。
(a) 2xx : 成功
本メソッドがサーバにおいて正常に処理されたことを意味する。
(b) 3xx : 警告成功
本メソッドがサーバにおいて警告つきで処理されたことを意味する。
(c) 4xx : クライアントエラー
リクエストに間違った構文があるか、実行がもともと不可能である。
(d) 5xx : サーバエラー
サーバはリクエストを遂行できなかったことを意味する。
Response-Header = [Registered-record-id]
(1) Registered-record-id
データベースレコードの登録の結果、新しく採番されたレコードのID指定する。
Registered-record-id = "Record-id" ":" Record-id CRLF
Record-id = token
(1) Content-Length
オブジェクトボディのレングスを指定する。
(2) Encoding
オブジェクトボディのエンコーディング方式を指定する。オブジェクトボディが存在しない場合は省略しても良い。
オブジェクトボディには登録したデータベースレコードまたは診断レコードを設定する。データベースレコードの場合、その形式はRequest-HeaderのReturned-edit-typeフィールドの指定に従う。尚、データベースレコードは単一レコードである。
尚、下記の場合はオブジェクトボディ部にデータベースレコードは設定されない。
・ Status-Codeが成功以外を示す場合
・ Request-HeaderのReturned-edit-typeフィールドが省略された場合
Object-Body = Diagnostic-record | Database-record
Database-record = Record
Record = 1*DB-field
DB-field = Field | Group-field ; 単一フィールドとグループフィールド
Group-Field = Group-field-start 1*Field Group-field-end
Group-field-start = "<" Group-name ">" CRLF
Group-field-end = "</" [Group-name] ">" CRLF
Group-name = token
Field = Tag "=" Value CRLF
Tag = token ; データベースのフィールドタグ
Value = text
クライアントがサーバにデータベースレコードの更新を要求するメソッドである。サーバは、リクエストで指定されたデータベースを指定されたレコードで更新し、その結果をレスポンスとして返す。また、リクエストの指定によっては更新したレコードを指定された編集形式でレスポンスとして返す。
Request-Line = Method SP Handle SP Frame SP CATP-Version SP
Request-Code SP Request-Phrase CRLF
(1) Method
Method = "UPDATE"
(2) Handle
GETHANDLEリクエストによって取得したハンドルを指定する。
(3) Frame
フレームには3桁の任意の数字を指定する。但し、このフレームの値はサーバにて参照されない。
(4) CATP-Version
クライアントがサポートしている最新のCATPバージョンを指定する。
(5) Request-Code
リクエストコードは、リクエストを表すコードである数字3桁の0を指定する。
Request-Code = "000" ; 数字3桁の0
(6) Request-Phrase
リクエストの説明句として、下記のトークンを指定する。
Request-Phrase = "REQUEST"
Request-Header = Database-names
[Returned-edit-type]
(1) Database-names
更新対象のデータベース名を指定する。データベース名は一つだけ指定可能である。
Database-names = "Database-names" ":" Database-name CRLF
Database-name = token
(2) Returned-edit-type
更新が成功した場合で、そのデータベースレコードの返送を望む場合の編集形式を指定する。本フィールドが省略された場合、更新したデータベースレコードの返送はされない。
Returned-edit-type = "Returned-edit-type" ":" Edit-type CRLF
Edit-type = 1DIGIT
尚、Edit-typeと編集形式の対応は、サーバの実装による。
(1) Content-Length
オブジェクトボディのレングスを指定する。
(2) Encoding
オブジェクトボディのエンコーディング方式を指定する。
オブジェクトボディには、更新するデータベースレコードを設定する。更新可能なデータベースレコード数は1件であり、単一レコードとなる。
Object-Body = Database-record
Database-record = Record
Record = 1*DB-field
DB-field = Field | Group-field ; 単一フィールドとグループフィールド
Group-Field = Group-field-start 1*Field Group-field-end
Group-field-start = "<" Group-name ">" CRLF
Group-field-end = "</" [Group-name] ">" CRLF
Group-name = token
Field = Tag "=" Value CRLF
Tag = token ; データベースのフィールドタグ
Value = text
Status-Line = Method SP Handle SP Frame SP CATP-Version SP
Status-Code SP Reason-Phrase CRLF
(1) Method
メソッドはクライアントがリクエストラインに指定したメソッドと同じものを指定する。
(2) Handle
ハンドルはクライアントがリクエストラインに指定したハンドルと同じものを指定する。
(3) Frame
フレームはクライアントがリクエストラインに指定したフレームと同じものを指定する。
(4) CATP-Version
CATPバージョンは、サーバで使用されるプロトコールのバージョンを指定する。クライアントがリクエストラインで指定したCATPバージョンが、サーバがサポートしているバージョンよりも古い場合、サーバはそのバージョンをサポートしていることが望まれる。その場合クライアント指定のCATPバージョンをステータスラインに指定する。
(5) Status-CodeとReason-Phrase
サーバでのリクエストに対する処理結果を意味する。各コードの詳細並びにReason-Phraseはサーバの実装による。
(a) 2xx : 成功
本メソッドがサーバにおいて正常に処理されたことを意味する。
(b) 3xx : 警告成功
本メソッドがサーバにおいて警告つきで処理されたことを意味する。
(c) 4xx : クライアントエラー
リクエストに間違った構文があるか、実行がもともと不可能である。
(d) 5xx : サーバエラー
サーバはリクエストを遂行できなかったことを意味する。
Response-Header = [Updated-record-id]
(1) Updated-record-id
更新されたデータベースレコードのレコードID指定する。
Updated-record-id = "Record-id" ":" Record-id CRLF
Record-id = token
(1) Content-Length
オブジェクトボディのレングスを指定する。
(2) Encoding
オブジェクトボディのエンコーディング方式を指定する。オブジェクトボディが存在しない場合は省略しても良い。
オブジェクトボディには更新されたデータベースレコードまたは診断レコードを設定する。データベースレコードの場合、その形式はRequest-HeaderのReturned-edit-typeフィールドの指定に従う。尚、データベースレコードは単一レコードである。
尚、下記の場合はオブジェクトボディ部にデータベースレコードは設定されない。
・ Status-Codeが成功以外を示す場合
・ Request-HeaderのReturned-edit-typeフィールドが省略された場合
Object-Body = Diagnostic-record | Database-record
Database-record = Record
Record = 1*DB-field
DB-field = Field | Group-field ; 単一フィールドとグループフィールド
Group-Field = Group-field-start 1*Field Group-field-end
Group-field-start = "<" Group-name ">" CRLF
Group-field-end = "</" [Group-name] ">" CRLF
Group-name = token
Field = Tag "=" Value CRLF
Tag = token ; データベースのフィールドタグ
Value = text
クライアントがサーバにデータベースレコードの削除を要求するメソッドである。サーバは、リクエストで指定されたデータベースから指定されたレコードを削除し、その結果をレスポンスとして返す。
Request-Line = Method SP Handle SP Frame SP CATP-Version SP
Request-Code SP Request-Phrase CRLF
(1) Method
Method = "DELETE"
(2) Handle
GETHANDLEリクエストによって取得したハンドルを指定する。
(3) Frame
フレームには3桁の任意の数字を指定する。但し、このフレームの値はサーバにて参照されない。
(4) CATP-Version
クライアントがサポートしている最新のCATPバージョンを指定する。
(5) Request-Code
リクエストコードは、リクエストを表すコードである数字3桁の0を指定する。
Request-Code = "000" ; 数字3桁の0
(6) Request-Phrase
リクエストの説明句として、下記のトークンを指定する。
Request-Phrase = "REQUEST"
Request-Header = Database-names
Delete-record-id
(1) Database-names
レコード削除対象のデータベース名を指定する。データベース名は一つだけ指定可能である。
Database-names = "Database-names" ":" Database-name CRLF
Database-name = token
(2) Delete-record-id
削除対象のデータベースレコードのIDを指定する。
Delete-record-id = "Record-id" ":" Record-id CRLF
Record-id = token
(1) Content-Length
本メソッドはオブジェクトボディを必要としないため、Content-Lengthに0を指定する。
(2) Encoding
オブジェクトボディのエンコーディング方式を指定する。本メソッドでは省略しても良い。
本メソッドはオブジェクトボディを必要としない。
Status-Line = Method SP Handle SP Frame SP CATP-Version SP
Status-Code SP Reason-Phrase CRLF
(1) Method
メソッドはクライアントがリクエストラインに指定したメソッドと同じものを指定する。
(2) Handle
ハンドルはクライアントがリクエストラインに指定したハンドルと同じものを指定する。
(3) Frame
フレームはクライアントがリクエストラインに指定したフレームと同じものを指定する。
(4) CATP-Version
CATPバージョンは、サーバで使用されるプロトコールのバージョンを指定する。クライアントがリクエストラインで指定したCATPバージョンが、サーバがサポートしているバージョンよりも古い場合、サーバはそのバージョンをサポートしていることが望まれる。その場合クライアント指定のCATPバージョンをステータスラインに指定する。
(5) Status-CodeとReason-Phrase
サーバでのリクエストに対する処理結果を意味する。各コードの詳細並びにReason-Phraseはサーバの実装による。
(a) 2xx : 成功
本メソッドがサーバにおいて正常に処理されたことを意味する。
(b) 4xx : クライアントエラー
リクエストに間違った構文があるか、実行がもともと不可能である。
(c) 5xx : サーバエラー
サーバはリクエストを遂行できなかったことを意味する。
Response-Header = [Deleted-record-id]
(1) Deleted-record-id
削除されたレコードのID指定する。
Deleted-record-id = "Record-id" ":" Record-id CRLF
Record-id = token
(1) Content-Length
オブジェクトボディのレングスを指定する。
(2) Encoding
オブジェクトボディのエンコーディング方式を指定する。オブジェクトボディが存在しない場合は省略しても良い。
オブジェクトボディには診断レコードがある場合に、そのレコードを設定する。
Object-Body = Diagnostic-record
クライアントがサーバにサーバ上のプロシジャの実行を要求するメソッドである。サーバは、リクエストで指定されたプロシジャを実行し、その結果をレスポンスとして返す。
Request-Line = Method SP Handle SP Frame SP CATP-Version SP
Request-Code SP Request-Phrase CRLF
(1) Method
Method = "SERVERPROCEDURECALL"
(2) Handle
GETHANDLEリクエストによって取得したハンドルを指定する。
(3) Frame
フレームには3桁の任意の数字を指定する。
(4) CATP-Version
クライアントがサポートしている最新のCATPバージョンを指定する。
(5) Request-Code
リクエストコードは、リクエストを表すコードである数字3桁の0を指定する。
Request-Code = "000" ; 数字3桁の0
(6) Request-Phrase
リクエストの説明句として、下記のトークンを指定する。
Request-Phrase = "REQUEST"
4.11.1.2 Request-Header
Request-Header = Procedure-name
*Argument
(1) Procedure-name
サーバのプロシジャ名を指定する。
Procedure-name = "Procedure-name" ":" Name CRLF
Name = token
(2) Argument
Procedure-nameで示されるプロシジャに渡す引数を指定する。
尚、引数の定義はサーバの実装による。
(1) Content-Length
オブジェクトボディのレングスを指定する。
(2) Encoding
オブジェクトボディのエンコーディング方式を指定する。オブジェクトボディが存在しない場合は省略しても良い。
Procedure-nameで示されるプロシジャに渡すオブジェクトボディを指定する。
尚、オブジェクトボディの定義はサーバの実装による。
Status-Line = Method SP Handle SP Frame SP CATP-Version SP
Status-Code SP Reason-Phrase CRLF
(1) Method
メソッドはクライアントがリクエストラインに指定したメソッドと同じものを指定する。
(2) Handle
ハンドルはクライアントがリクエストラインに指定したハンドルと同じものを指定する。
(3) Frame
フレームはクライアントがリクエストラインに指定したフレームと同じものを指定する。
(4) CATP-Version
CATPバージョンは、サーバで使用されるプロトコールのバージョンを指定する。クライアントがリクエストラインで指定したCATPバージョンが、サーバがサポートしているバージョンよりも古い場合、サーバはそのバージョンをサポートしていることが望まれる。その場合クライアント指定のCATPバージョンをステータスラインに指定する。
(5) Status-CodeとReason-Phrase
サーバでのリクエストに対する処理結果を意味する。各コードの詳細並びにReason-Phraseはサーバの実装による。尚、処理結果とはリクエストされたプロシジャの実行結果ではない。それを起動しようとした試みに対する結果である。
(a) 2xx : 成功
本メソッドがサーバにおいて正常に処理されたことを意味する。
(b) 4xx : クライアントエラー
リクエストに間違った構文があるか、実行がもともと不可能である。
(c) 5xx : サーバエラー
サーバはリクエストを遂行できなかったことを意味する。
Response-Header = *Response-info
(1) Response-info
プロシジャ名で示されるプロシジャのレスポンス情報を指定する。
尚、レスポンス情報の定義はサーバの実装による。
(1) Content-Length
オブジェクトボディのレングスを指定する。
(2) Encoding
オブジェクトボディのエンコーディング方式を指定する。オブジェクトボディが存在しない場合は省略しても良い。
オブジェクトボディにはリクエストされたプロシジャの実行結果、または診断レコードを設定する。
Object-Body = Diagnostic-record | Procedure-result-record
尚、Procedure-result-recordの定義はサーバの実装による。
[1] 木内貴弘訳 "ハイパーテキストトランスファープロトコール第1.0版仕様書(日本語翻訳版)",
<http://www.epistat.m.u-tokyo.ac.jp/internet/draft-fielding-http-spec-01-jp.txt>, 1995年 4月10日
[2] HTTP Working Group INTERNET-DRAFT "Hypertext Transfer Protocol -- HTTP/1.1",
<http://www.ics.uci.edu/pub/ietf/http/>,January 19, 1996
[3] Z39.50 Maintenance Agency Official Text for Z39.50-1995 "Information Retrieval (Z39.50): Application Service Definition and Protocol Specification" ANSI/NISO Z39.50-1995,July 1995
<http://lcweb.loc.gov/z3950/agency/>
[4] D. H. Crocker. "Standard for the Format of ARPA Internet TextMessages." STD 11, RFC 822, UDEL, <http://ds.internic.net/rfc/rfc822.txt>, August 1982.