ヘッダーをスキップ

Oracle Business Rules ユーザーズ・ガイド
10g(10.1.3.1.0)

B31866-02
目次
目次
索引
索引

戻る 次へ

4 Rule AuthorでのXMLファクトの使用

この章では、XML文書を使用してOracle Business Rulesで作業するためのチュートリアルを提供します(ファクトはXML文書で提供されます)。また、XMLを使用するルール対応Javaアプリケーションの作成方法も示します。

ルールのXML版How-Toでは、XML文書で提供される運転者データを使用して運転者情報を指定し、この章で作成するビジネス・ルールを使用してレンタカー会社のサービス担当が(定義するレンタカー会社のビジネス・ポリシーに従って)運転者の年齢制限により車両の貸出しを断る必要があるかどうかを判断します。

この章の内容は次のとおりです。

4.1 Rule AuthorでのXML文書およびスキーマの使用の概要

Rule Authorを使用して、XML要素をデータ・モデルにインポートし、条件式にXML要素を使用してルールを記述できます。たとえば、アプリケーションに関連するデータが格納されているXML文書があり、そのXML文書にスキーマが関連付けられている場合は、Rule Authorを使用して、指定の要素に基づいてXMLスキーマからルールを定義できます。

Rule AuthorでXML文書を使用して、XMLスキーマに着手する際に必要な手順は、次のとおりです。

  1. Rule Authorは、Java Architecture for XML Binding(JAXB)パッケージ、クラス、およびXMLスキーマに対するインタフェースを生成するために、提供されるJAXBコンパイラを実行することで、XMLスキーマからJavaクラスを生成します。

  2. ディクショナリのデータ・モデルにXML要素をインポートします。

  3. XML文書からのXML要素に基づいてビジネス・ポリシーを指定するルールを定義します。XML文書のルールを記述するプロセスは、Javaオブジェクトのルールを記述する場合とほぼ同じです。

Rule Authorでルールを作成した後は、XML文書でルールを使用するアプリケーションを記述できます。XML文書の処理を完了するには、XML文書の要素をRules Engineセッションにアサートします。


注意:

Rule Authorで提供される実装とは異なるJAXBバインディング・コンパイラを使用するには、そのJAXBバインディング・コンパイラを使用してXMLスキーマ処理を手動で実行してから、生成されたJavaパッケージとクラスをデータ・モデルにインポートできます。 


JAXBの詳細は、

http://java.sun.com/webservices/jaxb/を参照してください。

関連項目:

「レンタカー・サンプルでのファクトとしてのJavaオブジェクトの使用」 

4.2 Rule Authorユーザーの作成とRule Authorの起動

Rule Authorは、ホーム・ページのURLを入力することで起動します。ホーム・ページのURLには、通常、ホスト・コンピュータ名とインストール時にアプリケーション・サーバーに対して割り当てられたポート番号、およびRule Authorのホーム・ページのパスが含まれています。

関連項目:

「Rule Authorユーザーの作成」 を参照してください。 

4.3 XML版レンタカー・サンプルに対するディクショナリの作成および保存

Rule Authorでの作業は、ディクショナリから着手する必要があります。Rule Authorでは、ルールおよび関連する定義をディクショナリに格納します。ディクショナリを作成または保存するには、ディクショナリを格納するリポジトリに接続する必要があります。出荷時のRule Authorでは、WebDAV(Web Distributed Authoring and Versioning)リポジトリとファイル・リポジトリの2種類のリポジトリがサポートされています。

ここでは、WebDAVリポジトリを使用してXML版How-Toのディクショナリを作成し、保存します。


注意:

この章に記載されているディクショナリを作成するには、(WebDAVリポジトリまたはファイル・リポジトリを使用して)新しいディクショナリを作成するか、あるいはHow-Toとともに提供される$HowToDir/dictディレクトリから完全なディクショナリをロードできます。$HowToDirには、XML版How-Toをインストールしたディレクトリが入ります。 


内容は次のとおりです。

4.3.1 Rule Authorリポジトリへの接続

Oracle Business Rulesでは、ディクショナリには、ルールおよびそのルールに関連付けられているデータ・モデルが格納されます。


注意:

使用するリポジトリ(WebDAVリポジトリまたはファイル・リポジトリ)の選択に関係なく、リポジトリに接続するためには、リポジトリが存在している必要があります。詳細は、付録B「リポジトリを利用したRule AuthorとRules SDKの使用」を参照してください。 


リポジトリに接続する手順は、次のとおりです。

  1. 「リポジトリ」タブをクリックします。

  2. 「接続」第2タブをクリックします。

  3. 「リポジトリ・タイプ」フィールドで「WebDAV」リポジトリ・タイプを選択します。

  4. URLをWebDAVリポジトリに入力します(図4-1を参照)。URLは次の形式で指定する必要があります。

    http://www.fully_qualified_host_name.com:7777/repository_name
    


    注意:

    認証が実行されるように、URLには完全修飾ホスト名を使用する必要があります。 


    図 4-1    Rule Authorの「リポジトリ」タブにある「接続」ページ


    画像の説明

    WebDAVリポジトリの設定方法の詳細は、B.1項「WebDAVリポジトリの使用」を参照してください。

  5. Rule Authorが実行されているサーバーとWebDAVサーバーとの間にプロキシ・サーバーがある場合は、(プロキシ・サーバーでの必要に応じて)「プロキシ・ユーザー名」フィールドと「プロキシ・パスワード」フィールドに値を指定します。

  6. 「接続」をクリックします。接続すると、Rule Authorによって確認メッセージが表示されます。


    注意:

    ファイル・リポジトリの場合、所定の時間にリポジトリを編集できるのは、そのリポジトリに格納されているディクショナリ数に関係なく常に1人のユーザーのみです。WebDAVリポジトリの場合は、1人のユーザーが複数のディクショナリを同時に編集できます。 


4.3.2 Rule Authorディクショナリの作成

ディクショナリは最上位コンテナであり、Rule Authorで作業する起点となります。ディクショナリは、通常、アプリケーションのルール部分に対応しています。

ディクショナリを作成する手順は、次のとおりです。

  1. 「リポジトリ」タブからリポジトリに接続します。

  2. 「作成」第2タブをクリックします。

  3. 「新規ディクショナリ名」フィールドにディクショナリ名を入力します。この例では、CarRentalxmlと入力します。

  4. 「作成」をクリックします。「作成」をクリックすると、ステータス・メッセージが表示されます(図4-2を参照)。

    図 4-2    Rule Authorの「ディクショナリを作成」(XML)


    画像の説明

4.3.3 Rule Authorディクショナリのバージョン付き保存

別のディクショナリ名で保存する場合や現行のディクショナリにバージョンを指定する場合は、次のように「別名保存」領域を使用します。

  1. 「リポジトリ」タブをクリックします。

  2. 「別名保存」第2タブをクリックします。

  3. 「ディクショナリ」フィールドにディクショナリ名を入力します(CarRentalxmlなど)。

  4. ディクショナリに関連付けられているバージョンを指定するには、「バージョン」フィールドにテキストを入力します。たとえば、HowToxmlと入力します。

  5. 「別名保存」をクリックします。「別名保存」をクリックすると、Rule Authorによって確認メッセージが表示されます(図4-3を参照)。

    図 4-3    Rule Authorの「ディクショナリの保存」(XML)


    画像の説明

4.3.4 Rule Authorディクショナリの保存

データの消失を防止するために、ディクショナリを定期的に保存してください。ディクショナリを保存するには、次のいずれかを実行します。

前述のいずれかの操作を実行した後、「ディクショナリの保存」ページの「保存」をクリックします。「保存」をクリックすると、ステータス領域に確認メッセージが表示されます。次に例を示します。

Dictionary 'CarRentalxml(HowToxml)' has been saved

関連項目:

Rule Authorセッションのタイムアウトの構成に関する詳細と、タイムアウトが発生した場合にRule Authorが現在の作業をディクショナリ・バージョンに自動的に保存する方法の詳細は、「Rule Authorのセッション・タイムアウト」を参照してください。 

4.4 XML版レンタカー・サンプルに対するデータ・モデルの定義

ルールでの作業前に、データ・モデルを定義する必要があります。データ・モデルには、Javaクラス・ファクト・タイプ、XMLファクト・タイプおよびRL Languageファクト・タイプなど、ルールで使用されるファクトやデータ・オブジェクトに関するビジネス・データ定義が格納されます。ここでは、XMLファクト・タイプが格納されているデータ・モデルのみを取り扱います。

内容は次のとおりです。

4.4.1 XML版レンタカー・サンプルでのファクトとしてのXMLスキーマの使用

XMLサンプルには、$HowToDir/dataディレクトリのcarrental.xsdファイルが格納されています。このファイルは、ファクトをアサートするためにXML文書を使用するXML版レンタカー・サンプルのスキーマを指定します。スキーマ定義にアクセスするには、$HowToDirを、XML How-Toをインストールしたディレクトリに置換します。

4.4.2 レンタカー・サンプルに対するXMLファクトの追加(XMLスキーマ処理)

データ・モデルでXML要素を使用する前に、Rule Authorを使用して、XML要素を表すJAXBクラスを生成する必要があります。ここでは、JAXBクラスを生成し、XMLスキーマに関連付けられている生成したクラスとパッケージをRule Authorで参照できるようにします。

Rule Authorを使用してXML版レンタカー・サンプル・スキーマを準備する手順は、次のとおりです。

  1. CarRentalxmlディクショナリを作成した直後の場合は、2へ進んでください。「リポジトリ」タブをクリックし、CarRentalxmlディクショナリをロードします。

  2. 「定義」タブをクリックします。使用可能な定義が格納された「定義」フォルダがナビゲーション・ツリーに表示されます。

  3. ツリーの「定義」フォルダには「ファクト」フォルダが表示されます。この「ファクト」フォルダには、使用可能なファクト・タイプ(JavaファクトXMLファクトおよびRLファクト)が含まれています。

    「XMLファクト」をクリックして「XMLファクト・サマリー」ページを表示します(図4-4を参照)。

    図 4-4    Rule Authorの「定義」タブにある「XMLファクト・サマリー」ページ


    画像の説明

  4. 「作成」をクリックします。「XMLスキーマ・セレクタ」ページが表示されます。

  5. 「XMLスキーマ・セレクタ」ページで、「XMLスキーマ」フィールドにスキーマに対するパスまたはHTTP URLを入力します。次に例を示します。

  6. 「JAXBクラス・ディレクトリ」フィールドに、Rule AuthorでJAXB生成クラスを格納するディレクトリを入力します。書込み可能なディレクトリを指定する必要があります。たとえば、c:/temp/xmlと入力します。

  7. 「ターゲット・パッケージ名」フィールドに値を入力します。このフィールドを空のままにすると、JAXBクラス・パッケージ名は、JAXBによるXMLからJavaへのデフォルトのマッピング・ルールを使用して、XMLスキーマのXMLターゲット名前空間から生成されます。たとえば、名前空間rules.oracle.comはcom.oracle.rulesにマップされます。

    入力した値は、生成されるクラス・パッケージ名になります。たとえば、generatedという名前を使用します(図4-5を参照)。この例では、generatedという名前を使用しますが、この名前に特別な意味はありません。この名前で、生成されたクラスのパッケージが指定されます。

    図 4-5    Rule AuthorのXMLスキーマ選択ページ


    画像の説明

  8. 「スキーマの追加」をクリックします。

    この手順では、Rule Authorがスキーマを処理し、JAXBをコンパイルするのにしばらくの時間を要するため、スキーマのサイズによっては、この手順が完了するまで待機する必要があります。この手順が完了すると「スキーマの追加」テキスト入力フィールドが空白になり、Rule Authorによって「現在のXMLスキーマ」フィールドが更新され、「生成したJAXBクラス」領域が表示されます(図4-6を参照)。

    図 4-6    Rule Authorの「定義」タグにある「XMLスキーマ・セレクタ」(XMLスキーマ追加後)


    画像の説明


    注意:

    JAXBは、XML構成名を異なるJava識別名にマップすることがあります。たとえば、JAXB生成クラスでは、my-element-nameというXML名はmyElementNameになります。Rule AuthorによってXML構成名が提供されるため、JAXBで生成されるXMLからJavaへの名前マッピングを理解する必要がなくなります。 


    関連項目:

    「XML版レンタカー・サンプルに対するディクショナリの作成および保存」 

4.4.3 データ・モデルへのXMLスキーマ要素のインポート

ここでは、XMLスキーマ要素を表すJAXB生成クラスを(サンプル・スキーマcarrental.xsdから)データ・モデルに移動します。「定義」タブから「XMLスキーマ・セレクタ」ページを使用して、データ・モデルにインポートするXML要素を選択します。

DriverTypeをスキーマからデータ・モデルに追加する手順は、次のとおりです。

  1. 「定義」タブをクリックして「定義」ページを表示します。

  2. ナビゲーション・ツリーで「XMLファクト」フォルダをクリックします。

  3. 「XMLファクト・サマリー」ページで「作成」をクリックします。「XMLスキーマ・セレクタ」ページが表示されます。

  4. 「XMLスキーマ・セレクタ」ページの「生成したJAXBクラス」ボックスで、「DriverType」が表示されるまでナビゲーション・ツリーを開きます。

  5. generatedフォルダのチェック・ボックスを選択します。

  6. 「インポート」をクリックします。

    「1つのクラスまたはパッケージがインポートされました。」という確認メッセージが表示されます。

  7. 「生成したJAXBクラス」領域のgeneratedノードを開き、インポートされたクラスを確認します(図4-7を参照)。


    注意:

    インポートされた要素は太字で表示されます。 


    図 4-7    Rule Authorの「XMLスキーマ・セレクタ」の確認メッセージ


    画像の説明

XMLスキーマをRule Authorに追加する際の注意点は、次のとおりです。

4.4.4 データ・モデルでのXMLファクトの表示

JAXB生成クラスまたはインポートしたパッケージを含めたXMLファクトをデータ・モデルに表示する手順は、次のとおりです。

  1. 「定義」タブをクリックして「定義」ページを表示します。

  2. ナビゲーション・ツリーで、「ファクト」フォルダを開き、「XMLファクト」ノードをクリックして「XMLファクト・サマリー」ページを表示します。

    XML版レンタカー・サンプルでは、インポートされたDriverTypeクラス、RepositoryTypeクラス、RepositoryクラスおよびObjectFactoryクラスを含むXMLファクト表が表示されます。

  3. 編集アイコンをクリックして、XMLファクトのプロパティとメソッドの表を表示します。


    画像の説明


    注意:

    Javaクラスのインポートでは、そのすべてのスーパークラスと、フィールドおよびメソッドを介して関連付けられたクラスは、データ・モデルにインポートされません。これらのクラスに正しくアクセスするために、明示的にデータ・モデルにインポートする必要があります。 


    関連項目:

    XMLファクトのプロパティとメソッドの表の「参照可能」フィールドと「拡張」フィールドの詳細は、「Rule Authorのリストに関する参照可能性およびオブジェクト・チェーンの指定」を参照してください。 

4.4.5 現状のXMLファクト定義の保存

「定義」タブでデータ・モデルを操作している場合、および作業を完了する場合は、ディクショナリを保存してください。

ディクショナリを保存する手順は、次のとおりです。

  1. ページ上部の「ディクショナリの保存」リンクをクリックします。

  2. 「ディクショナリの保存」ページで「保存」をクリックします。

4.5 XML版レンタカー・サンプルに対するビジネス用語の定義

ビジネス用語を使用することで、ビジネス・アナリストは、XML名やJavaパッケージ名、クラス名、メソッド名またはメンバー変数名を使用せずに、簡単に理解できる名前を使用してルールを作成できます。Rule Authorには別名機能が用意されています。この機能を使用すると、ビジネスマン向けの用語を使用してルールのビジネス・オブジェクトまたはファクトを参照できます。唯一必要な手順は、ルールに使用する予定のビジネス・オブジェクトに対してビジネス用語を定義することです。また、「ルールセット」タブからルールを作成する際は、Rule Authorの「参照可能」ボックスを使用して、Rule Authorのリストに表示するプロパティとメソッドを指定します。

内容は次のとおりです。

4.5.1 XMLファクト定義に対するビジネス用語の指定

XMLファクト定義に対してビジネス用語を指定する手順は、次のとおりです。

  1. 「定義」タブをクリックして「定義」ページを表示します。

  2. ナビゲーション・ツリーで、「ファクト」フォルダを開き、「XMLファクト」ノードをクリックして「XMLファクト・サマリー」ページを表示します。XML版レンタカー・サンプルでは、generated.DriverTypeクラスを含む表が表示されます(generated以外のパッケージ名を指定した場合、パッケージ名はgeneratedとは異なります)。

  3. DriverTypeの編集アイコンをクリックします。「XMLファクト」ページが表示されます。

  4. 「XMLファクト」ページ上部の「エイリアス」フィールドにDriverDataと入力します。

  5. 「プロパティ」表のageエントリに対して、適切な別名を指定します。たとえば、「エイリアス」フィールドにDriverAgeと入力します。

  6. 「プロパティ」表のnameエントリに対して、適切な別名を指定します。たとえば、「エイリアス」フィールドにDriverNameと入力します。

  7. 「OK」または「適用」をクリックします。

  8. ディクショナリを保存します。


    注意:

    変更後は必ず「OK」または「適用」をクリックしてください。いずれかのボタンをクリックしないと、Rule Authorでは変更内容が保存されません。 


XMLファクト定義に対してビジネス用語を指定する際の注意点は、次のとおりです。

4.5.2 関数に対するビジネス用語の指定

RL Language関数に対してビジネス用語を指定する手順は、次のとおりです。

  1. 「定義」タブをクリックして「定義」ページを表示します。

  2. ナビゲーション・ツリーで、「定義」フォルダの「RL関数」をクリックし、「RL関数サマリー」ページを表示します。XML版レンタカー・サンプルでは、DM.assertXPath関数およびDM.println関数を含む表が表示されます。

  3. DM.println関数について、「編集」フィールドの編集アイコンをクリックして詳細を表示します。

  4. 「名前」フィールドの下にある「エイリアス」フィールドに別名を入力します。たとえば、「エイリアス」フィールドにPrintOutputと入力します。


    注意:

    「エイリアス」フィールドは「関数の引数」表にもあります。この例のような場合は、「関数の引数」の「エイリアス」フィールドを変更しないでください。 


  5. 「OK」または「適用」をクリックします。

  6. ディクショナリを保存します。

4.5.3 XMLファクトのプロパティとメソッドに対する参照可能性の指定

プロパティまたはメソッドがRule Authorのリストで参照可能かどうかを指定する手順は、次のとおりです。

  1. 「定義」タブをクリックして「定義」ページを表示します。

  2. ナビゲーション・ツリーで、「XMLファクト」ノードをクリックして「XMLファクト・サマリー」ページを表示します。

  3. 編集アイコンをクリックして、DriverTypeに対するXMLファクトのプロパティとメソッドを表示します(表では、このエントリの値は「エイリアス」列のDriverDataです)。「XMLファクト」ページが表示されます。

  4. 「プロパティ」表と「メソッド」表の各エントリについて、「参照可能」チェック・ボックスを使用して適切な参照可能性を指定します。この例では、メンバー変数ageおよびnameのみを参照可能にする必要があります。

  5. 「OK」または「適用」をクリックして変更内容を保存します。

  6. ディクショナリを保存します。


    注意:

    特定のプロパティまたはメソッドに対する参照可能インジケータを変更すると、依存する定義またはルールが誤って表示されることがあります。この状況が発生する場合は、問題の原因となっている参照不可のプロパティまたはメソッドを参照可能に設定してください。 


4.6 XML版レンタカー・サンプルに対するルールの定義

ここでは、XML版レンタカー・サンプルのルールを定義します。

内容は次のとおりです。

4.6.1 XML版レンタカー・サンプルに対するルールセットの作成

ルールを作成する前に、ルールセットを作成する必要があります。ルールセットとはルールのコンテナです。

ルールセットを作成する手順は、次のとおりです。

  1. 「ルールセット」タブをクリックします。

  2. ナビゲーション・ツリーで「ルールセット」ノードをクリックします。

  3. 「ルールセット・サマリー」ページで、「作成」をクリックします。「ルールセット」ページが表示されます。

  4. 「名前」フィールドに名前を入力します。たとえば、vehicleRentと入力します。

  5. (オプション)「説明」フィールドにテキストを入力します。たとえば、vehicle rent rule setと入力します。

  6. 「OK」をクリックします。vehicleRentルールセットが作成されます。ルールセットを作成すると、図4-8のように新しいエントリがツリーに表示されます。

  7. ディクショナリを保存します。

    図 4-8    Rule Authorの「ルールセット・サマリー」ページ


    画像の説明

4.6.2 XML版レンタカー・サンプルに対するルールの作成

ルールセットを作成した後は、ルールセットにルールを作成できます。ここでは、UnderAgeルールを作成します。UnderAgeルールは、次の内容をテストします。

If the age of the driver is younger than 21, then decline to rent

UnderAgeルールには、Rules Engineが照合する単一のパターンと、そのパターンに適用されるテストが指定されます。

次のアクションがUnderAgeルールに関連付けられます。

4.6.2.1 XML版レンタカー・サンプルに対するUnderAgeルールの追加

Rule Authorを使用してUnderAgeルールを追加する手順は、次のとおりです。

  1. 「ルールセット」タブをクリックします。ナビゲーション・ペインには、4.6.1項で作成したvehicleRentルールセットが格納された「ルールセット」フォルダが表示されます。

  2. ナビゲーション・ツリーで、vehicleRentノードをクリックします。「ルールセット」ページが表示され、ルールが表にリストされます(図4-9を参照)。


    注意:

    ルールがない場合、「ルール」表は空です。 


    図 4-9    「作成」ボタンが表示されているRule Authorの「ルールセット」ページ


    画像の説明

  3. 「作成」をクリックします。「ルール」ページが表示されます。

  4. 「ルール」ページで、「名前」フィールドにUnderAgeと入力します。

  5. 「ルール」ページで、「優先度」フィールドに0を入力します。


    注意:

    「優先度」フィールドは、複数のルールを適用する場合に、どのルールをどのような順序で適用するかを決定します。ルールを使用するアプリケーションの多くでは、これが未決定でルールセット内のルールは順不同で適用され、また、優先度の設定も必須ではありません。 


  6. (オプション)「説明」フィールドに説明を入力します(図4-10を参照)。

    図 4-10    Rule Authorの「ルール」ページ


    画像の説明

4.6.2.2 UnderAgeルールに対するパターンの追加(XML)

Rules Engineを実行すると、ルールを使用して、一致するパターンに使用可能なファクトがチェックされます。UnderAgeルールのパターンを追加する手順は、次のとおりです。

  1. 「ルール」ページで、「if」ボックスの「新規パターン」をクリックします。「パターン定義」ページが表示されます。

    「パターン定義」ページには、「パターンの選択」と「パターンのテストを定義」の2つの領域があります(図4-11を参照)。


    注意:

    「パターン定義」ページが表示されない場合は、ブラウザのポップアップ遮断機能が使用可能になっている可能性があります。Rule Authorを使用するには、ポップアップ遮断機能を使用不可にする必要があります。 


    図 4-11    Rule Authorの「パターン定義」ページ


    画像の説明

  2. 「パターンの選択」の下にある最初のボックスで、最初のエントリ(空白)を選択します。

    このボックスは、一致するたびに(一致するすべての運転者に)、ルールを起動することを指定します。別の値の1つである「次のケースが少なくとも1つある」は、少なくとも1つが一致する(そのような運転者が1人いる)場合に、ルールを1回起動することを選択します。別の値の「次のケースがない」は、一致しない(一致する運転者がいない)場合に、ルールを1回起動することを指定します。

  3. 「パターンの選択」の下にある隣の領域には、一致したファクトに暫定的な名前を入力できます。

    このフィールドにdriverと入力(パターンのバインド変数名を定義)します。

    このフィールドを使用して、単一のルールで同じタイプの複数のインスタンスをテストできます。たとえば、driver1.age > driver2.ageなどの比較で、指定した名前を使用して、ある運転者と他の運転者を比較できます。

  4. 3番目のボックスには、<make a choice>というテキストが表示されます。このボックスには、使用可能なファクト・タイプが表示されます。このボックスで、DriverDataを選択します。

  5. 「OK」をクリックし、パターン定義を保存して「パターン定義」ページを閉じます。

  6. 「ルール」ページで、「OK」または「適用」をクリックしてルールを保存します。


    注意:

    パターンの変更内容は、「ルール」ページで「OK」または「適用」をクリックするまで、ルールには追加されません。「OK」または「適用」をクリックせずに別のルールセットにナビゲートしたり、異なるタブを選択すると、パターン定義の変更内容は破棄されます。 


  7. ディクショナリを保存します。

パターンに対してテストが定義されていないと、定義するアクションはすべての運転者に適用されます。パターンにテストを定義するには、4.6.2.3項の説明に従って操作を続行します。

関連項目:

「UnderAgeルールに対するアクションの追加(XML)」 

4.6.2.3 UnderAgeルールでのパターンに対するテストの定義(XML)

パターンに対してテストを追加する手順は、次のとおりです。

  1. 「ルールセット」タブから、テストを追加するルールをナビゲーション・ツリーでクリックします。この例では、UnderAgeルールのノードをクリックします。

  2. 「ルール」ページの「if」表で、鉛筆アイコンを選択し、このルールの「パターン定義」ページを表示します。

  3. 「パターン定義」ページで、「標準テスト」ボタンを選択し、次に「作成」をクリックします(図4-12を参照)。詳細は、3.8.1項「「アドバンスト・テスト式」オプションの使用」を参照してください。

    図 4-12    Rule Authorのルールの「パターン定義」ページの「新規テスト」フィールド


    画像の説明

  4. 「オペランド」列で、「フィールド」ボックスからdriver.DriverAgeを選択します。

  5. 「演算子」列で、<(より小さい)を選択します。

  6. 次の「オペランド」列で、「値」ボックスに21を入力します。「フィールド」ボックスには値を入力しません。

  7. 「値」ボックスと「フィールド」ボックスの横には、FixedAnyの値を備えたリストがあります(図4-13を参照)。

    「値」フィールドの制約としてAnyを選択します。

    これらの値は制約と呼ばれます。制約値を使用してカスタマイズを有効化または無効化します。Fixed値を使用して、フィールドを読取り専用にします。これは、この値に対してカスタマイズを禁止することを指定します。Any値を選択すると、Rule Authorでの値の変更が許可されることを指定します。Anyの値を設定すると、ルールをカスタマイズできます(専門外のユーザーによる変更がサポートされます)。許可する値を制限する制約も定義できます。

    図 4-13    年齢制限ルールの値が表示されたRule Authorの「パターン定義」ページ


    画像の説明

  8. 「OK」をクリックし、変更内容を保存して「パターン定義」ページを閉じます。

  9. 「ルール」ページで、「OK」または「適用」をクリックします。


    注意:

    パターンの変更内容は、「ルール」ページで「OK」または「適用」をクリックするまで、ルールには追加されません。「OK」または「適用」をクリックしないと、ルールに対する変更内容は保存されません 


  10. ディクショナリを保存します。

パターンに対してテストを追加する際の注意点は、次のとおりです。

4.6.2.4 UnderAgeルールに対するアクションの追加(XML)

アクションはパターン一致と関連しています。実行時に、ルールの「if」部が一致すると、ルールに関連付けられているアクションを実行するために、Rules Engineによって「then」部が実行されます。

ここでは、UnderAgeルールに対して2つのアクションを追加します。第1のアクションは結果の出力です。第2のアクションは、Rules Engineからの運転者ファクトの取消しです。次のような様々な理由で、ファクトの取消しが必要になることがあります。

UnderAgeルールの一致に関する結果を出力するアクションを追加する手順は、次のとおりです。

  1. 「ルールセット」タブをクリックします。

  2. ツリーで、vehicleRentフォルダの下のUnderAgeルールのノードをクリックします。

  3. 「ルール」ページで、「then」ボックスの「新規アクション」をクリックします。「アクションの追加」ページが表示されます(図4-14を参照)。

    図 4-14    Rule Authorの「アクションの追加」ページ


    画像の説明

  4. 「アクション・タイプ」ボックスからCall項目を選択します。「アクション・パラメータ」ボックスが表示されます。

  5. 「関数」ボックスからPrintOutputprintlnの別名を定義していない場合はDM.println)を選択します。「関数の引数」ボックスが表示されます。

  6. 「引数の値」フィールドに引数の値を入力します(図4-15を参照)。

    "Rental declined" + driver.DriverName + " Under age,age is:" + driver.DriverAge 
    


    注意1:

    Rule Authorでは、Javaに類似した構文を式に対して使用します。RL Languageでは、完全な式の構文を定義します。 



    注意2:

    「ウィザード」フィールド内で編集アイコンを選択し、ウィザードを使用して式を入力することもできます。このウィザードでは、式を記述するための追加領域が提供されます。また、ウィザードには使用可能な変数のリストも用意されているため、変数をより簡単かつ正確に入力することができます。 


    図 4-15    UnderAgeルールに関するRule Authorの「アクションの追加」ページ


    画像の説明

  7. 「OK」をクリックし、変更内容を保存して「アクションの追加」ページを閉じます。

  8. 「ルール」ページで、「OK」または「適用」をクリックします。

  9. 変更内容を保存するためにディクショナリを保存します。

次に、UnderAgeルールに対して取消しアクションを追加します。次の手順を実行し、この第2のアクションをルールに追加します。

  1. 「ルールセット」タブをクリックします。

  2. vehicleRentフォルダの下のUnderAgeルールのノードをクリックします。

  3. 「ルール」ページで、「then」ボックスから「新規アクション」をクリックします。「アクションの追加」ページが表示されます。

  4. 「アクション・タイプ」ボックスからRetractを選択します。「アクション・パラメータ」ボックスが表示されます。

  5. 「ファクト・インスタンス」ボックスからdriverを選択します。アクションで使用される場合、パターン名(driver)は、パターンが一致した単一のインスタンスを参照します。

  6. 「OK」をクリックし、変更内容を保存して「アクションの追加」ページを閉じます。

  7. 「ルール」ページで、「OK」または「適用」をクリックして変更内容を保存します(図4-16を参照)。

  8. ディクショナリを保存します。

    図 4-16    Rule Authorの年齢制限ルールのパターンとアクション


    画像の説明


    注意:

    アクションをルールに追加する場合、連続して追加できるのは新しいアクションのみです。あるアクションがそれ以前のアクションの結果に依存する場合は、アクションを追加する順序が重要になります。 


    関連項目:

    『Oracle Business Rulesランゲージ・リファレンス』 

4.7 XML版レンタカー・サンプルに対するルールのカスタマイズ

Rule Authorの「カスタマイズ」タブは、ビジネス・ユーザー用に設計されています。ルール開発者は、「ルールセット」タブから使用できる「パターン定義」ページの許可された値のフィールドを使用して、カスタマイズを許可するかどうかを指定します。カスタマイズが許可されている場合は、カスタマイズ可能な値について、値の範囲を指定できます。その結果、ビジネス・ユーザーは「カスタマイズ」タブを使用して値を変更できます。

この例では、「カスタマイズ」タブで、運転者の年齢制限を変更するようにUnderAgeルールを変更できます(このサンプルでは、値に制限はなく、あらゆる指定値が有効です)。

「カスタマイズ」タブを使用してUnderAgeルールを変更する手順は、次のとおりです。

  1. 「カスタマイズ」タブをクリックします。ナビゲーション・ペインにはvehicleRentフォルダが表示され、その下に、後ろにアスタリスク(*)の付いたUnderAgeルールのノードが表示されています。このアスタリスクは、ルールがカスタマイズ可能なことを示しています。

  2. UnderAgeルールのノードをクリックします(図4-17を参照)。

    図 4-17    年齢制限ルールに関するRule Authorの「ルールのカスタマイズ」ページ


    画像の説明

  3. 「ルールのカスタマイズ」ページの「パターンのカスタマイズ」ボックスには、driver.DriverAge < 21のテストを編集できるテキスト入力フィールドがあります。

    このフィールドに19を入力(21から19に値を変更)します。

  4. 「適用」をクリックします。

  5. ディクショナリを保存します。

ディクショナリを保存すると、XML版レンタカー・サンプルに対するデータ・モデルとルールの作成は終了となります。

関連項目:

「UnderAgeルールでのパターンに対するテストの定義(XML)」 

4.8 XMLファクトを使用したルール・セッションがあるJavaアプリケーションの作成

データ・モデルおよびルールを指定したルールセットが格納されているRule Authorディクショナリを作成および保存した後は、既存のJavaアプリケーションをルール対応にしたり、新しいルール対応Javaアプリケーションを作成できます。この項では、ルール対応アプリケーションを作成する手順を示します。

内容は次のとおりです。

このサンプル・アプリケーションの完全なコードは、$HowToDir/src/carrentalディレクトリのTestXML.javaを参照してください。$HowToDirには、XML How-Toをインストールしたディレクトリが入ります。


注意1:

第2章でJava版のレンタカーの例を完了している場合、この例での違いは、JAXBコンテキストを作成する必要がある点と、ファクトをルール・セッションに追加するためにassertXPath関数を使用する必要がある点です。 



注意2:

この章に前述されている項の説明に従うことで、WebDAVリポジトリおよびCarRentalxmlというディクショナリが作成および保存されています。How-Toサンプル・コードで提供されているレンタカーの例でも、CarRentalxmlという名前のディクショナリが格納されているファイル・リポジトリを使用します。この章で作成したWebDAVリポジトリと、How-Toサンプルのファイル・リポジトリのディクショナリ内容は同じです。

How-Toサンプルのコードには、WebDAVリポジトリとファイル・リポジトリの両方のコードが含まれていますが、ファイル・リポジトリのみが詳細に説明されています。How-Toサンプルでは、移植性の観点からファイル・リポジトリを使用していますが、前述の項で作成したWebDAVリポジトリを使用するように変更できます。 


4.8.1 Rules SDKおよびRules RLクラスのインポート

ルール対応プログラムを記述する最初の手順は、特定の必要なクラスのインポートです。例4-1に、XML版レンタカー・サンプルのTestXML.javaアプリケーションからのインポートを示します。

例 4-1    Rules SDKでのXML版レンタカー・サンプルに必要なインポート

package carrental;

import java.io.File;
import java.util.List;
import java.util.ArrayList;
import java.util.Properties;

import javax.xml.bind.*;

import oracle.rules.sdk.ruleset.RuleSet;
import oracle.rules.sdk.repository.RuleRepository;
import oracle.rules.sdk.repository.RepositoryManager;
import oracle.rules.sdk.repository.RepositoryType;
import oracle.rules.sdk.repository.RepositoryContext;
import oracle.rules.sdk.dictionary.RuleDictionary;
import oracle.rules.sdk.exception.RepositoryException;
import oracle.rules.sdk.store.jar.Keys;

import oracle.rules.rl.RuleSession;

4.8.2 JAXBコンテキストの作成とXML文書のアンマーシャリング

JAXB生成クラスを使用して、最初にJAXBコンテキストを指定し、次にスキーマに準拠するXML文書をアンマーシャリングする必要があります。例4-2に、このコードをTestXML.javaから示します。

例 4-2    XML文書のアンマーシャリング

JAXBContext jc = JAXBContext.newInstance("generated");
Unmarshaller um = jc.createUnmarshaller();
String fs = System.getProperty("file.separator");
String xmlpath = "data" + fs + "carrental.xml" ;
Object root = um.unmarshal(new File(xmlpath));

4.8.3 Rules SDKでのリポジトリの初期化

ルール対応Javaアプリケーションを作成する場合は、次の手順を実行し、ディクショナリにアクセスしてルールセットを指定します(例4-3を参照)。

  1. リポジトリのパスが指定されているStringを作成します。

  2. Rules SDKのRuleTypeオブジェクトを使用して、RepositoryManager.getRegisteredRepositoryTypeメソッドから取得するリポジトリを保持します。

  3. リポジトリ・マネージャのcreateRuleRepositoryInstanceメソッドを使用してリポジトリ・インスタンスを作成します。

  4. RepositoryContextを定義し、適切なプロパティを設定します。ファイル・リポジトリの場合は、repoPathパラメータに伴って記載されているように、リポジトリのパスを指定します。

  5. RuleRepositoryオブジェクトrepoinitメソッドを使用して、リポジトリ・インスタンスを初期化します。

    例 4-3    Rules SDKでのディクショナリのロード(XML)

    String repoPath = "dict" + fs + "CarxmlRepository";
    RepositoryType jarType =
       RepositoryManager.getRegisteredRepositoryType(  Keys.CONNECTION );
    RuleRepository repo = RepositoryManager.createRuleRepositoryInstance( jarType );
    RepositoryContext jarCtx = new RepositoryContext();
    jarCtx.setProperty( oracle.rules.sdk.store.jar.Keys.PATH, repoPath );
    repo.init( jarCtx );
    
    

例4-3のように、ファイル・リポジトリではなくWebDAVリポジトリをロードするには、getWebDAVRepositoryを使用してください。この例は、$HowToDir/src/carrentalディクショナリのTestXML.javaにあります。

4.8.4 Rules SDKでのディクショナリのロード

ルール対応Javaアプリケーションを作成する場合は、ディクショナリを指定バージョンでロードする必要があります。例4-4のように、RuleDictionaryオブジェクトを使用してディクショナリをロードします。この例では、CarRentalディクショナリをHowToバージョンでdictという名前のオブジェクトにロードします。CarRentalディクショナリは、リポジトリで使用可能であることが必要です(前述の項でRule Authorを使用して、バージョン名がHowToCarRentalディクショナリを作成しました)。

例 4-4    Rules SDKでのディクショナリのロード

RuleDictionary dict = repo.loadDictionary( "CarRentalxml", "HowToxml" );

4.8.5 ルールセットのロードおよびデータ・モデルとルールセットに対するRL Languageの生成

ディクショナリをロードした後は、Rules SDKを使用してRL Languageプログラムを生成できます。ディクショナリは中間XML形式を使用してデータ・モデルとルールセットを格納するため、この手順は必須です。RuleDictionaryオブジェクトは、データ・モデルとルールセットにアクセスするためのメソッドを提供し、中間XML形式からマッピングを実行します。このマッピングで、RL Languageデータ・プログラムが作成されます。

Rule Authorを使用してルールを生成する場合は、各ルールセットが2つのコンポーネント(ディクショナリのルールセットすべてに適用されるグローバルなデータ・モデルと、ルールセットに関連付けられている一連のルール)を指定します。

例4-5に、ルールセットおよび関連するデータ・モデルについてRL Languageコードを生成するコードを示します。

例 4-5    Oracle Business Rules RL Languageの生成

String rsname = "vehicleRent";String dmrl = dict.dataModelRL();String rsrl = dict.ruleSetRL( rsname );

4.8.6 ルール・セッションの初期化および実行

ルールとデータ・モデルが挿入されているRL Languageプログラムを生成すると、いつでもルール・セッションで作業できる状態になります。ルール・セッションは、Rules Engineを初期化し、多数のルール実行にわたってRules Engineの状態を保守します。

例4-6に、RuleSessionオブジェクトを作成し、RL Languageプログラムを実行するコードを示します。

executeRuleset()メソッドは、指定のRL Languageプログラムの解析をRules Engineに指示します。


注意:

executeRuleset()コールの順序は重要です。ルールセットのRL Languageプログラムを実行する前に、データ・モデルのRL Languageプログラムを実行する必要があります。データ・モデルには、関連するルールセットを実行するときに必要なグローバル情報が格納されます。 


例 4-6    Rules SDKでのルール・セッションの初期化および実行(XML)

RuleSession session = new RuleSession();
session.executeRuleset( dmrl );
session.executeRuleset( rsrl );

session.callFunction( "reset" );        
session.callFunction( "clearRulesetStack"  );
session.callFunctionWithArgument( "pushRuleset", rsname );

データ・モデルとルールセットがロードされると、ルール・セッションは、そのルール・セッション用にアサートするファクトに対して、いつでもルールセットを実行できる状態になります。

4.8.7 ルール・セッション内からのXMLデータのアサート

ルール・セッションを実行する前に、XMLデータが格納されているXML文書をアンマーシャリングし、次にXML文書からファクトをアサートする必要があります。4.8.2項に、XML文書のアンマーシャリング方法を示します。

XML文書からファクトをアサートするには、assertXPath関数を引数に指定してsession.callFunctionWithArgument()メソッドを使用します。

例4-7に、assertXPathを使用してXMLファクトをルール・セッションにアサートするサンプル・コードを示します。

callFunctionWithArgumentListメソッドには、関数名引数とリスト引数が必要です。リスト引数argListには、次の3つの引数が含まれます。

  1. assertXPathの第1引数は、JAXBで生成したパッケージ名です。この例ではgeneratedです。

  2. assertXPathの第2引数は、アンマーシャリングされたXML文書のルート・オブジェクトです。この例では、アンマーシャリングされたオブジェクト参照はrootオブジェクトです。

  3. assertXPathの第3引数は、アサートするXPath式です。この例では、"//*"によってXMLツリー全体がsessionという名前のルール・セッションにアサートされます。

    例 4-7    XML文書のアサート

    List argList = new ArrayList(3);
    argList.add( "generated" );
    argList.add( root );
    argList.add( "//*" ); 
    session.callFunctionWithArgumentList( "assertXPath", argList );
    

    関連項目:

    「JAXBコンテキストの作成とXML文書のアンマーシャリング」 

4.8.8 ルール・セッションでの実行関数の使用

例4-8に、ルール・セッションを実行するコードを示します。

例 4-8    Oracle Rules Engineセッションの実行

session.callFunction( "run");

4.9 テスト・プログラムを使用したXML版レンタカー・サンプルの実行

$HowToDir/libディレクトリには、TestXML.jarが格納されています。これは、CarRentalxmlディクショナリを使用するOracle Business Rules Javaアプリケーションで、ただちに実行できます。ディクショナリ名を変更して、TestXML.javaを修正する必要がある場合、ソースは$HowToDir/srcディレクトリにあります。このディレクトリのReadme.txtファイルには、テスト・プログラムの実行に必要な環境変数の設定について指示が記載されています。$HowToDirには、XML版How-Toをインストールしたディレクトリが入ります。

例4-9に、実行しているTestXMLからの出力を示します。

例 4-9    レンタカー・プログラムの実行サンプル(XML)

java carrental.TestXMLRental declined Qun Under age, age is: 15

すべてのファクトが出力を生成したり、ルールを起動するとはかぎりません。この例では、UnderAgeルールと一致してアサートされたファクトについてのみ出力が表示されます。


戻る 次へ
Oracle
Copyright © 2005, 2006, Oracle Corporation.

All Rights Reserved.
目次
目次
索引
索引