4.6 SCANメソッド

 クライアントがサーバに検索結果集合の絞り込みを要求するメソッドである。サーバは、フレームにバンドルされた検索結果集合をリクエストで指定された検索条件をもとに絞り込み、リクエストに応じた形式でデータベースレコードをレスポンスとして返す。

4.6.1 リクエスト

4.6.1.1 Request-Line

        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"

4.6.1.2 Request-Header

        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

4.6.1.3 Object-Header

 (1) Content-Length

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

 (2) Encoding

 オブジェクトボディのエンコーディング方式を指定する。

4.6.1.4 Object-Body

 オブジェクトボディには検索条件式(絞り込み条件式)を単一レコードで指定する。検索条件式は、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

4.6.2 レスポンス

4.6.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.6.2.2 Response-Header

        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

4.6.2.3 Object-Header

 (1) Content-Length

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

 (2) Encoding

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

4.6.2.4 Object-Body

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

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