CATP/1.0目次

4.4 SEARCHメソッド

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

4.4.1 リクエスト

4.4.1.1 Request-Line

        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"       

4.4.1.2 Request-Header

        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

4.4.1.3 Object-Header

 (1) Content-Length

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

 (2) Encoding

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

4.4.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.4.2 レスポンス

4.4.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.4.2.2 Response-Header

        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

4.4.2.3 Object-Header

 (1) Content-Length

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

 (2) Encoding

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

4.4.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*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

CATP/1.0目次