はじめに
HP Rulesは、条件ロジック文をソースコードとデータベースから分離することを可能とするルールエンジンで、条件ロジックを再利用可能なファイルに配置することにより、それらを独立して定義および管理できるようにします。
本記事では、以下の方法について説明します。
- PHP Rulesをインストールし、テキストファイルまたはデータベースに格納されたルールを実行する
- 特定のケースから始めて、独自のルールを作成する
- テキストファイルに格納されたルールを評価する
- データベースに格納されたルールを評価する
PHP Rulesのダウンロードとインストール
PHP Rulesは、ここからダウンロードできます。そのページの一番下に[Download and install PHP Rules](PHP Rulesのダウンロードとインストール)というタイトルのセクションがあります。以下の手順に従って、PHP Rulesをインストールします。
- アーカイブrules.zipをダウンロードします。
- アーカイブを
htdocs
ディレクトリにunzipします。 - パス
htdocs/rules/system/application/config
において、ローカルなパラメータに基づいてデータベースを設定します。 - ホスト名、ユーザー名、パスワードなどを設定します。
- MySQLに「rules」という名前の新しいデータベースを作成します。
- パス
rules/index.php
で、スクリプトindex.phpを実行します。 - 2つの例をインストールするには、[install wizard]リンクを選択します(図1参照)。
- 最後に、[Install the Demo Database](デモデータベースのインストール)ボタンをクリックします(図2参照)。
http://localhost/rules/index.php/rules/install/dbのページには、図3に示すように2つの例へのリンクがあります。
PHP Rulesの使用
2つの例が示すように、命題結果を得るには、まずRuleファイルとRuleContextファイルを作成する必要があります。Ruleファイルは、命題、演算子、変数によって記述された、事実を表す簡単な文で構成されます。RuleContextファイルには、プレーンテキストとして保存されているか、またはデータベース内に格納されたルールに対して、テストしたいデータが含まれます。Ruleファイルは、RuleContextファイルを評価し、RuleContextファイル内の情報がRuleを満たすかどうかを示すBoolean
値を返します。
本記事では、ルールファイルが例に対応しています。本記事のサンプルコードはすべてダウンロードすることができます。2つのテキストファイルSuitableForScholarship.rulおよびSuitableForScholarship.txt.conと、リレーショナルデータベースファイルSuitableForScholarship.sql.conは、rules/data
ディレクトリに格納されています。これらのルール例では、学生が奨学金の受給に適しているかどうかを判断するために、テキストファイルとデータベースの両方に格納されたRuleContextデータに対するテストを行います。奨学金を得るために学生が満たすべきルールは、以下のとおりです。
- 学生の年間平均成績が9.5
- または、学生が全国コンテストに出場し、かつ、優勝した経験がある
- 学生が高校に在籍している
- 学生の両親が、学生が奨学金を申請することに同意している
上記のルールを構成するRuleファイルは、以下のSuitableForScholarShip.rulのようになります。
# SuitableForScholarShip.rul # Rule establishing when a student can # gets an international scholarship studentAnnualAverage EQUALS 9.5 studentIsParticipatingToContest IS true studentIsGettingFirstPrize IS true AND OR studentIsInHighschool IS true studentParentsAreAgree IS true AND AND
ルールでは、大文字と小文字が区別されます。「is TRUE」、「Is True」、「equals」など、ルールのキーワードやフレーズの大文字と小文字を間違えると、エラーが生じます。
SuitableForScholarShip.rulファイルは、「.rul
」という拡張子が付いたプレーンのテキストファイルであることに注意してください。ルール自体は、逆ポーランド記法(RPN)で記述します。RPNについては、ここを参照してください。
これらのルールをボトムアップに「変換」すると、次のようになります。
(studentParentsAreAgree AND studentIsInHighschool) AND ((studentIsGettingFirstPrize AND studentIsParticipatingToContest) OR studentAnnualAverage)
本記事の2つの例では、同一のSuitableForScholarShip.rulファイルを使用しますが、RuleContextファイルが異なります。