4.5 RETRIEVEメソッド

 クライアントがサーバにSEARCHまたはSCANリクエストに対するデータベースレコードを要求するメソッドである。サーバは、リクエストで指定されたフレームにバンドルしている検索結果より、指定されたデータベースレコードをレスポンスとして返す。

4.5.1 リクエスト

4.5.1.1 Request-Line

        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"

4.5.1.2 Request-Header

        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と編集形式の対応は、サーバの実装による。

4.5.1.3 Object-Header

 (1) Content-Length

 本メソッドはオブジェクトボディを必要としないため、Content-Lengthに0を指定する。

 (2) Encoding

 オブジェクトボディのエンコーディング方式を指定する。本メソッドでは省略しても良い。

4.5.1.4 Object-Body

 本メソッドはオブジェクトボディを必要としない。


4.5.2 レスポンス

4.5.2.1 Status-Line

        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はサーバの実装による。

  1. 2xx     :       成功
     本メソッドがサーバにおいて正常に処理されたことを意味する。
  2.  4xx    :       クライアントエラー
     リクエストに間違った構文があるか、実行がもともと不可能である。
  3.   5xx   :       サーバエラー
     サーバはリクエストを遂行できなかったことを意味する。

4.5.2.2 Response-Header

        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

4.5.2.3 Object-Header

 (1) Content-Length

 オブジェクトボディのレングスを指定する。

 (2) Encoding

 オブジェクトボディのエンコーディング方式を指定する。オブジェクトボディが存在しない場合は省略しても良い。

4.5.2.4 Object-Body

 オブジェクトボディには、該当するデータベースレコードまたは診断レコードを設定する。データベースレコードの場合、その形式並びに設定されるレコード件数はRequest-Headerの各フィールドの指定に従う。また、複数レコードをオブジェクトボディに設定する場合は"multi-part"タイプ(3.5節参照)の処理方式に従う。

 尚、下記の場合はオブジェクトボディ部にデータベースレコードは設定されない。

        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