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と編集形式の対応は、サーバの実装による。
データベースの検索の結果、ヒットしたデータベースレコードを全件取得する場合のヒット件数の上限値を指定する。クライアントが本値を指定した場合、サーバは本値とヒット件数を比較し"ヒット件数 <= 本値"の場合Small-set-element-set-namesで指定された形式のデータベースレコードを返す。
Small-set-upper-bound = "Small-set-upper-bound" ":" Value CRLF Value = 1*DIGIT
データベースの検索の結果、ヒットしたデータベースレコードを1件も転送しないヒット件数の下限値を指定する。クライアントが本値を指定した場合、サーバは本値とヒット件数を比較し"ヒット件数 >= 本値"の場合データベースレコードを返送しない。
Large-set-lower-bound = "Large-set-lower-bound" ":" Value CRLF Value = 1*DIGIT
データベースの検索の結果、ヒット件数が"Small-set-upper-bound < ヒット件数 < Large-set-lower-bound"の場合に転送するデータベースのレコード件数を指定する。
Medium-set-present-number = "Medium-set-present-number" ":" Value CRLF Value = 1*DIGIT
(1) Content-Length
オブジェクトボディのレングスを指定する。
オブジェクトボディには検索条件式を単一レコードで指定する。検索条件式は、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はサーバの実装による。
2xx : 成功本メソッドがサーバにおいて正常に処理されたことを意味する。すなわち、サーバは検索結果集合等を生成し、リクエストラインで指定されたフレームにバンドルしたことを意味する。
4xx : クライアントエラーリクエストに間違った構文があるか、実行がもともと不可能である。
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
オブジェクトボディのレングスを指定する。
オブジェクトボディのエンコーディング方式を指定する。オブジェクトボディが存在しない場合は省略しても良い。
オブジェクトボディには検索の結果、該当するデータベースレコードまたは診断レコードを設定する。データベースレコードの場合、その形式並びに設定されるレコード件数は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