クエリ機能: 検索メソッドとラッパー

データベースとは異なり、SOAP Web サービスや REST API などの一部のソースでは、データに対するランダムクエリが許可されず、代わりにクエリ機能が制限されたインターフェイスが提供されています。必須パラメータを持つ REST API の操作がその例です。Virtual DataPort は、 検索メソッド を使用してソースのクエリ機能をモデル化できます。基本ビューには、1 つまたは複数の検索メソッドを登録できます。

基本ビュー では、 検索メソッド によりクエリ機能が記述されています。ビューに少なくとも 1 つ検索メソッドがなければ、クエリを実行できません。

管理ツールを使用すると基本ビューの検索メソッドが自動的に定義されるので、管理ツールで基本ビューを作成するのがお勧めです。ほとんどの場合、これらの検索メソッドを修正する必要はありません。

ビューの各検索メソッドは一連の 5 タプルから構成されます。5 つのタプルはそれぞれ、特定のクエリを検索メソッドを使用してソース上で実行するときに従うべき制限事項を表しています。そのため、5 タプルを持たない検索メソッドでは、あらゆるクエリを実行することができます (たとえば、従来のリレーショナルデータベースなど、クエリ機能に制限のないソースの場合)。

5 タプルのフォーマットは (attribute, operators, obligatoriness, multiplicity, possible_values) です。詳細は以下のとおりです。

  • attribute は、関係の属性です。

  • operators は、このビューに対するクエリをこの検索メソッドで実行する場合に、この属性の条件として使用可能な演算子の組み合わせです。「ANY」は、その属性のデータ型で使用可能な任意の演算子を表します。

  • obligatoriness には次の 3 つの値を指定できます。「OBL」は、ソースに対するすべてのクエリで属性の指定が必須であることを表します。「OPT」は、属性をクエリで任意に指定できることを表します (オプション属性)。「NOS」は、この属性のクエリがソースで許可されていないことを表します。

  • multiplicity は、属性と演算子が指定された、ソースへのクエリで指定できる、値の個数を表します。この属性を指定してクエリを実行できない場合 (obligatoriness フィールドに「NOS」値が設定されている場合)、値は必ず 0 になります。「ANY」は、任意の属性や演算子について、任意の数だけ値を指定できることを表します。

  • possible_values は、属性のクエリを実行するときに使用可能な値のリストです。値「ANY」が含まれている場合は、検索範囲が制限されていないこと (属性のデータ型に関連付けられた範囲内にあること) を表しており、属性の任意の値についてクエリが実行されます。5 タプル で obligatoriness フィールドの値が「NOS」に設定されている場合は、必ず空集合の値が取られます。

: Search form for a bookshop に示されている検索フォームを使用可能なインターネット上のオンライン書店を例に考えてみます。

Search form for a bookshop

書店向け検索フォーム

このフォームでは、ユーザーは TITLE 属性の値を指定する必要があり、 AUTHOR 属性と FORMAT 属性の値については任意で指定できます (値のグループに限られる)。本のタイトルと著者については、キーワードで検索 (演算子 like を使用) します。完全一致検索 (演算子 = を使用) を実行するには、入力フィールドの検索ボックスの横にあるボックスを選択します。1 回の検索で、属性ごとに値を 1 つしか指定できません。この書店向けフォームでは、 TITLEAUTHORFORMAT のフィールドに加えて、 PRICE 属性の値が出力として返されますが、この値はフォームによるクエリでは取得できません。

以下に示す 5 タプルを含む検索メソッドを使用して、このソースを関係 R={TITLE, AUTHOR, FORMAT, PRICE} としてモデル化します。

書店向け検索メソッド
(TITLE,{like,=}, OBL, 1, Any)
(AUTHOR, {like,=}, OPT, 1, Any)
(FORMAT, {=}, OPT, 1,
{'All formats', 'Hardcover', 'eBooks', 'Paperbacks'})
(PRICE, {}, NOS, 0, {})

最初の 5 タプルでは、値 {like, =}OPERATORS フィールドに、 OBLOBLIGATORINESS フィールドに設定されています。この場合、 TITLE 属性のクエリは必ずしも両方の演算子を使用して実行しなければならないわけではありませんが、両方の演算子のうち少なくとも 1 つは使用する必要があります。 TITLE 属性のクエリが必ず両方の演算子を使用して実行されるようにするには (上記の例のフォームでは不可能)、 TITLE 属性で 5 つの異なるタプルを 2 つ、つまりそれぞれの演算子について 1 つずつ指定する必要があります。

{(TITLE, {like}, OBL, 1, ANY) (TITLE, {=}, OBL, 1, ANY)}

このように、指定した属性の処理を使用される演算子に応じて変える必要がある場合は、属性ごとに 5 タプルを複数指定することができます。

Virtual DataPort では、基盤となるビューの機能に応じて、派生ビューのクエリ機能が自動的に算出されます。

基本ビューの検索メソッドの追加、変更、削除については、GUI ツールでは対応していません。