オブジェクト・データ・マネージャー

オブジェクト・データ・マネージャー (ODM) は、 システム情報の保管を目的とするデータ・マネージャーです。 情報は、オブジェクトとして、関連する特性とともに保管され維持されます。

ODM は、アプリケーション・プログラムのデータを管理する場合にも使用することができます。

ODM が管理するシステム・データには、以下のものがあります。

  • 入出力装置構成情報
  • SMIT (メニュー、セレクター、およびダイアログ) の表示情報
  • インストールおよび更新手順の重要プロダクト・データ
  • 通信構成情報
  • システム・リソース情報

ODM では、オブジェクトおよびオブジェクト・クラスの、作成、追加、ロック、保管、 変更、獲得、表示、削除、およびドロップを行うことができます。 ODM コマンドは、これらの関数へのコマンド・ライン・インターフェースとして機能します。 ODM サブルーチンは、 これらの関数にアプリケーション・プログラム内からアクセスします。

オブジェクト・クラスによっては、システムに付属しているものもあります。 これらのオブジェクト・クラスについては、それを提供している特定のシステム・プロダクトの文書で説明してあります。

ODM オブジェクト・クラスおよびオブジェクトの保管

ODM の基本的なコンポーネントは、オブジェクト・クラスおよびオブジェクトです。 オブジェクト・クラスおよびオブジェクトを管理するには、 ODM コマンドおよびサブルーチンを使用します。 具体的には、これらのインターフェースの作成と追加機能を用いて、 ユーザー独自のデータの保管と管理に関するオブジェクト・クラスおよびオブジェクトを作成します。

用語 説明
オブジェクト・クラス 同じ定義のオブジェクトのグループ。 オブジェクト・クラスは、1 つ以上のディスクリプターで構成されます。 これは、テーブルに似ています。 odmcreate コマンドまたは odm_create_class サブルーチンで作成する各オブジェクト・クラスは、 構造体の配列の C 言語定義として、ファイル内に保管されます。
オブジェクト オブジェクト・クラスのメンバー。 これは、データの保管および管理を必要とするエンティティーです。 これは、データベース内の論理レコードに似ています。

odmadd コマンドまたは odm_add_obj サブルーチンによってオブジェクト・クラスに追加する各オブジェクトは、同じファイルの C 言語構造体として保管されます。 ユーザーは、オブジェクト・クラスの作成時に、 このファイルに保管するディレクトリーを決めます。

各オブジェクトが配列のエレメントである構造体の場合、 オブジェクト・クラスは、概念としては構造体の配列に似ています。 オブジェクトがオブジェクト・クラスに追加されるときに、値が、 オブジェクトのディスクリプターに関連付けられます。 オブジェクトのディスクリプターとその関連する値は、ODM 機能によって探し出し、変更することができます。

以下は、オブジェクト・クラスとオブジェクトの操作の例を示しています。

  1. Fictional_Characters という オブジェクト・クラスを作成するには、次のように入力します。
    class Fictional_Characters {
            char    Story_Star[20];
            char    Birthday[20];
            short   Age;
            char    Friend[20];
    };

    この例で、Fictional_Characters オブジェクト・クラスには、4 つのディスクリプターが入っています。character (文字) ディスクリプター・タイプで、最大長が 20 文字の、Story_StarBirthday、および Friend と、short (ショート) ディスクリプター・タイプの Age です。 ODM が 必要とするオブジェクト・クラス・ファイルを作成するには、odmcreate コマンド、 もしくは odm_create_class サブルーチンを用いて、このファイルを処理します。

  2. オブジェクト・クラスの作成が済むと、odmadd コマンド、または、odm_add_obj サブルーチンを用いて、 オブジェクトをそのクラスに追加することができます。 例えば、次のコードを odmadd コマンドを使用して入力し、オブジェクト Cinderella および Snow White を、それらが継承するディスクリプターの値とともに、 Fictional_Characters オブジェクト・クラスに追加します。
    Fictional_Characters:
            Story_Star      = "Cinderella"
            Birthday        = "Once upon a time"
            Age             = 19
            Friend          = "mice"
    
    Fictional_Characters:
            Story_Star = "Snow White"
            Birthday = "Once upon a time"
            Age = 18
            Friend = "Fairy Godmother"

    Fictional_Characters 表は、Fictional_Characters オブジェクト・クラスと、その 2 つの追加オブジェクトである Cinderella および Snow White の概念図を示します。

    表 1. Fictional Characters
    Story Star (char) Birthday (char) Age (short) Friend (char)
    Cinderella Once upon a time 19 Mice
    Snow White Once upon a time 18 Fairy Godmother
    Retrieved data for 'Story_Star = "Cinderella"'
         Cinderella:
              Birthday = Once upon a time
              Age = 19
              Friend = Mice
  3. Fictional_Characters オブジェクト・クラスが作成され、オブジェクト Cinderella および Snow White が追加された後、'Story_Star = "Cinderella"' に関して検索されるデータを次に示します。
    
    Cinderella:
            Birthday        = Once upon a time
            Age             = 19
            Friend          = mice

ODM コマンドの使用

odmcreate コマンドまたは odmdrop コマンドを使用してオブジェクト・クラスを作成またはドロップする場合は、 以下のいずれかを使用してクラス定義ファイルへのアクセス元ディレクトリーを指定します。

  1. ファイルを $ODMDIR によって示されたデフォルト・ディレクトリーである /etc/objrepos ディレクトリーに保管する。
  2. export コマンドを用いて ODMDIR 環境変数を設定し、保管用のディレクトリーを指定する。
  3. unset コマンドを用い て ODMDIR 環境変数を設定解除し、cd コマンドを用いて、 現行ディレクトリーを、オブジェクト・クラスの保管を行いたいディレクトリーに変更する。 次に、そのディレクトリーで ODM コマンドを実行します。 オブジェクト・クラスを定義するファイルは、 現行ディレクトリーに保管されます。

odmdeleteodmaddodmchangeodmshow、または odmget のいずれかのコマンドを使用してクラスとオブジェクトを処理する場合は、以下のいずれかを使用してオブジェクト・クラスを含むディレクトリーを指定します。

  1. $ODMDIR によって示されたデフォルト・ディレクトリーである /etc/objrepos ディレクトリーのオブジェクト・クラスを処理する。
  2. export コマンドを 使用して、ODMDIR 環境変数を設定し、 ディレクトリーを指定する。
  3. コマンド・ラインから、export コマンドを用いて、ODMPATH 環境変数を、 オブジェクト・クラスの検索を行うディレクトリーのコロンで区切ったリストが入った文字列に設定する。 例:
    $ export ODMPATH = /usr/lib/objrepos:/tmp/myrepos
    $ODMPATH 内のディレクトリーが検索される のは、$ODMDIR が指示するディレクトリーにオブジェクト・クラスがない場合に限られます。

オブジェクト・クラスの作成

注意: システム・オブジェクト・クラスとオブジェクトを定義したファイルに変更を加えると、システム問題が発生することがあります。/usr/lib/objrepos ディレクトリーをオブジェクト・クラスおよびオブジェクトの保管用ディレクトリーとして使用する場合は、 システム管理者に相談してください。

  1. ASCII ファイルの 1 つまたは複数のオブジェクト・クラスに定義を作成する。 ODM コードおよび出力の例で、いくつかのオブジェクト・クラス定義の入った ASCII ファイルを示します。
  2. 生成されたオブジェクトを保管するディレクトリーを指定する。

オブジェクト・クラスおよびオブジェクトの保管では、 オブジェクト・クラス作成時に、生成されたオブジェクト・クラスおよびオブジェクトを保管する ディレクトリーを決めるために使用する基準について説明します。 システム・オブジェクト・クラスおよびオブジェクトは、ほとんどが /usr/lib/objrepos ディレクトリーに保管されます。

ClassDescriptionFile 入力ファイルとして指定されたオブジェクト・クラス定義の ASCII ファイルを使用して odmcreate コマンドを実行することにより、空のオブジェクト・クラスを生成します。

オブジェクト・クラスへのオブジェクトの追加

注意: システム・オブジェクト・クラスとオブジェクトを定義したファイルに変更を加えると、システム問題が発生することがあります。/usr/lib/objrepos ディレクトリーをオブジェクト・クラスおよびオブジェクトの保管用ディレクトリーとして使用する場合は、 システム管理者に相談してください。

  1. オブジェクトを追加するオブジェクト・クラスを作成する。 オブジェクト・クラスの作成方法については、オブジェクト・クラスの作成を参照してください。
  2. 1 つまたは複数のオブジェクトに定義を作成する。 ODM コードおよび出力の例で、 いくつかのオブジェクト定義の入った ASCII ファイルを示します。
  3. 生成されたオブジェクトの保管先となる オブジェクト・クラスを含むディレクトリーを指定する。

    オブジェクト・クラスおよびオブジェクトの保管では、 オブジェクト・クラス作成時に、生成されたオブジェクト・クラスおよびオブジェクトを保管する ディレクトリーを決めるために使用する基準について説明します。 システム・オブジェクト・クラスおよびオブジェクトは、ほとんどが /usr/lib/objrepos ディレクトリーに保管されます。

  4. InputFile 入力ファイルとして指定されたオブジェクト定義の ASCII ファイルを使用して odmadd コマンドを実行することによって、 オブジェクトをオブジェクト・クラスに追加する。

オブジェクト・クラスのロック

ODM は、オブジェクト・クラスもしくはオブジェクトを暗黙的にはロックしません。 ロックおよびアンロックの調整は、 オブジェクト・クラスにアクセスするアプリケーションが行います。 しかし、ODM には、アプリケーション・プログラムによってオブジェクト・クラスのロックおよびアンロックを制御する、 odm_lock および odm_unlock サブルーチンがあります。

サブルーチン 説明
odm_lock パス名であり、オブジェクト・クラス・ファイルもしくはオブジェクト・クラスのディレクトリーで解決できる文字列を処理する。 ロック ID を戻し、指定されたオブジェクト・クラス、 またはパス名によって定義されたクラスが使用中であることを示すフラグを設定します。

odm_lock サブルーチンは、ロック・フラグを設定した場合、 他のプロセスがそのオブジェクト・クラスを使用できないようにはしません。 使用上衝突が起こりえる場合、アプリケーション・プログラムは、 明示的にクラスへのロックを認可されるまで待ってからクラスを使用する必要があります。

ロックが有効な間は、別のアプリケーションは、 同じパス名でロックを獲得することはできません。 しかし、ディレクトリー名をロックしても、サブディレクトリーや、 そのディレクトリー内のファイルへのロックを別のアプリケーションが獲得できないようにすることはできません。

ロックされたオブジェクト・クラスをアンロックするには、 odm_lock サブルーチンによって戻されたロック ID でコールした odm_unlock サブルーチンを使用します。

オブジェクト・クラスおよびオブジェクトの保管

odmcreate コマンドまたは odm_create_class サブルーチンで作成する各オブジェクト・クラスは、 構造体の配列の C 言語定義として、ファイル内に保管されます。 odmadd コマンドまたは odm_add_obj サブルーチンによってオブジェクト・クラスに追加する各オブジェクトは、同じファイルの C 言語構造体として保管されます。

ユーザーは、オブジェクト・クラスの作成時に、 このファイルに保管するディレクトリーを決めます。

保管の方法は、オブジェクト・クラスおよびオブジェクトの作成に、コマンドとサブルーチンのどちらを使用するかによって異なります。

注意: システム・オブジェクト・クラスとオブジェクトを定義したファイルに変更を加えると、システム問題が発生することがあります。/usr/lib/objrepos ディレクトリーをオブジェクト・クラスおよびオブジェクトの保管用ディレクトリーとして使用する場合は、 システム管理者に相談してください。

odm_create_class または odm_add_obj サブルーチンの使用

odm_create_class サブルーチンまたは odm_add_obj サブルーチンは、オブジェクト・クラスおよびオブジェクトを作成する場合に使用します。

  • アプリケーションが ODMDIR 環境変数に指定された以外のオブジェクト・クラスを保管する際に特定の要件がある場合は、 odm_set_path サブルーチンを用いてパスをリセットする。 アプリケーションからオブジェクト・クラスもしくはオブジェクトを作成するときは常に、 このサブルーチンを用いて保管用パスを明示的に設定することを強くお勧めします。

    OR

  • アプリケーションの実行前に、コマンド・ラインから set コマンドを用いて ODMDIR 環境変数を設定し、 保管用のディレクトリーを指定する。

    OR

  • 多くのシステム・オブジェクト・クラスの保管に使用されるオブジェクト・リポジトリー、/usr/lib/objrepos ディレクトリーにファイルを保管する。

ODM ディスクリプター

オブジェクト・データ・マネージャー (ODM) ディスクリプターは、概念的には、 名前および型を持つ変数に似ています。 オブジェクト・クラスが作成される際、そのディスクリプターが、 関連する ODM ディスクリプター・タイプを持つ変数名のように定義されます。 オブジェクトは、オブジェクト・クラスに追加される際、 そのオブジェクト・クラスのディスクリプターのすべてのコピーを獲得します。 値も、既に述べたオブジェクト・ディスクリプターに関連付けられます。

ODM は、以下の複数のディスクリプター・タイプをサポートします。

ディスクリプター 定義
端末ディスクリプター 文字または数値データ型を定義する。
リンク・ディスクリプター オブジェクト・クラス間の関連を定義する。
メソッド・ディスクリプター オブジェクトの操作またはメソッドを定義する。

オブジェクト・クラスから個々のオブジェクトを検索する基準を定義する場合は、 オブジェクトのディスクリプターとその関連する値を使用します。 ODM に渡す選択基準を ODM オブジェクト検索での定義に従ってフォーマット設定します。binary 端末ディスクリプターは、 その長さが任意であるため、検索基準には使用しないでください。

ODM 端末ディスクリプター

端末ディスクリプター は、ODM が使用する、 最も根本的なデータ型を定義します。 端末ディスクリプターは、基本的には ODM 端末ディスクリプター・タイプにより定義された変数です。 ODM が提供する端末ディスクリプター・タイプを、以下に示します。

ディスクリプター 定義
short 符号付き 2 バイト数を指定。
long 符号付き 4 バイト数を指定。
ulong 符号なし 4 バイト数を指定。
binary 固定長ビット文字列を指定。 バイナリー端末ディスクリプター・タイプは、ODM 作成時にユーザーが定義します。 バイナリー端末ディスクリプター・タイプは、選択基準には使用できません。
char 固定長、null 終了文字列を指定。
vchar 可変長、null 終了文字列を指定。 vchar 端末ディスクリプター・タイプは、 選択基準に使用することができます。
long64/ODM_LONG_LONG/int64 符号付き 8 バイト数を指定。
ulong64/ODM_ULONG_LONG/uint64 符号なし 8 バイトを指定。

ODM リンク・ディスクリプター

ODM リンク・ディスクリプター は、 オブジェクト・クラス内のオブジェクトと別のオブジェクト・クラス内のオブジェクト間の関係を確立します。 リンク・ディスクリプターは、ODM リンク・ディスクリプター・タイプで定義された変数です。

例えば、次のコードを ODM 作成機能が処理して、 Friend_Table および Fictional_Characters オブジェクト・クラスを生成することができます。

class Friend_Table {
        char    Friend_of[20];
        char    Friend[20];
};

  class Fictional_Characters {
        char    Story_Star[20];
        char    Birthday[20];
        short   Age;
        link    Friend_Table Friend_Table Friend_of Friends_of;
};

Fictional_Characters オブジェクト・クラスは、リンク・ディスクリプターを用いて Friends_of ディスクリプターを Friend_Table オブジェクト・クラスにリンクします。 リンクを解決するため、 Friends_of ディスクリプターは、 Friend_of ディスクリプター内の一致するデータを使って、 Friend_Table オブジェクト・クラスのオブジェクトを検索します。 Fictional_Characters オブジェクト・クラス内のリンク・ディスクリプターは、 Fictional_Characters オブジェクト・クラス内のリンク先のクラス (Friend_Table)、リンク先のディスクリプター (Friend_of)、ならびにリンク・ディスクリプターの名前 (Friends_of) を定義します。

次のコードを使用して、Fictional_Characters および Friend_Table オブジェクト・クラスにオブジェクトを追加することができます。

Fictional_Characters:
        Story_Star      = "Cinderella"
        Birthday        = "Once upon a time"
        Age             = 19
        Friends_of      = "Cinderella"

Fictional_Characters:
        Story_Star      = "Snow White"
        Birthday        = "Once upon a time"
        Age             = 18
        Friends_of      = "Snow White"

Friend_Table:
        Friend_of       = "Cinderella"
        Friend          = "Fairy Godmother"

Friend_Table:
        Friend_of       = "Cinderella"
        Friend          = "mice"
Friend_Table:
        Friend_of       = "Snow White"
        Friend          = "Sneezy"
Friend_Table:
        Friend_of       = "Snow White"
        Friend          = "Sleepy"
Friend_Table:
        Friend_of       = "Cinderella"
        Friend          = "Prince"
Friend_Table:
        Friend_of       = "Snow White"
        Friend          = "Happy"

次の表は、Fictional_Characters および Friend_Table オブジェクト・クラス、クラスに追加されるオブジェクト、 およびそれらのオブジェクト間のリンク関係の概念図を示しています。

Story_Star (char) Birthday (char) Age (short) Friends_of (link)
Cinderella Once upon a time 19 Cinderella
Snow White Once upon a time 18 Snow White
Retrieved data for 'Story_Star = "Cinderella"
     Cinderella:
          Birthday = Once upon a time
          Age = 19
          Friends_of = Cinderella
          Friend_of = Cinderella  

2 つのテーブルの Friends_ofFriend_of の列は直接リンクしています。 以下の表は、2 つのオブジェクト・クラスのリンク関係の概念図を示しています。

Friend_of (char) Friend (char)
Cinderella Fairy Godmother
Cinderella mice
Snow White Sneezy
Snow White Sleepy
Cinderella Prince
Snow White Happy

Fictional_Characters および Friend_Table オブジェクト・クラスが作成され、オブジェクトが追加された後に、Story_Star = 'Cinderella' に関して検索されたデータを次に示します。

Cinderella:
        Birthday         = Once upon a time
        Age              = 19
        Friends_of       = Cinderella
        Friend_of        = Cinderella

リンクされたオブジェクト・クラス間の拡張関係を確認するには、Friend_Table オブジェクト・クラスに対して odmget コマンドを使用します。 Friend_of = 'Cinderella' オブジェクト・クラスに関して検索されたデータを次に示します。

Friend_Table:
        Friend_Of = "Cinderella"
        Friend = "Fairy Godmother"

Friend_Table:
        Friend_of = "Cinderella"
        Friend= "mice"

Friend_Table:
        Friend_of = "Cinderella"
        Friend = "Prince"

ODM メソッド・ディスクリプター

ODM メソッド・ディスクリプター は、 関連するメソッドまたは 操作を持つことができるオブジェクトについてオブジェクト・クラスを定義します。 メソッド・ディスクリプターは、ODM メソッド・ディスクリプター・タイプで定義された変数です。

オブジェクトの操作またはメソッド・ディスクリプター値は、メソッド呼び出しによって 実行されるコマンド、プログラム、あるいはシェル・スクリプトのいずれの場合もある 文字列です。 オブジェクト・クラス内のオブジェクトごとに、 異なるメソッドまたは操作を定義することができます。 操作自体は ODM の一部ではなく、アプリケーション・プログラマーによって定義され、 コーディングされます。

オブジェクトのメソッドは、odm_run_method サブルーチンのコールによって呼び出されます。 メソッドの呼び出しは、同期式イベントであり、ODM 操作はこの操作が完了するまで一時停止します。

例えば、次のコードを ODM 作成機能に入力して Supporting_Cast_Ratings オブジェクト・クラスを生成することができます。

class Supporting_Cast_Ratings {
        char    Others[20];
        short   Dexterity;
        short   Speed;
        short   Strength;
        method  Do_This;
};

この例で、Do_This ディスクリプターは、 Supporting_Cast_Ratings オブジェクト・クラスに定義されたメソッド・ディスクリプターです。 メソッド・ディスクリプターの値は、将来 odm_run_method サブルーチン が呼び出す、コマンド、プログラム、もしくはシェル・スクリプトを指定する文字列 のいずれであっても構いません。

次のコードは、 オブジェクトを Supporting_Cast_Ratings オブジェクト・クラスに追加する例です。

Supporting_Cast_Ratings:
        Others          = "Sleepy"
        Dexterity       = 1
        Speed           = 1
        Strength        = 3
        Do_This   = "echo Sleepy has speed of 1"

Supporting_Cast_Ratings:
        Others          = "Fairy Godmother"
        Dexterity       = 10
        Speed           = 10
        Strength        = 10
        Do_This   = "odmget -q "Others='Fairy Godmother'" Supporting_Cast_Ratings"

以下の表は、 Do_This メソッド・ディスクリプターを持った Supporting_Cast_Ratings オブジェクト・クラスと、 このクラスの個々のオブジェクトに関連する操作の概念図を示しています。

Others (char) Dexterity (short) Speed (short) Stength (short) Do_This (method)
Sleepy 1 1 3 echo Sleepy has speed of 1
Fairy Godmother 10 10 10 odmget —q "Others='Fairy Godmother'"Supporting_Cast_Ratings"
odm_run_method  run of Sleepy's method displays
(using echo):
"Sleepy has speed of 1"

Supporting_Cast_Ratings オブジェクト・クラスが作成され、そのオブジェクトが追加された後に、Sleepy に定義されたメソッドを (odm_run_method サブルーチンによって) 呼び出すと、echo コマンドは次のように表示します。

Sleepy has speed of 1

ODM オブジェクト検索

ODM ルーチンでは、多くの場合、指定されたオブジェクト・クラスの 1 つまたは複数の オブジェクトを処理用に選択する必要があります。 オブジェクトを特定のルーチンで選択するときは、 検索基準を修飾子の形式で組み込むことができます。

qualifier
検索するオブジェクトの修飾基準を指定する、ODM サブルーチン・コール上の null 終了文字列パラメーター。

このパラメーターによって指定されたディスクリプター名および修飾基準によって、 後の処理用に選択されるオブジェクト・クラス内のオブジェクトが決まります。 修飾子ごとに、論理演算子で接続された 1 つまたは複数の述部 が入っています。 各述部は、ディスクリプター名、比較演算子、および定数から構成されます。

2 つの論理演算子が結合する 3 つの述部の修飾子を次に示します。

SUPPNO=30 AND (PARTNO>0 AND PARTNO<101)

この例の場合は、文字列全体が修飾子と見なされます。 3 つの述部は SUPPNO=30PARTNO>0、 および PARTNO<101 であり、述部の結合には AND 論理演算子が使用されます。 最初の述部では、SUPPNO はオブジェクト内のディスクリプターの 名前、= (等号) は比較演算子、 そして 30 はディスクリプターの値の比較対象である定数です。

各述部は、オブジェクト・クラス内のオブジェクトごとに 定義されたディスクリプターに適用されるテストを指定します。 テストは、オブジェクトのディスクリプターの値と、指定された定数間の比較です。 この例の最初の述部は、ディスクリプター (SUPPNO) の値と定数 (30) の関係が = (等号) であることを示します。

以下に括弧内の修飾子の部分を示します。

PARTNO>0 AND PARTNO<101

上記には、AND 論理演算子によって結合された 2 つの述部が入っています。 PARTNO ディスクリプターには、最初の述部の 0 より大きい値に関するテスト が行われ、次に 2 番目の述部の 101 未満の値に関するテストが行われます。 次に 2 つの述部を論理的に連結して、修飾子のその部分の値を判別します。 例えば、PARTNO が会社のインベントリーのパーツ・ナンバーに関する ディスクリプター名ならば、修飾子のこの部分で、パーツ・ナンバーが 0 より大きく 101 未満のすべての製品に対する選択を 定義します。

もう 1 つの例で、修飾子

lname='Smith' AND Company.Dept='099' AND Salary<2500

は、部門が 099、給与が $2500 未満で、 姓が Smith の全員 (ODM ではあらゆるオブジェクト) を 選択する場合に使用することができます。 固有のディスクリプターを作成するときは、Dept ディスクリプター名が その Company オブジェクト・クラスで修飾されることに注意してください。

ODM 述部のディスクリプター名

ODM では、ディスクリプター名は必ずしも固有ではありません。 ディスクリプター名は、複数のオブジェクト・クラスで使用することができます。 このような場合は、述部内のディスクリプター名と一緒にオブジェクト・クラス名を指定して、ディスクリプターに対す る固有の参照を作成します。

ODM 述部の比較演算子

以下に、有効な比較演算子を示します。

演算子 定義
= 等号
!= 不等号
> より大
>= 以上
< 未満
<= 以下
LIKE 類似。文字列データ内のパターンを検出

比較を行えるのは、互換データ型の間に限られます。

LIKE 比較演算子

LIKE 演算子では、CHAR ディスクリプター・タイプ内のパターンの検索が可能になります。 述部の例を以下に示します。

NAME LIKE 'ANNE'

上記は、指定したオブジェクト・クラスの各オブジェクト内の NAME ディスクリプターの ANNE という値の検索を定義します。 この場合、この例は次のものと同じです。

NAME = 'ANNE'

LIKE 演算子は、以下のパターン・マッチング文字および 規則とともに使用することもできます。

  • ? (疑問符) を使用して、任意の単一文字を表す。 以下に述部の例を示します。
    
    NAME LIKE '?A?'
    上記は、オブジェクトの NAME ディスクリプターの値の 2 番目の文字としての A を持つ、3 文字の文字列の検索を定義します。ディスクリプター値 PAMDAN、および PAT は、すべてこの検索基準を満たしています。
  • * (アスタリスク) を使用して、0 文字以上の文字を表す。 以下に述部の例を示します。
    NAME LIKE '*ANNE*'
    上記は、オブジェクトの NAME ディスクリプターの ANNE という値が入った文字列の検索を定義します。 ディスクリプター値 LIZANNEANNETTE、 および ANNE は、すべてこの検索基準を満たしています。
  • [ ] (大括弧) を使用して、 大括弧で囲まれたすべての文字を突き合わせる。 以下に述部の例を示します。
    NAME LIKE '[ST]*'
    上記は、オブジェクトの NAME ディスクリプターの S または T で始まるすべてのディスクリプター値の検索を定義します。

    - (負符号) を使用して、文字の範囲を指定する。 以下に述部の例を示します。

    
    NAME LIKE '[AD-GST]*'
    上記は、 A、D、E、F、G、S または T の文字で始まるすべてのディスクリプターの検索を定義します。
  • [!] (感嘆符を囲む大括弧) を使用して、大括弧で囲まれた文字を除く、 単一文字のすべてと突き合わせる。 以下に述部の例を示します。
    
    NAME LIKE '[!ST]*'
    上記は、オブジェクトの NAME ディスクリプターの S または T で始まるもの以外のディスクリプター値の検索を定義します。

    パターン・マッチング文字と規則は、 文字列でどのように組み合わせても使用することができます。

ODM 述部の定数

指定する定数は、数値定数でも、文字列定数でも構いません。

  1. ODM 述部の数値定数は、オプショナルの符号とその後に続く数値 (小数点が付く場合も、 付かない場合もある) で構成され、その後に、 オプショナルで E または e の文字でマークされた指数が付く場合もあります。 文字 E または e を使用する場合は、 符号を付けられる指数をその後に付ける必要があります。

    有効な数値定数のいくつかを次に示します。

    
    2            2.545   0.5   -2e5   2.11E0
    +4.555e-10   4E0     -10    999   +42

    指数を指定しないときは E0 指数を使用することができます。

  2. 文字列定数は、単一引用符で囲む必要があります。

    'smith'   '91'

    文字列定数は、すべて可変長であると見なされます。 文字列定数内の単一引用符を表すときは、2 つの単一引用符を使用します。 次に例を示します。

    'DON''T GO'

    上記は、次のように解釈されます。

    DON'T GO

述部の AND 論理演算子

AND 論理演算子は、述部付きで使用することができます。 AND 論理演算子には、AND または and を使用します。

AND 論理演算子は、複数の述部を接続します。 以下に修飾子の例を示します。

predicate1 AND predicate2 AND predicate3

上記は、predicate2 に論理的に 連結される predicate1 と、 その後の predicate3 に論理的に連結される結果を指定します。