JP2005525630A - 推論サービスを提供するためのシステム及び方法 - Google Patents
推論サービスを提供するためのシステム及び方法 Download PDFInfo
- Publication number
- JP2005525630A JP2005525630A JP2003586834A JP2003586834A JP2005525630A JP 2005525630 A JP2005525630 A JP 2005525630A JP 2003586834 A JP2003586834 A JP 2003586834A JP 2003586834 A JP2003586834 A JP 2003586834A JP 2005525630 A JP2005525630 A JP 2005525630A
- Authority
- JP
- Japan
- Prior art keywords
- rule
- rules
- value
- field
- rule base
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F17/00—Digital computing or data processing equipment or methods, specially adapted for specific functions
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N5/00—Computing arrangements using knowledge-based models
- G06N5/02—Knowledge representation; Symbolic representation
- G06N5/022—Knowledge engineering; Knowledge acquisition
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N5/00—Computing arrangements using knowledge-based models
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N5/00—Computing arrangements using knowledge-based models
- G06N5/04—Inference or reasoning models
- G06N5/046—Forward inferencing; Production systems
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- Data Mining & Analysis (AREA)
- Mathematical Physics (AREA)
- Evolutionary Computation (AREA)
- Computing Systems (AREA)
- Computational Linguistics (AREA)
- Artificial Intelligence (AREA)
- Databases & Information Systems (AREA)
- Devices For Executing Special Programs (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Stored Programmes (AREA)
- Computer And Data Communications (AREA)
- Management, Administration, Business Operations System, And Electronic Commerce (AREA)
Abstract
推論サービスを提供する方法が、指定されたドメインのための複数の規則を受け取ることを含む。本方法はまた、規則に関連付けられた事前条件及び規則に関連付けられた事後条件を識別することを含む。事前条件とは、規則を実行する際に使用される入力であり、事後条件とは、規則の実行からの出力である。本方法は、さらに、事前条件に対応する入力値を受け取ることを含む。その上、本方法は、入力値を使用して規則の少なくとも一部分を実行し、出力値を生成することを含む。出力値は、事後条件に対応する。
Description
本発明は、一般に、エキスパートシステムの分野、より詳細には、推論サービスを提供するためのシステム及び方法に関する。
医学分野や法律分野などの特定分野における諸問題を解決するために、エキスパートシステムがしばしば使用されている。たとえば、エキスパートシステムは、患者の症状を識別する情報を受け取り、その症状を分析し、その患者にとって可能な診断を識別することができる。代表的なエキスパートシステムには、エキスパートシステムによって使用される論理を具現化したルールベース、即ち1組の規則が含まれている。代表的なエキスパートシステムには、推論エンジンも含まれている。推論エンジンは、一般に、ある患者が罹っている症状などの、1組の入力を分析するための規則を実行する。規則を実行する場合に、推論エンジンは、一般に、1組の出力値に値を割り当てようとする。出力値とは、推論エンジンの結論である。
概要
本発明は、推論サービスを提供するためのシステム及び方法を提供する。特に、推論エンジンは、アプリケーションプログラムインターフェース(API)などの、柔軟性のあるインターフェースと合わせて使用されることがある。ユーザ又はアプリケーションは、推論エンジンを起動して、識別されたルールベースを使用し、推論演算を実施することがある。ルールベースは、拡張マーク付け言語(XML)を使用して定義されることがある。次いで、推論エンジンは、識別されたルールベース内の指定されたドメインのための規則を実行し、起動しているユーザ又はアプリケーションに、その推論結果を返す。
本発明は、推論サービスを提供するためのシステム及び方法を提供する。特に、推論エンジンは、アプリケーションプログラムインターフェース(API)などの、柔軟性のあるインターフェースと合わせて使用されることがある。ユーザ又はアプリケーションは、推論エンジンを起動して、識別されたルールベースを使用し、推論演算を実施することがある。ルールベースは、拡張マーク付け言語(XML)を使用して定義されることがある。次いで、推論エンジンは、識別されたルールベース内の指定されたドメインのための規則を実行し、起動しているユーザ又はアプリケーションに、その推論結果を返す。
一実施形態においては、推論サービスを提供する方法は、指定されたドメインのための複数の規則を受け取ることを含む。この方法はまた、規則に関連付けられた少なくとも1つの事前条件と、規則に関連付けられた少なくとも1つの事後条件とを識別することを含む。それぞれの事前条件とは、規則を実行する際に使用される入力であり、それぞれの事後条件とは、規則の実行からの出力である。この方法は、事前条件に対応する入力値を受け取ることをさらに含む。その上、この方法は、入力値を使用して、規則の少なくとも一部分を実行し、出力値を生成することを含む。出力値は、事後条件に対応する。
別の実施形態においては、推論サービスを提供する方法は、指定されたドメインのための複数の第1の規則を受け取ることを含み、この規則は、第1のルールベースの少なくとも一部分を含む。この方法はまた、第1の規則をメモリ内にロードすることを含む。この方法は、第2のドメインを補足ルールベースからメモリ内にロードすることをさらに含む。その上、この方法は、第2のドメイン内の規則に対して第1の規則を部分推論することを含む。
さらに別の実施形態においては、推論サービスを提供する方法は、指定されたドメインのための複数の規則の少なくとも一部分を実行することを含む。規則の少なくとも1つが、式を含む。この方法はまた、規則内の式を解くのに必要なフィールドが未知の値を有している場合に規則の1つを保留するステップと、決定木規則を保留した式に関連付けられた2進ステートメントを識別するステップとを含む。この方法は、規則を保留したフィールドに既知の値を割り当てるステップと、規則をアンペンドするステップとをさらに含む。その上、この方法は、識別された2進ステートメントで規則の実行を再始動することを含む。
次に、本発明をより完全に理解するために、添付図面と合わせ、以下の記述を参照する。
実施形態の例の詳細な説明
図1は、本発明の一実施形態による推論サービスを提供するためのシステム100の例を示す例示的ブロック図である。例示されている実施形態においては、システム100は、サーバ102と、データベース104と、ネットワーク106と、1つ以上のクライアント108とを含む。
図1は、本発明の一実施形態による推論サービスを提供するためのシステム100の例を示す例示的ブロック図である。例示されている実施形態においては、システム100は、サーバ102と、データベース104と、ネットワーク106と、1つ以上のクライアント108とを含む。
オペレーションの一態様においては、サーバ102は、ルールベースビルダ110と推論エンジン112とを含むことがある。ルールベースビルダ110は、1つ以上のルールベース114の作成及び修正をサポートする。ルールベース114は、推論演算を実施するために推論エンジン112によって使用される論理を具現化する規則116を含む。たとえば、ルールベース114は、如何に患者の症状を分析し、その患者にとって可能な診断を識別するかを定義することがある。推論エンジン112は、システム100内で推論演算を実施することがある。たとえば、推論エンジン112は、1つ以上の入力値を受け取り、ルールベース114を使用してその入力値を分析し、1つ以上の出力値を生成することができる。次いで、この出力値を、ユーザが患者の診断を利用できるようにするなど、様々な目的に使用することができる。
例示されている実施形態においては、サーバ102は、ネットワーク106に結合される。本文書においては、「結合する」という用語は、2つ以上の構成要素が互いに物理的接触をしているかどうかに関わらず、それらの構成要素間の直接的又は間接的な通信を意味する。また、「通信」という用語は、物理的に別個の構成要素間、又は1つの物理ユニット内の構成要素間の通信を意味することがある。サーバ102は、システム100内のルールベース114の作成及び使用に関連する1つ以上の機能を実施する。たとえば、サーバ102は、ルールベース114を作成し、修正し、消去することができる。サーバ102はまた、ルールベース114を使用して、推論演算を実施することができる。サーバ102は、ルールベースビルディング及び推論機能を実施するよう動作可能な、任意のハードウェア、ソフトウェア、ファームウェア、又はそれらの組み合わせを含むことがある。
データベース104は、サーバ102に結合される。データベース104は、サーバ102によって使用される情報を格納し、その検索を容易にする。たとえば、データベース104は、ルールベースビルダ110によって作成され、かつ推論エンジン112によって使用される1つ以上のルールベース114を格納することがある。データベース104は、情報を格納し、かつその検索を容易にするよう動作可能な、任意のハードウェア、ソフトウェア、ファームウェア、又はそれらの組み合わせを含むことができる。また、データベース104は、情報を格納し、かつその検索を容易にするための、様々なデータ構造、配置、及びコンパイルのうちのいずれかを使用することがある。
ネットワーク106は、サーバ102及びクライアント108に結合される。ネットワーク106は、システム100の構成要素間の通信を容易にする。ネットワーク106は、たとえば、インターネットプロトコル(IP)パケット、フレームリレーフレーム、非同期的転送モード(ATM)セル、又はネットワークアドレス間の他の好適な情報を通信することがある。ネットワーク106は、1つ以上のローカルエリアネットワーク(LAN)、メトロポリタンエリアネットワーク(MAN)、ワイドエリアネットワーク(WAN)、インターネットなどのグローバルネットワークのすべて又は一部分、又は1つ以上の場所における他の1つまたは複数の通信システムを含むことがある。
クライアント108は、ネットワーク106に結合される。クライアント108は、システム100内の様々な機能のいずれかを実施することがある。たとえば、クライアント108は、サーバ102内のルールベースビルダ110及び推論エンジン112の機能を起動できるクライアントアプリケーション122を含むことができる。特定の例として、クライアントアプリケーション122により、推論エンジン112は、クライアントアプリケーション122によって識別されたルールベース114を使用して、推論演算を実施することができる。クライアント108とは、プログラマ又は他のユーザが、ルールベースビルダ110を使用して、様々なルールベース114を作成し、修正し、又は消去することがある端末でもあり得る。クライアント108は、サーバ102と通信するよう動作可能な、任意のハードウェア、ソフトウェア、ファームウェア、又はそれらの組み合わせを含むことがある。
例示されている例においては、サーバ102は、プロセッサ124とメモリ126とを含む。プロセッサ124は、命令を実行し、データを操作して、サーバ102のオペレーションを実施する。図1は、サーバ102内の1つのプロセッサ124を示しているが、特定のニーズにより、複数のプロセッサ124が使用されることがある。メモリ126は、サーバ102の機能を実施するためにプロセッサ124によって使用される情報を格納し、その検索を容易にする。メモリ126は、たとえば、プロセッサ124によって実施される命令、及びプロセッサ124によって使用されるデータを格納することがある。メモリ126は、情報を格納し、かつその検索を容易にするよう動作可能な、任意のハードウェア、ソフトウェア、ファームウェア、又はそれらの組み合わせを含むことがある。
例示されている実施形態においては、サーバ102は、ルールベースビルダ110と、推論エンジン112と、ツール128とを含む。特定の実施形態においては、ルールベースビルダ110又は推論エンジン112がクライアントアプリケーション122によって起動された場合には、サーバ102は、ルールベースビルダインスタンス又は推論エンジンインスタンスを作成する。次いで、サーバ102によって生成されたインスタンスを使用して、クライアントアプリケーション122にサービスを提供することがある。第2のクライアントアプリケーション122が、ルールベースビルダ110又は推論エンジン112を起動しようとすると、第2のクライアントアプリケーション122のために、別個のインスタンスが作成されることがある。同様に、第1のクライアントアプリケーション122が、複数のスレッドを使用し、それぞれのスレッドでルールベースビルダ110又は推論エンジン112を起動すると、それぞれのスレッドのために、別個のインスタンスが生成され得る。このことにより、サーバ102が、複数のクライアント108に、かつ複数のスレッド上に、ルールベースビルディング及び推論機能を同時に提供することが可能となる。他の実施形態においては、サーバ102は、それぞれのクライアントアプリケーション122又はスレッドのために、インスタンスを作成する必要がない。その上、以下の記述においては、ルールベースビルダ110及び推論エンジン112を、特定の機能を実施するものとして記述することがある。この記述には、特定の機能がルールベースビルダインスタンス又は推論エンジンインスタンスによって実施されるような状況が含まれる。
ルールベースビルダ110は、システム100内のルールベース114の作成、修正、及び消去を容易にする。ルールベース114は、システム100内の推論機能を実施するために、推論エンジン112によって使用される1つ以上の規則116を定義する。たとえば、ルールベース114は、情報を格納するデータオブジェクト、及びデータオブジェクト内の情報に作用する方法及び規則を指定する論理オブジェクトを定義することができる。特定の例として、データオブジェクトは、患者の症状を格納することができ、論理オブジェクトは、その症状を分析し、診断を計算しようとする。規則の例が図9A及び図9Bに示されているが、これについて以下に記述する。
ルールベース114は、任意のフォーマットを使用して定義された任意の数の規則116を含むことがある。一実施形態においては、ルールベース114は、拡張マーク付け言語(XML)を使用して定義された規則116を包含する。特定の実施形態においては、ルールベース114は、規則定義言語(RDL)を使用して定義された規則116を包含する。これについては、以下に記述する。また、ルールベース114が、複数のセクション又は部分に区分されることがある。たとえば、ルールベース114は異なるセクションに分割でき、1つのセクションは、データオブジェクトを定義し、別のセクションは、データオブジェクト上で動作する論理オブジェクトを定義する。別の例として、ルールベース114は、複数のルールセット130から形成され、それぞれのルールセット130が、共通の事柄に関連付けられた1つ以上の規則116を包含する。ルールベース114は、さらに、複数のルールセット130を含むことがある、複数のドメイン130から形成され得る。ルールベースアーキテクチャの例が図4に示されているが、これについて以下に記述する。
ルールベースビルダ110は、様々なルールベース構成要素を統合されたルールベース114にマージすることにより、システム100内のルールベース114の作成をサポートする。たとえば、ルールベースビルダ110は、1組の規則116、ルールセット130、及びルールベース114を、1つのルールベース114に組み合わせることがある。ルールベースビルダ110はまた、その結果生じた、統合されたルールベース114を解析して、規則116間の完全性及び整合性を確実にする一助となることができる。特定の例として、異なる開発チームが、異なる規則116、ルールベース114、又はルールセット130を別個に作成し、ルールベースビルダ110が、様々な構成要素を1つのルールベース114にマージすることができる。別の例として、1つの開発チームは、1組のデータオブジェクトを作成し、別の開発チームは、そのデータオブジェクトを処理する1組の論理オブジェクトを作成することができる。次いで、ルールベースビルダ110が、データ及び論理オブジェクトをルールベース114にマージすることができる。
統合されたルールベース114にマージされた様々なルールベース構成要素は、いくつかの形式で存在することができる。たとえば、マージされたルールベース114は、コンパイルされていないソースルールベース114又はコンパイルされた2進ルールベース114として存在することができる。2進ルールベース114を使用することにより、サードパーティベンダは、市場に出して顧客に販売することのできる2進ルールベース114を作成することができる。ルールベース114が2進形式であるために、ルールベース114の実際のコンテンツは、より保護され得る。2進ルールベース114を取得した顧客は、それを他のルールベース114にマージするだけで良い。顧客は、2進ルールベース114を形成している実際の規則116にアクセスする必要がない。
ルールベースビルダ110はまた、様々なルールベース構成要素を標準フォーマットに変換する。たとえば、システム100内のルールベース114は、XMLの規則定義言語などの、デフォルト又は標準フォーマットを有することができる。ルールベースビルダ110が、異なるフォーマットを有する構成要素を使用して、統合されたルールベース114を作成することを、クライアントアプリケーション122が要求すると、ルールベースビルダ110は、その構成要素を標準フォーマットに変換し、再フォーマットすることができる。次いで、ルールベースビルダ110は、再フォーマット化された構成要素を使用して、統合されたルールベース114を生成することができる。このことにより、ユーザは、ルールベースビルダ110及び推論エンジン112によって使用される標準フォーマット以外のフォーマットで、ルールベース114を書き込むことができる。
ルールベースビルダ110は、さらに、ソースルールベース114をコンパイルして、2進ルールベース114を作成する。一例として、ルールベースビルダ110は、規則定義言語に準拠しているXML文書で定義されたソースルールベース114をコンパイルすることができる。コンパイルした結果、ルールベースビルダ110は、推論エンジン112が推論演算を実施するために使用する、2進バージョンのルールベース114を作成する。ルールベース114をコンパイルすることは、推論エンジン112の演算効率を向上させる一助となり、また、ルールベース114のプライバシーを保護し、かつそれに関わるセキュリティを向上させる一助ともなり得る。情報が如何に、規則定義言語によって定義される統合されたルールベース114にマージされるかについて、以下に記述する。
ルールベースビルダ110は、ルールベース114を作成し、かつ維持するよう動作可能な、任意のハードウェア、ソフトウェア、ファームウェア、又はそれらの組み合わせを含むことができる。たとえば、ルールベースビルダ110は、プロセッサ124によって実行される1つ以上のソフトウェアルーチンを含むことができる。ルールベースビルダの実施形態の例が図5A及び図5Bに示されているが、これについて以下に記述する。
推論エンジン112は、サーバ102の推論機能を実施する。たとえば、推論エンジン112は、1つ以上のルールベース114にアクセスし、使用される規則116を識別する。推論エンジン112はまた、クライアントアプリケーション122から入力値を受け取り、この入力値を使用して規則116を実行することがある。本文書において、「実行する」という用語は、最低限、推論エンジン112が、規則116の少なくとも一部分を調べて、規則116のアクションを実施すべきかどうかを判断することを意味する。次いで、推論エンジン112は、推論演算の結果をクライアントアプリケーション122に返す。
一実施形態においては、推論エンジン112によって使用される規則116は、属性又はフィールドを包含するか、または参照する。既知の値又は定義された値を有するフィールドは、「既知の状態」で存在する「既知のフィールド」を意味し、未知の値又は未定義の値を有するフィールドは、「未知の状態」で存在する「未知のフィールド」を意味することがある。推論中に、推論エンジン112は、規則116を使用して、既知の値を未知のフィールドに割り当てようと試みる。
オペレーションの一態様においては、推論エンジン112は、ルールベース114内の規則116を調べて、規則116をファイアし、フェイルし、又は保留することがある。推論エンジン112は、規則116内の前提を調べ、この前提が真であることを発見し、規則116内で指定されているアクションを実施する場合には、規則116を「ファイアする」。推論エンジン112は、規則116内の前提を調べ、この前提が偽であることを発見し、規則116内で指定されているアクションを実施することを拒絶する場合には、規則116を「フェイルする」。推論エンジン112は、規則116内の前提を調べ、この前提が真であるとも偽であるとも決断できないと判断した場合には、規則116を「保留する」。このことは、その前提が未知の値を有するフィールドを伴う場合に生じることがある。推論エンジン112は、その後、フィールドに既知の値が割り当てられた後、保留中の規則116をファイア又はフェイルしようとすることがある。
推論エンジン112は、1つ又は複数の戦略を用いて、ルールベース114内の規則116を実行することがある。一実施形態においては、推論エンジン112は、ルールベース114内の規則116の前向き連鎖及び後ろ向き連鎖をサポートする。一般に、前向き連鎖においては、推論エンジン112は、既知の状態に置かれたルールベース114内の未知のフィールドの数を最大化しようとする。前向き連鎖においては、推論エンジン112は、規則116をファイアし、その結果、どのフィールドが既知の状態に解決されたかを判断する。次いで、推論エンジン112は、任意の保留中の規則116を再訪問し、これらの保留中の規則116をファイア又はフェイルできるかどうかを判断する。推論エンジン112は、規則116をこれ以上ファイア又はフェイルできなくなるか、又は任意の保留中の規則116を実行するまで、このプロセスを続行する。
後ろ向き連鎖においては、一般に、推論エンジン112は、ある事前条件が特定の成果を保証するかどうか、又は識別されたフィールドを解決するかどうかを判断するなどの、一次目標を解決しようとする。推論エンジン112は、最初に、識別された目標を恐らく解決することのできる規則116を訪問する。規則116が未知のフィールドのために保留すると、推論エンジン112は、未知のフィールドを二次目標のリストに追加する。次いで、推論エンジン112は、一次又は二次目標のいずれかを恐らく解決することのできる規則116を訪問する。推論エンジン112は、一次目標が解決されるか、又は実行できる規則116がもはやなくなるまで、このプロセスを続行する。
推論演算を実施する際に、推論エンジン112は、ルールベース114内の規則116を実行する。一実施形態においては、規則116が実行される順序は、少なくとも一部分は、規則116に関連付けられた優先順位に依存する。上述したように、規則116はルールセット130内に常駐し、ルールセット130はドメイン131内に常駐することがある。クライアントアプリケーション122が、推論中に使用されるドメイン131を識別した場合には、推論エンジン112は、そのドメイン131内に包含されている無条件ルールセット130をメモリ126にロードする。次いで、推論エンジン112により、ドメイン131内に包含されている規則116が、それらの優先順位に従って順序付けられることが確実となる。その後、推論エンジン112は、それらの優先順で、規則116を実行する。
一実施形態においては、推論エンジン112は、推論演算を実施する場合に、単調推論を強制実施する。単調推論においては、いったん推論エンジン112がフィールド値により規則をファイア又はフェイルした場合は、その後の推論中はこのフィールドの値を変えるべきではなく、もし変えた場合には、推論の整合性が損なわれることがあると想定している。何故なら、結果が、矛盾する規則のアクションを反映していることがあるからである。推論エンジン112は、いつフィールドの値が規則の前提によって試験されたかを検出することがある。後に、フィールドの値が変更すると、推論エンジンは、これを単調推論違反として取り扱い、この違反をユーザに警告することがある。
フィールドは、初期値が割り当てられた後、フィールドの値が変更しないことがあるので、「第1の値フィールド」と呼ばれることがある。他のフィールドは、何回も変更することのある値を有する「最終値フィールド」と呼ばれることがある。最終値フィールドを使用することは、たとえばルールベース114内でカウンタが必要な場合に有用であり得る。特定の例として、ルールベース114は、1群のルールセット130を含むことができ、それぞれのルールセット130は、納税者がある税の免除を請求できるかどうかを判断することができる。ルールベース114はまた、納税者が請求できる免除額を追跡するカウンタを含むことができる。推論エンジン112がそれぞれのルールセット130を実行する度に、その納税者に免除の資格がある場合に、カウンタが増分され得る。この例においては、ルールセット130のすべてが実行されるまで、カウンタの有用な値が分らず、推論エンジン112は、カウンタを何回も増分することができる。
第1の値フィールドと最終値フィールドとの間の違いが、推論中に規則116が実行される順序に影響を及ぼすことがある。たとえば、多数の規則116は、最終値フィールドの値を変更することができる。推論エンジン112は、最終値フィールドの値を変更することのできる規則116のすべてが実行されるまで、前提内で最終値フィールドを使用する規則116をファイア又はフェイルできないことがある。税の例に戻ると、推論エンジン112は、免除額を扱うルールセット130のすべてが実行されるまで、納税者が支払うべき税を計算する規則116を保留するよう強制され得る。
推論エンジン112はまた、補足規則116、ルールベース114、及びルールセット130の使用をサポートすることができる。補足ルールベース114とは、推論中に一次ルールベース114に加えて使用できるルールベースである。たとえば、保険会社は、その本社が設定した一次ルールベース114を持つことができ、それぞれの支店は、その支店の方針を定義する補足ルールベース114を持つことができる。補足ルールベース114を使用するために、推論エンジン112は、一次ルールベース114を受け取り、メモリ126内にロードすることができる。次いで、一次ルールベース114内の規則は、補足ルールベースからドメインをロードし、これらのドメイン内の規則を部分推論することができる。一実施形態においては、一次ルールベース114と補足ルールベース114との間の通信が、補足ルールベースの事前条件及び事後条件を介して生じることがある。特定の実施形態においては、補足ルールベース114は、一次ルールベース114内の任意のオブジェクトを直接参照せず、このことが、恐らく「不良な」補足ルールベース114から一次ルールベース114を引き離すための一助となり得る。補足ルールベース114はまた、一次ルールベース114とは異なる推論エンジンインスタンスに関連付けられ得る。この例においては、一次ルールベース114は、補足ルールベース114を運転する「アプリケーション」として作用することができる。補足ルールベース114から見て、一次ルールベース114は、アプリケーションと区別不可能なことがある。一次ルールベース114は、1つ又は複数の補足ルールベース114をロードすることができ、次いで、それぞれの補足ルールベース114は、1つ又は複数の追加補足ルールベース114をロードすることができる。
推論エンジン112はまた、一連の推論及び部分推論をサポートすることができる。一連の推論においては、推論エンジン112は、第1のドメイン131を使用して推論演算を実施し、1組の出力値を作成する。次いで、推論エンジン112は、これらの出力値を第2のドメイン131のための入力値として使用し、第2のドメイン131を使用して推論演算を実施する。このことは、たとえば、第1のドメイン131が、納税者が受け取る権利を有する免除額を計算し、第2のドメイン131が、その免除額に基づいて納税者が支払うべき税を計算する場合に有用であり得る。部分推論においては、推論エンジン112は、第1のドメイン131を使用して推論演算を実施し、第1のドメイン131内の規則116の1つが、第2のドメイン131を使用して推論を起動することがある。その規則116がファイアされた場合には、推論エンジン112は、第2のドメイン131をロードし、その第2のドメイン131を使用して推論演算を実施する。いったん推論エンジン112が第2のドメイン131を使用して推論を完了すると、推論エンジン112は、第1のドメイン131を使用するために戻ることがある。第2のドメイン131内の規則116を実行することにより、第1のドメイン内の規則116がアンペンドすることがあるが、推論エンジン112は、第1のドメイン131に戻ると直ぐにこれを実行する。
推論エンジン112は、1つ以上の推論演算を実施するよう動作可能な、任意のハードウェア、ソフトウェア、ファームウェア、又はそれらの組み合わせを含むことができる。推論エンジン112は、たとえば、プロセッサ124によって実行される1つ以上のソフトウェアルーチンを含むことができる。推論エンジン112の実施形態の例が図6A〜図6Cに示されているが、これについて以下に記述する。
クライアントアプリケーション122とルールベースビルダ110との間の通信を容易にするために、ルールベースビルダ110は、アプリケーションプログラムインターフェース(API)118を含むか、又はこれに関連付けられることがある。同様に、推論エンジン112は、API120を含むか又はこれに関連付けられることがある。API118、120により、クライアントアプリケーション122は、ルールベースビルダ110及び推論エンジン112の機能を起動することができる。たとえば、クライアントアプリケーション122は、ルールベース114の識別情報をAPI118を通じてルールベースビルダ110に供給することにより、2つのルールベース114をマージするよう、ルールベースビルダ110に指示することができる。同様の方法で、クライアントアプリケーション122は、ルールベース114の識別情報及び入力値をAPI120を通じて推論エンジン112に供給することにより、推論エンジン112の推論機能を起動することができる。
特定の実施形態においては、ルールベースビルダ110は、ステートレスAPI118、ステートフルAPI118、又はその両方に関連付けられ得る。同様に、推論エンジン112も、ステートレスAPI120、ステートフルAPI120、又はその両方に関連付けられ得る。ステートフルAPI118、120は、サーバ102と通信するクライアントアプリケーション122を必要とする、セッション指向の状態情報を保持することがある。状態情報とは、たとえば、サーバ102とクライアントアプリケーション122が動作しているクライアント108との間に生じているセッションの現在のステータスであり得る。ステートレスAPI118、120は、サーバ102と通信するクライアントアプリケーション122を必要とする、セッション指向の状態情報を保持しないことがある。
ステートレスAPI118、120は、ネットワーク106を介する遠隔サービスとして、ルールベースビルダ110又は推論エンジン112を起動するために使用され得る。ステートフルAPI118、120により、サーバ102は、サーバ102にアクセスしているクライアントアプリケーション122に追加機能を提供できる。たとえば、ステートフルAPI118、120を使用することにより、サーバ102は、「コールバック」を提供することができる。コールバック中に、ルールベースビルダ110又は推論エンジン112は、ルールベースビルディング又は推論中に、クライアントアプリケーション122に追加情報を要求するか又は情報を供給する。このことにより、たとえば、サーバ102は、フィールド値の変更がいつ生じるかをクライアントアプリケーション122に知らせることができる。
コールバックにより、サーバ102が、事前条件値又は他の値を初期設定するよう起動する方法を定義することもできる。たとえば、サーバ102は、クライアントアプリケーション122が、「最後のチャンスの処理」中に生じることのある、特定のフィールドのための既知の値を提供するよう要求することができる。推論中に、推論エンジン112は、フィールドが解決できない未知の値を有するために、推論を完了できないことがある。これが生じた場合には、推論エンジン112は、クライアントアプリケーション122に、未知のフィールドのための値を提供するよう頼むことができる。クライアントアプリケーション122がその値を提供すると、推論エンジン112は、推論演算を続行するか又は完了することができる。別の実施形態においては、ルールベース114は、最後のチャンスの処理中に使用する最後のチャンスの値を提供することができる。この実施形態においては、推論中に推論エンジン112がそのフィールドの値を解決できない場合に、推論エンジン112は、フィールドのための最後のチャンスの値を使用する。推論エンジン112がクライアントアプリケーション122に第1の値を要求したが、クライアントアプリケーション122が第1の値を提供できない場合に、ルールベース114からの第2の値を使用する場合などに、これらのアプローチを組み合わせて使用することもできる。
ツール128は、システム100内のルールベース114の開発及び維持を支援する。たとえば、ルールエディタ132は、ユーザが規則116を作成するのを支援する。ルールエディタ132により、ユーザは、規則116を作成し、編集することができる。特定の例として、ルールエディタ132により、ユーザは、規則116を包含するXML文書を作成し、規則116を包含する既存のXML文書を編集し、規則116を包含するXML文書を消去することができる。
ツール128はまた、1つ以上のトランスフォーマ133も含むことがある。トランスフォーマ133は、規則116を、あるフォーマットから異なるフォーマットに変換する。たとえば、トランスフォーマ133は、自然言語を用いて定義された規則116を受け取り、この規則116をXMLフォーマットに変換することができる。このことにより、ユーザは、より簡単な表記法又は文法を用いて規則116を入力することができる。一実施形態においては、トランスフォーマ133は、インフィックスからXMLにJava符号化されたユーティリティアプリケーションを含むことができる。グラフィカルエディタ又はドロップダウンメカニズムなどの他のトランスフォーマ133も使用されることがある。
ツール128は、さらに、1つ以上のアナライザ134を含むことがある。アナライザ134は、2進又はソースルールベース114を調べ、データオブジェクトと規則116との間の関係を識別する。たとえば、ユーザは、特定のデータオブジェクトを識別し、アナライザ134は、データオブジェクトから値を読み取る又はデータオブジェクトに値を書き込む規則116を識別することがある。
ツール128はまた、1つ以上のデバッガ136を含むことがある。デバッガ136は、推論中に規則116の実行を監視する。たとえば、デバッガ136は、推論エンジン112に供給された入力値、推論中にファイアされた規則116、規則116がファイアされる順序、及びそれぞれの規則116がファイアされた理由を識別することができる。次いで、この情報を使用して、生じた推論演算を分析することがある。このことは、ルールベース114が適切な結果を提供しないので、ユーザが、何故ルールベース114が期待通りに動作しなかったのかを識別することを望む場合に有用であり得る。
その上、ツール128は、1つ以上のテスタ138を含むことがある。テスタ138は、ルールベース114、ルールセット130、又は1組の規則116が意図した通りに機能することを確実にすることにより、ユーザを支援する。たとえば、テスタ138は、ルールベース114、1組の入力値、及び1組の期待される出力値を識別する情報を受け取ることができる。次いで、テスタ138は、識別されたルールベース114及び入力値を用いて推論エンジン112を起動し、計算された出力値を推論エンジン112から受け取り、計算された出力値が期待される出力値に合致するかどうかを判断する。特定の実施形態においては、テスタ138は、複数の組の入力値及び対応する出力値を包含するライブラリにアクセスして、識別されたルールベース114を試験することができる。
それぞれのツール128は、システム100内の1つ以上の機能を実施するよう動作可能な、任意のハードウェア、ソフトウェア、ファームウェア、又はそれらの組み合わせを含むことができる。また、それぞれのツール128は、API118、120を使用して、ルールベースビルダ110又は推論エンジン112内の機能を起動することができる。
一実施形態においては、ルールベース114は、それ自体のデータオブジェクトを定義することができ、またルールベース114は、ルールベース114内に埋め込まれた論理に依拠するアプリケーションとは無関係に開発され、使用され得る。たとえば、専用クライアントアプリケーション122が1群のユーザによって開発され、別の1群のユーザが、クライアントアプリケーション122によって使用されるルールベース114を開発することができる。特定の例として、ルールベース114又はルールベース114内のドメイン131は、事前条件、又は入力値、及び事後条件、又は出力値を定義することができる。ルールベース114を開発しているユーザは、事前条件及び事後条件を識別することができ、次いで、クライアントアプリケーション122を開発しているユーザは、適切な事前条件を推論エンジン112に伝え、かつ推論エンジン112から適切な事後条件を受け取るように、クライアントアプリケーション122が設計されることを確実にすれば良い。また、ルールベース114は、ルールベース114を使用して推論を起動するクライアントアプリケーション122とは別に、それ自体のデータオブジェクトを定義することができるので、複数のクライアントアプリケーション122がルールベース114を共用することができる。これらのクライアントアプリケーション122は、たとえ1つのクライアントアプリケーション122のための推論が、別のクライアントアプリケーション122のための推論に、部分的に又は完全にオーバラップしていても、同じルールベース114を使用して推論を起動することができる。
図1は、推論サービスを提供するためのシステム100の例を示しているが、システム100に対しては様々な変更が行われ得る。たとえば、図1は、サーバ102の機能部分の一例を示している。サーバ102の様々な構成要素を組み合わせるか又は省略することがあり、特定のニーズにより、追加構成要素を追加することがある。特定の例として、ルールベースビルダ110又は推論エンジン112をサーバ102から省略することができ、又はルールベースビルダ110及び推論エンジン112が、別個のプラットフォーム上に常駐することができる。また、データベース104は、システム100内に必要に応じて他の任意の情報を格納することができ、データベース104及びメモリ126は、サーバ102からアクセスできる1つ又は複数の場所に常駐することができる。さらに、サーバ102は、他の又は追加のツール128をサポートすることができ、ルールベース114は、データベース104以外の場所に常駐することができる。その上、推論エンジン112は、規則116の前向き連鎖又は後ろ向き連鎖のいずれかをサポートすることができ、ルールベースビルダ110及び推論エンジン112への他のインターフェースを、システム100内で使用することもできる。
図2は、本発明の一実施形態による推論サービスを提供するためのシステム200の別の例を示す例示的ブロック図である。例示されている実施形態においては、システム200は、サーバ202と、データベース204と、ネットワーク206と、1つ以上のクライアント208とを含む。
サーバ202、データベース204、ネットワーク206、及びクライアント208は、図1のサーバ102、データベース104、ネットワーク106、及びクライアント108と同じか又は同様であり得る。この実施形態においては、ルールベースビルダ210及び推論エンジン212は、サーバアプリケーション250の一部分を形成する。サーバアプリケーション250とは、クライアントアプリケーション222がネットワーク206を介して起動することのできるアプリケーションである。サーバアプリケーション250は、たとえば、医学又は法律分野に関連付けられたアプリケーションなどの、エキスパートアプリケーションであり得る。
オペレーションの一態様においては、サーバアプリケーション250は、クライアントアプリケーション222から要求を受け取って、ルールベース214をビルドするか又は推論演算を実施することができる。サーバアプリケーション250は、ルールベースビルダ210又は推論エンジン212のインスタンスを作成し、そのインスタンスが好適なオペレーションを実施できるようにする。
例示されている実施形態においては、サーバアプリケーション250は、サーバAPI252を含む。サーバAPI252により、クライアントアプリケーション222は、サーバアプリケーション250の機能を起動することができる。たとえば、クライアントアプリケーション222は、ルールベースビルダインスタンスを作成するサーバアプリケーション250の機能を起動することができ、クライアントアプリケーション222は、複数のソースルールベース214を識別することができる。サーバアプリケーション250は、サーバAPI252を通じて受け取られた情報をルールベースビルダインスタンスに渡すことができ、これにより、ルールベースビルダインスタンスは、識別されたルールベース214をマージし、コンパイルすることができる。サーバAPI252とは、ステートフルインターフェース、ステートレスインターフェース、又は他のインターフェース、又はインターフェースの組み合わせであり得る。
特定の実施形態においては、サーバアプリケーション250とは、Javaアプリケーション、J2EEサーブレット、エンタプライズJavaBeans(EJB)アプリケーション、JavaServerPages(JSP)アプリケーション、又は他の好適なアプリケーションである。この実施形態においては、API218、220は、サーバアプリケーション250がローカルサービスとして起動することのできるステートフルインターフェースを含むことがある。その上、サーバアプリケーション250は、クライアントアプリケーション222により、遠隔サービスとしてAPI252を通じて起動され得る。
図2は、推論サービスを提供するためのシステム200の例を示しているが、システム200に対しては様々な変更が行われ得る。たとえば、図2は、サーバ202の機能部分の一例を示しているが、サーバ202の様々な構成要素を組み合わせたり又は省略したりすることがあり、特定のニーズにより、追加構成要素を追加することがある。特定の例として、ルールベースエンジン210又は推論エンジン212を、サーバ202から省略することができる。
図3は、本発明の一実施形態による推論サービスを提供するためのシステム300のさらに別の例を示す例示的ブロック図である。例示されている実施形態においては、システム300は、アプリケーション362を実行するホストコンピュータ360を含む。
例示されている実施形態においては、ホスト360は、周知のMS−DOS、PC−DOS、OS−2、MAC−OS、WINDOWS、UNIX、LINUX、又は他の適切なオペレーティングシステムのいずれかと共に実行することがある。ホスト360とは、デスクトップコンピュータ、ラップトップコンピュータ、サーバコンピュータ、又は他の好適な計算又は通信デバイスであり得る。ホスト360は、入力デバイス364、出力デバイス366、ランダムアクセスメモリ(RAM)368、読取り専用メモリ(ROM)370、CD−ROM、ハードドライブ、又は他の磁気又は光学記憶デバイス372、及び1つ以上のプロセッサ374を含むことがある。入力デバイス364は、たとえば、キーボード、マウス、グラフィックスタブレット、タッチスクリーン、感圧パッド、ジョイスティック、ライトペン、マイクロホン、又は他の好適な入力デバイスを含むことがある。出力デバイス366は、たとえば、ビデオディスプレイ、プリンタ、ディスクドライブ、プロッタ、スピーカ、又は他の好適な出力デバイスを含むことがある。
図3の破線内の項目は、システム300の関連構成要素の例示的機能演算及びデータ編成を表している。例示されている実施形態においては、ホスト360は、アプリケーション362とデータベース304とを含む。データベース304は、図1及び図2のデータベース104及びデータベース204と同じか又は同様であり得る。
アプリケーション362とは、エキスパートアプリケーション、又はルールベースビルディング及び推論機能を使用する他のアプリケーションであり得る。示されている例においては、アプリケーション362は、ルールベースビルダ310と、推論エンジン312と、他のプログラミング論理374とを含む。ルールベースビルダ310は、図1のルールベースビルダ110及び図2のルールベースビルダ210と同じか又は同様であり得る。また、推論エンジン312は、図1の推論エンジン112及び図2の推論エンジン212と同じか又は同様であり得る。その上、ルールベースビルダ310及び推論エンジン312は、API318及び320を含むことがあるが、必ずしも必要なものではない。
追加プログラミング論理374とは、ルールベースビルダ310及び推論エンジン312を起動するアプリケーション362内の論理であり得る。たとえば、論理374は、ユーザから患者の症状を受け取り、その症状を推論エンジン312に渡す医療エキスパートプログラムを実施することができる。推論エンジン312が推論を実施した後、論理374は、ユーザが利用可能な診断を行うことができる。他の任意の好適な機能が、アプリケーション362内の論理374によって実施されることがある。
特定の実施形態においては、アプリケーション362とは、Javaアプリケーションであり得る。また、API318、320は、アプリケーション362内でローカルサービスとして起動できるステートフルインターフェースを含むことがある。
図3は、推論サービスを提供するためのシステム300の例を示しているが、システム300に対しては様々な変更が行われ得る。たとえば、図3は、ホスト360の機能部分の一例を示しているが、ホスト360の様々な構成要素を組み合わせたり又は省略したりし、特定のニーズにより、追加構成要素を追加することがある。特定の例として、ルールベースビルダ310又は推論エンジン312を、ホスト360から省略することができる。また、図3は、ホスト360をデスクトップコンピュータとして例示しているが、他の計算又は通信デバイスを使用することもできる。その上、図1〜図3は、オペレーティング環境の様々な例を示しているが、他の任意の好適な環境において、ルールベースビルダ110、210、310及び推論エンジン112、212、312を使用することもできる。
図4は、本発明の一実施形態によるルールベースアーキテクチャ400の例を示す例示的ブロック図である。この実施形態においては、ルールベースアーキテクチャ400は、ルールベースレベルの要素402と、ドメインレベルの要素404と、ルールセットレベルの要素406とを含む。ルールベースアーキテクチャ400が図1のシステム100について記述されているが、ルールベースアーキテクチャ400を他のシステムと共に使用し、システム100が他のルールベースアーキテクチャを使用することもできる。
図4では、ルールベースレベルの要素402は、クラス408と、初期設定方法410と、関連付け412と、制約414と、ドメイン416とを含む。クラス408は、情報を格納するデータオブジェクト、及びデータオブジェクト内の情報を処理する方法オブジェクトを定義する。たとえば、クラス408は、ヒトの名前、そのヒトの年齢、及びそのヒトの配偶者(あれば)の名前のためのフィールドを含むPersonオブジェクトを定義することができる。別の例として、クラス408は、Personのインスタンスを分析し、そのヒトの年齢を65の値と比較し、この比較に基づいて、そのヒトが定年退職の年齢に達したかどうかを識別するフラグを設定するRetirement方法を定義することができる。
初期設定方法410は、サーバ102が、様々なオブジェクト内のフィールドを如何に初期設定するかを定義する。たとえば、初期設定方法410は、1組のデータオブジェクト内の任意の整数フィールドをゼロの値に初期設定し、任意の文字列フィールドをナル値に初期設定することがある。初期設定方法410はまた、最高年齢フィールドを120の値に設定するなど、一定の値を設定することもできる。
関連付け412は、フィールド間の関係を定義する。たとえば、Personインスタンスが別のPersonインスタンスの配偶者であり、関連付けが、Personインスタンス間の1対1の関係を表すことがある。別の例として、Personインスタンスが複数のDuckインスタンスを所有し、関連付けが、PersonインスタンスとDuckインスタンスとの間の1対多数の関係を表すことがある。一実施形態においては、関連フィールドは、2つのクラス408内などのアーキテクチャ400と同じレベルである。特定の実施形態においては、関連付けは2つの役割によって定義される。それぞれの役割が、クラス、及びそのクラスが所有するインスタンス参照フィールドを指定する。1つのオブジェクト内のインスタンス参照フィールドが、別のオブジェクトを指す又は識別する。たとえば、所有権の関連付けが、PersonクラスのOwnsフィールドのための1つの役割、及びDuckクラスのIsOwnedByフィールドのための別の役割を定義することがある。
制約414は、フィールドに割り当てられた値に関して真であるべき条件を定義する。制約414はまた、条件に違反すると生じるアクションを定義する。たとえば、制約414は、ヒトの年齢を格納するフィールドが0〜120間の値を有するべきであることを指定することがある。Personのインスタンスに800の年齢が割り当てられた場合は、年齢フィールドに関連付けられた制約414に違反することになり、その制約414によって定義されたアクションが実行されることがある。そのアクションは、推論エンジン112が、推論を一時停止するステップと、代入値を使用するステップと、又はステートフルインターフェース120を使用して、クライアントアプリケーション122から正しい値を要求するステップとを含むことがある。
ドメイン416は、規則をドメインと呼ばれる異なるグループに分類する。それぞれのドメイン416において、ルールベースは、初期設定方法418と、関連付け420と、制約422と、クラス424と、ルールセット426とを含むことができる。初期設定方法418、関連付け420、制約422、及びクラス424は、初期設定方法410、関連付け412、制約414、及びクラス408と同じか又は同様であり得る。これらのドメインレベルの要素404は、ルールベースレベルの要素402とは異なる範囲を有することがある。たとえば、関連付け412は、ルールベースレベルに常駐する2つのクラス間の関係を定義し、関連付け420は、ドメインレベルに常駐するクラス間の関係を定義することがある。ある実施形態においては、事前及び事後条件が、主要レベルで定義されることがある。
ルールセット426は、さらに、規則をルールセットと呼ばれる異なるグループに分類する。それぞれのルールセット426において、ルールベースは、初期設定方法428と、関連付け430と、制約432と、クラス434と、規則436とを含むことができる。これらのルールセットレベルの要素406は、対応するルールベースレベルの要素402及びドメインレベルの要素404とは異なる範囲を有することがある。たとえば、関連付け430は、ルールセットレベルに常駐するクラス間の関係を定義することがある。
規則436は、入力値を分析し、かつ出力値を生成するために使用される論理を定義する。規則436は、クラス408、424、434を使用して作成されるオブジェクトなどの、データオブジェクト内の情報を処理することができる。規則436はまた、方法オブジェクト内で定義された方法を使用して、値をデータオブジェクト内のフィールドに割り当てることができる。一実施形態においては、規則436は、決定木規則とパターン合致規則とを含む。パターン合致規則の例が図9Aに示されているが、これについて以下に記述する。決定木規則の例が図9Bに示されているが、これについても以下に記述する。
図4は、ルールベースアーキテクチャ400の一例を示しているが、ルールベースアーキテクチャ400に対しては様々な変更が行われ得る。たとえば、追加要素を様々なレベルのアーキテクチャ400に追加することができ、特定のニーズにより、現在の要素を省略することができる。
図5A及び図5Bは、本発明の一実施形態によるルールベースビルダの例を示す例示的ブロック図である。具体的には、図5Aはステートレスルールベースビルダ500を示し、図5Bはステートフルルールベースビルダ550を示している。図5A及び図5Bは、図1のシステム100について記述しているが、ルールベースビルダ500、550を、他のシステムと共に使用することもできる。
図5Aでは、ステートレスルールベースビルダ500により、アプリケーションは、様々な関数呼出し502を起動することができ、関数呼出し502は、様々なデータ構造504を入力及び出力として使用する。例示されている実施形態においては、関数呼出し502は、生成関数506とビルド関数508とを含む。生成関数506は、ルールベースビルディングサービスを要求するアプリケーションが使用するルールベースビルダ500のインスタンスを作成する。たとえば、クライアントアプリケーション122は、ネットワーク106を介して生成関数506を起動することがある。サーバ102は、生成関数506を実行し、ルールベースビルダインスタンスを作成するルールベースビルダ500のインスタンスを生成する。次いで、クライアントアプリケーション122からの追加関数呼出しが、そのルールベースビルダインスタンスに向けられる。複数のクライアントアプリケーション122がルールベースビルディングサービスを要求すると、サーバ102は、生成関数506を実行して、ルールベースビルダ500の複数のインスタンスを作成することがある。
ビルド関数508により、ルールベースビルダインスタンスは、ルールベース、規則、及びルールセットなどの様々な入力を、統合されたルールベースにマージする。ビルド関数508は、2進ルールベース510、文字列512a〜512b、及び制御オブジェクト513を、入力として受け入れることがある。入力文字列512aとは、コンパイルされていない、即ちソースルール、ルールベース、及びルールセットを含むXML文字列である。入力文字列512bとは、コンパイルされた又はコンパイルされていない規則、ルールベース、及びルールセットの遠隔場所を識別するユニフォームリソースロケータ(URL)である。統合されたルールベースをビルドする前に、ルールベースビルダインスタンスは、URLによって識別された遠隔場所にアクセスし、その場所で、任意の規則、ルールベース、又はルールセットを検索することがある。
サーバ102は、制御オブジェクト513内に包含された値528を使用して、ビルド関数508を実行する場合に、ルールベースビルダインスタンスが実施すべき異なる関数を識別する。たとえば、値528aは、ルールベースビルダインスタンスに、アプリケーションインターフェース文書522を生成すべきかどうかを指示する。値528bは、ルールベースビルダインスタンスに、2進ルールベース516を生成すべきかどうかを指示する。値528cは、ルールベースビルダインスタンスに、ロードマップ524を生成すべきかどうかを指示する。値528d〜528fは、ルールベースビルダインスタンスに、メッセージ526内に記述されていることのある様々なタイプの事象を追跡すべきかどうかを指示する。この例においては、事象は、高レベル又はL1事象、低レベル又はL2事象、及びローダ事象に分割されることがある。事象の他の分割を使用することもできる。
ビルド関数508が起動された場合には、ルールベースビルダインスタンスは、入力規則、ルールベース、及びルールセットを組み合わせ、出力結果514を生成しようとすることがある。出力結果514は、統合された2進ルールベース516を含むことがある。ルールベース516とは、入力が統合されたルールベースにマージされ、コンパイルされた場合に形成されるルールベースである。出力結果514はまた、誤り件数518と警告件数520とを含むことがある。誤り件数518は、統合されたルールベース516を作成した場合に識別された誤りの数を識別し、警告件数520は、生成された警告の数を識別する。
出力結果514は、さらに、アプリケーションインターフェース文書522とロードマップ524とを含むことがある。アプリケーションインターフェース文書522は、ルールベース516によって使用される入力値、及びルールベース516によって作成される出力値を記述する。アプリケーションインターフェース文書522は、2進ルールベース516が開発中のアプリケーションと合わせて使用される場合に有用であり得る。アプリケーションインターフェース文書522は、ルールベース516に関連付けられた入力及び出力を記述することができ、アプリケーションを作成している開発者は、アプリケーションが適切な入力をルールベース516に送信し、かつルールベース516から適切な出力を期待することを確実にすることができる。
ロードマップ524は、ルールベース516内の様々なオブジェクトを識別する。ロードマップ524はまた、ルールベース516内のオブジェクトと、そのオブジェクトに影響を及ぼすルールベース516内の任意の規則との間の関係を識別する。たとえば、ロードマップ524は、所与のオブジェクトについて、オブジェクトからの値を読み取る又は値をオブジェクトに書き込む規則を識別することがある。システム100内の別の構成要素などにより、ロードマップ524をさらに処理して、ルールベースレポートを生成することができる。ルールベースレポートは、ルールベース516内の規則、規則間の相互作用、又は他の好適な情報を識別することができる。
出力結果514はまた、1組のゼロ以上のメッセージ526を含むことができる。メッセージ526は、統合されたルールベース516の作成中に生成された誤り及び警告メッセージを含むことができる。メッセージ526はまた、統合されたルールベース516の作成又はコンパイル中に生じる異なる事象を識別するために使用されるメッセージなどの、トレースメッセージを含むことができる。
オペレーションの一態様においては、出力結果514のコンテンツは、値528により変わることができる。たとえば、値528aが偽の値を有する場合は、出力結果514は、アプリケーションインターフェース文書522を含まない。同様に、値528cが真の値を有する場合は、出力結果514は、ロードマップ524を含む。値528bが偽の値を有する場合は、出力結果514は、2進ルールベースを含まない。このことは、たとえばアプリケーションインターフェース文書522又はロードマップ524が既存2進ルールベースに必要な場合に有用であり得る。
図5Bでは、ステートフルルールベースビルダ550により、アプリケーションは、データ構造554を入力及び出力として使用する様々な関数呼出し552を起動することができる。例示されている実施形態においては、関数呼出し552は、生成関数556を含む。生成関数556は、ルールベースビルディングサービスを要求するアプリケーションが使用するルールベースビルダ550のインスタンスを作成する。生成関数556は、2つの入力値、トレースマスク568とメッセージハンドラ570とを含む。トレースマスク568のために提供された値が、クライアントアプリケーション122に提供されたトレースメッセージの詳細レベルを判断する。詳細レベルは、トレースメッセージが提供されるかどうかを識別し、提供される場合には、どのような状況でトレースメッセージが提供されるべきであるかを識別することがある。以下に記述するように、メッセージハンドラ570は、クライアントアプリケーション122とルールベースビルダインスタンスとの間で情報を通信するために使用されるハンドラを識別する。メッセージハンドラ570により、たとえば、ルールベースビルダ550は、コールバックオペレーションを実施し、クライアントアプリケーション122から情報を要求することができる。
ルールベース追加機能558a〜558cは、統合されたルールベースにマージされる、異なるルールベース、規則、及びルールセットを識別する。ルールベース追加機能558aは、統合されたルールベースを生成する場合に使用される、2進ルールベース、規則、又はルールセットを受け入れる。ルールベース追加機能558bは、統合されたルールベースを生成する場合に使用される、ソース即ちコンパイルされていないルールベース、規則、又はルールセットを受け入れる。ルールベース追加機能558cは、統合されたルールベースを生成する場合に使用される、ルールベース、規則、又はルールセットの遠隔場所を識別するURLを受け入れる。それぞれのルールベース、規則、又はルールセットは、ルールベース追加機能558a〜558cを使用して追加される時に、以前に追加されたルールベース、規則、及びルールセットと共にマージされる。コンパイル機能560は、マージされたルールベースをコンパイルして、2進ルールベースを作成する。
アプリケーションインターフェース文書生成機能562が、アプリケーションインターフェース文書を生成する。2進ルールベース生成機能564は、出力ストリームを通じてクライアントアプリケーション122に2進ルールベースを提供し、クライアントアプリケーション122は、出力ストリームをバッファ又は他のメモリ内に格納することができる。ロードマップ生成機能566が、ルールベースのためのロードマップを生成する。
ステートフルルールベースビルダ550がセッション情報を維持しているので、ルールベースビルダ550によってサポートされている様々な関数呼出し552は、クライアントアプリケーション122により個々に起動され得る。たとえば、クライアントアプリケーション122を使用しているユーザが、既存2進ルールベースのためのアプリケーションインターフェース文書を望むことがある。クライアントアプリケーション122は、ルールベース追加機能558aの1つを使用して、2進ルールベースをビルダ550に供給することができる。次いで、クライアントアプリケーション122は、機能562を起動することにより、アプリケーションインターフェース文書を生成することができる。ユーザが、その後、ロードマップを生成することを決定すると、クライアントアプリケーション122は、機能566を起動し、同じルールベースビルダインスタンスを使用してロードマップを生成することができる。
図5A及び図5Bは、ルールベースビルダ500、550の例を示しているが、ルールベースビルダ500、550に対しては様々な変更が行われ得る。たとえば、様々な関数呼出し502、552を、特定のニーズにより、ビルダ500、550から省略することができる。また、追加関数呼出し502、552を、ビルダ500、550に追加することができる。その上、図5A及び5Bは、関数呼出し502、552と共に使用されるデータ構造504、554の例を示しているが、他の又は追加のデータ構造も使用することができる。
図6A〜図6Cは、本発明の一実施形態による推論エンジンの例を示す例示的ブロック図である。具体的には、図6Aは、ステートレス推論エンジン600を示す図であり、図6B及び図6Cは、ステートフル推論エンジン650を示す図である。図6A〜図6Cは、図1のシステム100について記述しているが、推論エンジン600、650を他のシステムと共に使用することもできる。
図6Aでは、ステートレス推論エンジン600により、アプリケーションは、データ構造604を入力及び出力として使用する関数呼出し602を起動することができる。例示されている実施形態においては、関数呼出し602は、アプリケーションが使用する推論エンジン600のインスタンスを作成する生成関数606を含む。関数呼出し602はまた、2つの推論機能608、610を含む。
推論機能608は、入力としてエンジン600に提供されるルールベース612及び制御オブジェクト613を使用してエンジン600により、推論を起動する。ルールベース612は、図4のドメイン416で示されているような、複数のドメインを含むことがある。その結果、推論機能608はまた、ドメイン名614を入力として受け取り、このドメイン名614は、推論中にどのドメイン416を使用するかを識別する。推論機能608はさらに、推論中に作成され、かつ使用される任意の動的インスタンス616の識別情報を受け取る。推論機能608はまた、ドメイン名614によって識別されるドメインと共に使用される追加規則である条件付きルールセット618を受け取る。その上、推論機能608は、事前条件値620a〜620bを入力として受け取ることがある。事前条件値620は、識別されたルールベース612内の適切なフィールドに割り当てられ、推論中に使用される。事前条件値620は、事前条件値文書620a又は事前条件値アレイ620bの形式をとることがある。
制御オブジェクト613は、推論エンジンインスタンスによって実施されるオペレーションを制御するために、サーバ102が使用する値632a〜632fを定義する。値632aは、推論エンジンインスタンスに、フィールド値アレイ626bを生成するよう指示し、値632bは、推論エンジンインスタンスに、フィールド値文書626aを生成するよう指示する。値632cは、推論エンジンインスタンスに、規則スナップショット630を生成するよう指示する。値632d〜632fは、推論エンジンインスタンスに、メッセージ628内に記述されることのある様々なタイプの事象を追跡するよう指示する。この例においては、事象は、L1事象、L2事象、及び推論事象に分割されることがある。事象の他の分割も使用することができる。
推論機能610は、同じ入力の多くを推論機能608として受け取る。推論機能608は、2進ルールベース612を受け取り、推論機能610は、推論中に使用されるルールベースの場所を識別するURL入力622を受け取る。
両方の推論機能608、610は、出力結果624を返す。出力結果624は、1組のゼロ以上のフィールド値626a〜626bを含むことがある。フィールド値626とは、推論中に推論エンジン600により、事後条件に割り当てられる値である。値632a及び632bにより、フィールド値626は、フィールド値文書626a又はフィールド値アレイ626bの形式をとることがある。出力結果624はまた、1組のゼロ以上のメッセージ628を含むことがある。メッセージ628は、推論演算中に作成された、誤りメッセージと、警告メッセージと、トレースメッセージとを含むことができる。
出力結果624は、さらに、規則スナップショット630を含むことがある。規則スナップショット630は、特定の時点での規則の現在のステータスについての情報を提供する。規則スナップショット630は、規則、規則に関連付けられたルールセット、規則の優先順位、規則に関連付けられた規則のタイプ、規則のステータス、及び規則を保留する規則内のフィールドを識別することができる。
図6B及び図6Cでは、ステートフル推論エンジン650により、アプリケーションは、データ構造654を入力及び出力として使用する様々な関数呼出し652を起動することができる。例示されている実施形態においては、生成関数654a〜654cは、推論エンジン650のインスタンスを作成する。具体的には、関数654aは、入力ストリームを使用して定義された2進ルールベースを使用する推論エンジンインスタンスを作成し、関数654bは、URLを使用して定義された2進ルールベースを使用する推論エンジンインスタンスを作成する。以下に説明するように、複数の推論エンジンインスタンスは同じルールベースを使用し、関数654cは、同じルールベースを使用している別の推論エンジンインスタンスに基づいて、1つの推論エンジンインスタンスを作成する。
ドメイン機能656a〜656bは、どのドメイン416が推論中に使用されるかを制御する。ドメイン機能656aは、推論中に使用されるドメイン416を識別し、ドメイン機能656bは、ドメイン416を除去するので、推論中には使用されない。入力関数658a〜658bは、事前条件のための値を推論エンジン650に供給する。具体的には、関数658aは、特定の事前条件のための値を提供し、関数658bは、現在のドメイン416に関連付けられた1組の事前条件のための値を提供する。条件付きルールセット機能660は、現在のドメイン416と共に使用される推論エンジン650に追加ルールセットを供給する。動的インスタンス機能662は、推論中に使用される動的インスタンスを作成する。推論機能664は、現在のドメイン416内に包含されている規則を使用して、推論プロセスを開始する。出力関数666は、推論エンジン650によって計算された事後条件のための値を供給する。具体的には、関数666aは、1組の事後条件のための値を包含する出力値文書を作成し、関数666bは、指定された事後条件の値を提供し、関数666cは、すべての事前条件及び事後条件の値を提供する。スナップショット機能668は、現在のドメインのための規則スナップショットを生成し、出力する。
ステートフル推論エンジン650はセッション情報を維持しているので、推論エンジン650により、追加機能が提示されることがある。たとえば、推論エンジン650は、推論中に、如何にあるフィールドに値が割り当てられるかを判断するために使用される説明サービスを提供することがある。説明開始機能670は、フィールドの識別情報を入力として受け取り、そのフィールドに最終値を割り当てた規則を識別する。規則ファイアリング説明機能672は、説明開始機能670によって識別された規則を使用し、何が原因でその規則がファイアされるのかを判断する。このことには、規則をファイアしたフィールド及びこれらのフィールドの値を識別することが含まれることがある。フィールド解決説明機能674は、規則ファイアリング説明機能672によって識別されたフィールドを使用し、如何にそのフィールドに値が割り当てられたかを判断する。これらの機能670〜674により、クライアントアプリケーション122は、如何にかつ何故、推論中にフィールドに値が割り当てられたかを追跡する。これらの機能670〜674は、サーバ102が、推論中に実施された様々なステップを監視し、かつ保管することを必要とすることがある。この監視により、推論中に追加処理要件が課されることがあるので、追跡機能676a〜676bにより、クライアントアプリケーション122は、サーバ102が推論中に実施されるステップを、いつ監視すべきかを指定することができる。このことにより、クライアントアプリケーション122は、この追加処理が必要な時を制御することができる。
ステートフル推論エンジン650を使用することにより、また、サーバ102は、真理維持(「TM」)機能をクライアントアプリケーション122に提供できることがある。推論中に、既知の値をフィールドに割り当てることにより、帰結のカスケードをトリガすることができる。たとえば、フィールドが既知の値を有していないために、規則が以前に保留された場合は、そのフィールドに値を割り当てることにより、推論エンジン650が、その規則をアンペンドし、次いでファイアすることがある。ファイアされた規則は他のフィールドを解決し、これにより、推論エンジン650は追加規則をアンペンドし、ファイアする。真理維持とは、クライアントアプリケーション122が、フィールドへの値の割当てを撤回し、逆転させることのできる機構であり、これにより、その割当ての帰結を撤回する。つまり、真理維持機能は、「what−if」タイプの論法に対して有用であり得る。特定の例として、貸付承認アプリケーションにおいて、借り手が、貸付額、貸付期間、及び金利などの、いくつかの異なる変数を試みることを望むことがある。このような状況においては、仮定のシナリオの集合に対する「回答」はなく、いくつかの代替シナリオを試みた後に初めて、回答が分かることがある。
真理維持をサポートするために、TM値設定機能678は、特定のフィールドに撤回可能な値が割り当てられることがあることを示す。撤回可能な値とは、否定できる割当て中に割り当てられる値である。クライアントアプリケーション122は、選択されたフィールドに複数の値を割り当てることがある。TM値確認機能680は、特定のフィールドの現在の値を、そのフィールドの撤回不可能な値として設定する。撤回不可能な値とは、否定できない割当て中に割り当てられる値である。TM値撤回機能682は、フィールドをそれの最後の撤回不可能な値にまで撤回する。オペレーション中に、クライアントアプリケーション122は、5つの撤回可能な値をフィールドに割り当てることができる。次いで、クライアントアプリケーション122は、撤回不可能な値を、続いてさらに7つの撤回可能な値を、フィールドに割り当てることができる。この例においては、フィールドに割り当てられた最後の7つの値は、撤回することができるが、最初の5つは、撤回することができない。撤回不可能な値が存在することにより、推論エンジン650が、撤回不可能な値が割り当てられる前に割り当てられた値を撤回することが防止される。貸付の例に戻ると、選択されたフィールドとは、借り手が受け取りたいと望む貸付額であり得る。実験中に、フィールドに複数の撤回可能な値が割り当てられることがある。最終的に、ユーザは、借り手が受け取ることのできる最高額を識別することがある。この最高額を撤回不可能な値として割り当てることができる。追加の撤回可能な値をフィールドに割り当てる追加実験をすることができる。これらの追加値のいずれも、貸付額として受け入れることができ、又はその値を、撤回不可能な値として識別された最後の最高貸付額に撤回することができる。
これらの機能に加えて、ハンドラ機能684a〜684bは、推論エンジンインスタンスと共に様々な通信ハンドラを登録する。以下に記述するように、ハンドラ機能により、推論エンジンインスタンスは、推論中にクライアントアプリケーション122と通信することができる。リセット機能686は、推論エンジンインスタンスを初期状態にリセットする。このことには、たとえば、推論エンジン650が、すべてのフィールド値を未知の状態にリセットするステップと、すべての動的インスタンスを消去するステップと、すべてのドメインをポップするステップと、任意のルールベースレベルの初期設定方法410を実行するステップとが含まれることがある。
図6A〜図6Cは、推論エンジン600、650の例を示しているが、推論エンジン600、650に対しては様々な変更が行われ得る。たとえば、様々な関数呼出し602、652を、特定のニーズにより、推論エンジン600、650から省略することができる。また、追加の関数呼出し602、652を、推論エンジン600、650に追加することができる。その上、図6A〜図6Cは、関数呼出し602、652と共に使用されるデータ構造604、654の例を示しているが、他の又は追加のデータ構造を使用することもできる。
図7は、本発明の一実施形態によるコアオブジェクト700の例を示す例示的ブロック図である。コアオブジェクト700とは、ルールベースビルダ500、550と推論エンジン600、650の両方によって共用されるオブジェクトである。図7は、図2のシステム200について記述しているが、コアオブジェクト700を他のシステムと共に使用することもできる。
図7では、コアオブジェクト700は、様々なデータ構造702を使用して、ルールベースビルダ500、550、及び推論エンジン600、650と通信する。データ構造702は、メッセージハンドラ704を含む。メッセージハンドラ704とは、クライアントアプリケーション222と通信するために使用されるハンドラである。たとえば、メッセージハンドラ704は、ルールベースビルダ500、550、又は推論エンジン600、650からのメッセージ706を傍受するために使用され得る。このことにより、メッセージハンドラ704は、ルールベースビルダ500、550又は推論エンジン600、650によって生成された、誤り、警告、追跡、又は他のメッセージ706を捕捉できる。データ構造702はまた、例外708を含む。例外708は、ルールベースビルディング又は推論中に検出された誤りを識別する。
データ構造702は、さらに、トレースマスク710を含むことがある。トレースマスク710は、サーバ102による異なる機能の実行を如何に追跡すべきかを示す。トレースマスク710に提供された整数値は、クライアントアプリケーション222に提供されたトレースメッセージの詳細さのレベルを判断する。詳細さのレベルは、トレースメッセージが提供されるかどうか、そして提供される場合には、どのような状況でトレースメッセージが提供されるべきであるかを識別する。たとえば、値がゼロの時には、サーバ202はトレースメッセージを提供せず、値が1の時には、サーバ202はより広範囲なトレースメッセージを提供し、これより高い値の時には、サーバ202はより具体的なトレースメッセージを提供することができる。この例においては、事象は、推論事象、L1事象、L2事象、及びローダ事象に分割される。事象の他の分割も使用することができる。
図7は、コアオブジェクト700の一例を示しているが、コアオブジェクト700に対しては様々な変更が行われ得る。たとえば、他の任意の又は追加のデータ構造702を使用することもできる。
図8は、本発明の一実施形態によるインターフェース800の例を示す例示的ブロック図である。この実施形態においては、インターフェース800は、初期設定ハンドラ802と変更ハンドラ804とを含む。図8は、図1のシステム100について記述しているが、インターフェース800を他のシステムと共に使用することもできる。
初期設定ハンドラ802により、クライアントアプリケーション122は、フィールド値を初期設定することができる。たとえば、推論エンジン650が推論中に規則を実行しようとするが、この規則が未知のフィールドを伴っていることがある。推論エンジン650は、この規則を保留して、未知のフィールドが後に解決されるかどうかを見ることができる。この規則を保留する代わりに、又はこれに加えて、推論エンジン650は、初期設定ハンドラ802を起動し、クライアントアプリケーション122に、クライアントアプリケーション122が未知のフィールドのための値を提供することを望むかどうかを尋ねることができる。クライアントアプリケーション122が値を提供すると、推論エンジン650は、その値を使用し、推論を続行することができる。
初期設定ハンドラ802を使用することは、1つのルールベースに多数の事前条件が存在する場合に、有用であり得る。たとえば、ルールベースは、1,000の事前条件を有することができる。初期設定ハンドラ802を使用しない場合は、クライアントアプリケーション122は、推論が開始される前に、すべての1,000の事前条件のための入力値を提供する。初期設定ハンドラ802を使用する場合は、クライアントアプリケーション122は、いくつかの事前条件のための入力値を提供することができ、推論エンジン650は、これらの値を使用して、推論の完了を試行することができる。推論エンジン650が推論を完了できず、より多くの事前条件のための値を必要とする場合は、クライアントアプリケーション122は、初期設定ハンドラ802を使用して、必要な事前条件のための入力値を提供することができる。
変更ハンドラ804により、サーバ102は、クライアントアプリケーション122に、いつ推論エンジン650が様々なデータオブジェクトを修正するのかを通知することができる。たとえば、機能806は、クライアント122に、いつフィールド値が変更されるかを通知する。機能808は、クライアントアプリケーション122に、いつオブジェクトが作成されるのかを知らせ、機能810は、クライアントアプリケーション122に、いつオブジェクトが消去されるのかを知らせる。
変更ハンドラ804を使用することは、推論中に多数の事後条件が推論エンジン650によって計算される場合に、有用であり得る。たとえば、1つのルールベースは、1,000の事後条件を有することができる。変更ハンドラ804を使用しない場合は、クライアントアプリケーション122は、推論エンジン650から1組の1,000の出力値を受け取る前に、推論エンジン650が推論を完了するまで待つ必要があることがある。変更ハンドラ804を使用する場合は、事後条件の1つに値が割り当てられた場合には常に、クライアントアプリケーション122に知らされ得る。このようにして、クライアントアプリケーション122は、たとえ推論が完了していない場合にも、それぞれ個々の事後条件に値がいつ割り当てられたのかを知る。
図8は、インターフェース800の例を示しているが、インターフェース800に対しては様々な変更が行われ得る。たとえば、他の任意の又は追加の通信ハンドラを使用することもできる。また、それぞれのハンドラ802、804は、他の任意の又は追加の機能をサポートすることができる。
図9A及び図9Bは、本発明の一実施形態による規則のタイプの例を示す例示的ブロック図である。具体的には、図9Aは、パターン合致規則900を示し、図9Bは、決定木規則950を示している。他の又は追加のタイプの規則も使用されることがある。その上、図9A及び図9Bは、図1のシステム100について記述しているが、規則900、950を他のシステムと共に使用することもできる。
図9Aでは、パターン合致規則900は、前提902と、アクション904と、結合セクション906とを含む。前提902とは、アクション904を実行すべきかどうかを判断する条件である。前提902は、たとえば、1つ以上の式908を含む。サーバ102は、前提902内の式908を調べ、式908が真であるか又は偽であるかを判断することがある。次いで、その結果を用いて、サーバ102は、式908が真である場合には、アクション904を実行することにより規則900をファイアし、式908が偽である場合には、規則900をフェイルし、式908のための値が判断できない場合には、規則900を保留することがある。
アクション904とは、規則900の前提902が真である場合に、サーバ102によって実施されるべき1つ以上のアクションである。アクション904は、たとえば、サーバ102が特定の値をフィールドに割り当てるべきであることを示す。アクション904によりまた、サーバ102は、機能を実行するか、又は異なるルールベースドメインに部分推論を起動することができる。
結合セクション906は、サーバ102が監視すべきデータオブジェクトを識別する。規則900はパターン合致規則であるので、前提902を満たすインスタンス又はオブジェクトの集合全体に適用することができる。結合セクション906は、1つ以上の結合変数910を含む。推論エンジン112は、結合変数910を、結合クラスの1つ以上の候補インスタンスに関連付ける。次いで、推論エンジン112は、結合変数910を前提904に適用して、候補インスタンスのいずれかが前提902を満たすかどうかを判断する。このようにして、推論エンジン112は、候補インスタンスがさらに注意を向けるのに値するものであるかどうかを判断する。候補インスタンスのいずれかが前提902を満たす場合は、サーバ102は、これらの候補インスタンスを使用してアクション904を実行する。
例示されている例においては、Pという結合変数910は、Personクラスに関連付けられ、Dという別の結合変数910は、Duckクラスに関連付けられる。規則900は、ヒトがカモより年上であり、そのヒトが他のカモを所有していない場合には、ヒトを表すPersonオブジェクトをカモを表すDuckオブジェクトに関連付けるよう動作する。サーバ102は、PersonオブジェクトをP変数910に、DuckオブジェクトをD変数910に結合する。結合変数910を使用して、サーバ102は、既存のPersonオブジェクト及びDuckオブジェクトを調べ、いずれかのオブジェクトが前提902を満たしているかどうかを判断する。いずれかのオブジェクトが前提902を満たしている場合は、サーバ102は、規則900のアクション904を、これらのデータオブジェクトのそれぞれに適用する。アクション904は、そのヒトが所有しているカモの数を増分し、そのヒトをそのカモに関連付ける。
特定の実施形態においては、サーバ102は、パターン合致規則900をレディ状態に保ち、パターン合致規則900をフェイル又は保留しない。別の特定の実施形態においては、パターン合致規則900は、1つのファイア規則として作用することがある。この実施形態においては、推論エンジン112は、閾値数のオブジェクトが結合変数910に結合されるまで待つ。いったん閾値数に合えば、推論エンジン112は、これらのオブジェクトを使用して、パターン合致規則900を1回実行する。次いで、実行されたパターン合致規則900は、推論エンジン112から無視されることがある。
ルールベースが多数のオブジェクトを含むことができるので、サーバ102は、1つ以上のアルゴリズムを使用して、パターン合致規則900の処理効率を向上させることがある。たとえば、サーバ102は、Reteアルゴリズムを使用することができる。Reteアルゴリズムを使用して、サーバ102は、いつオブジェクトが作成されたか、修正されたか、又は消去されたかを検出する。次いで、サーバ102は、作成、修正、又は消去によって影響されるフィールドを使用する前提902を有するパターン合致規則900を実行する。サーバ102は、突き止められたパターン合致規則900の前提902を調べ、前提902が満たされる場合は、アクション904を実行することがある。
一実施形態においては、第1のパターン合致規則900のアクション904が適用される場合には、サーバ102は、オブジェクトを作成し、修正し、又は消去することができる。これらのオブジェクトは、同じパターン合致規則900又は別のパターン合致規則900によって影響され得る。その結果、アクション904により、新しいオブジェクトを1つ以上の規則900に結合することができる。
図9Bでは、決定木規則950は、評価ステートメント952、又は部分木、それに続いて2つ以上の木ノード954a〜954eを含む。それぞれの部分木に、容易に規則に関連付けられるような名前を付けることがある。評価ステートメント952は、式956の値を評価し、判断する。式956の計算された値に基づいて、木ノード954の1つが実行される。
それぞれの木ノード954は、場合分け文958又は別様のステートメント960のいずれか、それに続いて実施されるアクションを含む。場合分け文958は、式956のための1つの潜在値又はある範囲の潜在値を識別する。式956の値がその値に合致するか、又は場合分け文958の値の範囲内にあると、場合分け文958に関連付けられた木ノード954が実行される。他の木ノード954を実行できない場合は、別様のステートメント960が、実行される木ノード954を識別する。
木ノード954内で実施されるアクションは、さらに、追加の部分木を含むことができる。たとえば、木ノード954aは、別の評価ステートメント962と2つの木ノード964a〜964bとを含む。このようにして、規則950を部分木の階層レイヤに分割することができ、サーバ102は、部分木を横に移動して、実施すべき適切なアクションに到達することがある。
例示されている例においては、式956が年齢を計算し、計算された年齢に基づいて、木ノード954の1つが選択される。計算された年齢が既知の値を有する場合は、その値により、木ノード954a、954b、又は954cを選択することができる。その値が未知の値を有するフィールドに依存する場合など、計算された年齢が未知である場合は、木ノード954dが選択される。計算された年齢は既知であるが、木ノード954a〜954c内の場合分け文の範囲外にある場合は、木ノード960が選択されることがある。
特定の実施形態においては、サーバ102は、決定木規則950のためのジャストインタイムメモリ割当てスキームを使用することがある。ジャストインタイム割当てスキームにおいては、サーバ102は、決定木規則950の一部分のみを、メモリ126などのメモリ内にロードする。ロードされた規則950の一部分により、サーバ102は、横移動される木ノード954を識別することができる。サーバ102が横移動される木ノード954を識別した後、サーバ102は、その木ノード954のコンテンツをメモリ内にロードする。ロードされた木ノード954が追加部分木964を含んでいる場合は、サーバ102は、サーバ102が横移動される次の部分木964を選択することを可能にする規則950の一部分のみをロードする。次の部分木964が選択された後、サーバ102は、その部分木964のコンテンツをメモリ内にロードする。このプロセスは、サーバ102が、規則950をファイア又はフェイルするまで続行し、その時点で、サーバ102は、規則950が使用するメモリを解放することがある。ジャストインタイム割当てスキームを使用することにより、決定木規則950が使用するメモリ量が減少することがある。決定木規則950は、何百又は何千もの埋め込み部分木を包含していることがあるので、ジャストインタイム割当てスキームを使用することは、決定木規則950を処理するためのメモリ要件を減少するための一助となり得る。
一実施形態においては、サーバ102は、決定木規則950を保留するよう強制されることがある。たとえば、サーバ102は、推論中に木ノード954bを選択することがあるが、フィールドFact3が未知の値を有することがある。この例においては、サーバ102が規則950の実行を完了できないために、サーバ102は、規則950を保留する。特定の実施形態においては、サーバ102は、ピンポイント再始動を実施して、規則950の実行をアンペンドし、完了する。規則950が保留した場合には、サーバ102は、規則950のスナップショットをとることがある。スナップショットは、規則950内で使用されるフィールドのための値や、規則950を保留したステートメントの正確な場所などの、規則950のコンテキストを識別する。上記の例においては、スナップショットは、それが規則950を保留したステートメントであるので、評価ステートメント966の場所を識別することができる。規則950を保留したフィールドに既知の値が割り当てられた場合には、サーバ102は、規則950をアンペンドし、スナップショット内に格納されている場所で規則950の実行を開始することがある。このことにより、サーバ102は、多数の部分木を包含することのある決定木規則950を、より効率的に保留し、アンペンドすることができる。
図9A及び図9Bは、規則900、950の例を示しているが、規則900、950に対しては様々な変更が行われ得る。たとえば、規則900は、任意の数の結合変数910を含み、規則950は、任意の数の部分木を含むことができる。また、他の又は追加のタイプの規則を使用することができる。
図10は、本発明の一実施形態によるルールベースを共用するためのメモリ配置の例を示す例示的ブロック図である。具体的には、図10は、図1のサーバ102内で使用されるメモリ1026を示しており、ここでは、複数のクライアントアプリケーション122が、推論中に同じルールベース114を使用する。この実施形態においては、メモリ1026は、ルールベース114の読取り専用画像1050と、1つ以上のクライアント特有の情報ブロック1052とを含む。図10は、図1のシステム100について記述しているが、メモリ1026を他のシステムと共に使用することもできる。
読取り専用画像1050とは、ルールベース114内の規則116のコピーである。サーバ102は、データベース104又は他の場所からメモリ1026内にルールベース114をロードすることにより、読取り専用画像1050を作成することがある。ルールベース114はサーバ102によって使用されるそれ自体のデータオブジェクトを定義することができるので、ルールベース114は、特定のアプリケーションに結び付けられることがない。その結果、複数のクライアントアプリケーション122が、ルールベース114を同時に使用することができる。特定の実施形態においては、読取り専用画像1050は、クライアント特有の情報を有さない、ルールベース114のコピーを包含する。
実際の事前条件値及び事後条件値などの、クライアント特有の情報は、クライアント特有の情報ブロック1052内に格納されることがある。クライアント特有の情報ブロック1052は、クライアント特有の情報1054とポインタ1056とを含む。クライアント特有の情報1054とは、事前条件値、事後条件値、保留中の規則116のスナップショット、及びクライアントアプリケーション122に特有の他の任意の情報である。ポインタ1056は、クライアント特有の情報1054に関連付けられた読取り専用画像1050を指す。
オペレーションの一態様においては、クライアントアプリケーション122が、ルールベース114を使用して推論を要求する場合には、サーバ102は、そのルールベース114の読取り専用画像1050がメモリ1026内に既に存在するかどうかを判断することがある。存在しない場合は、サーバ102は、ルールベース114を読取り専用画像1050としてメモリ1026内にロードすることがある。次いで、推論エンジン112は、読取り専用画像1050を使用して推論演算を実施することがある。クライアントアプリケーション122が、読取り専用画像1050としてメモリ1026内に既にロードされているルールベース114を使用して推論することを要求した場合は、推論エンジン112は、以前に作成された読取り専用画像1050を使用して推論演算を実施することがある。推論中に、特定のクライアントアプリケーション122のために格納されている値が、クライアント特有の情報ブロック1052のクライアント特有の情報1054内に置かれる。このようにして、サーバ102は、たとえ推論が異なる入力値を必要とし、規則116が異なる順序で実行される場合にも、同じルールベース114を使用して、複数のクライアントアプリケーション122のための推論演算を実施することができる。
一実施形態においては、上述したメモリ1026の使用が制限されることがある。たとえば、特定の実施形態においては、補足規則116、ルールベース114、及びルールセット130が、複数の推論エンジンインスタンス間で共用されないことがある。この実施形態においては、補足規則116、ルールベース114、及びルールセット130の画像が、複数の推論エンジンインスタンスによって使用されないことがある。
図10は、複数のクライアントアプリケーション122間でルールベース114を共用するために配置されたメモリ1026の一例を示しているが、メモリ1026に対しては様々な変更が行われ得る。たとえば、それぞれのクライアント特有の情報ブロック1052を別個のメモリ構造内に格納することができる。また、クライアントアプリケーション122にルールベース114を共用させる場合もさせない場合もある他のメモリ配置が使用されることがある。
図11A〜11Dは、本発明の一実施形態に従って、統合されたルールベースにルールベース構成要素がマージされる例を示す例示的ブロック図である。具体的には、図11A〜11Cは、ルールベース構成要素1150a〜1150cを表し、図11Dは、統合されたルールベース構成要素1150dを表す。図11A〜11Dは、図1のシステム100について記述しているが、ルールベース構成要素1150を他のシステムと共に使用することもできる。
図11Aにおいては、構成要素1150aとは、規則1152である。規則1152は、ドメイン1156の一部を形成するルールセット1154内に包含される。規則1152は、Father及びMotherと名づけられた、Personクラスの2つのインスタンス1158を参照する。
図11Bにおいては、構成要素1150bとは、ドメイン1156内に包含されているPersonクラス1160の部分宣言である。クラス1160は、Nameと呼ばれるフィールド1162の宣言を含む。構成要素1150bはまた、Fatherインスタンス1158aの宣言も含む。
図11Cにおいては、構成要素1150cとは、ドメイン1156内に包含されているPersonクラス1160の別の部分宣言である。クラス1160はまた、Ageと呼ばれるフィールド1164の宣言も含む。構成要素1150cもまた、Motherインスタンス1158bの宣言を含む。
ルールベースビルダ110は、アクティビティを段階的に実施することにより、構成要素1150a〜1150cをマージすることがある。一実施形態においては、第1の段階中に、ルールベースビルダ110が、構成要素1150a〜1150cを調べて、データオブジェクト及び論理オブジェクトを定義するクラスを収集する。この段階中に、ルールベースビルダ110は、構成要素1150によって定義されたクラスのすべてを識別する、1つ以上の内部データ構造を作成することがある。第2の段階中に、ルールベースビルダ110は、段階1からの内部データ構造を解析して、クラス宣言間の完全性及び整合性を確実にする一助とする。たとえば、クラスが、Brotherと名づけられたインスタンス上で動作する規則を定義すると、ルールベースビルダ110により、Brotherと名づけられたインスタンスが構成要素1150によって作成されることが確実になることがある。第3の段階中に、ルールベースビルダ110は、解析されたデータ構造をコンパイルして、2進ルールベース114を生成することがある。
第1の段階中に、ルールベースビルダ110によって調べられた構成要素1150は、それぞれ、クラスの一部分を定義することができる。示されている例においては、構成要素1150b及び1150cは、Personクラス1160の異なる部分を定義する。その結果、マージプロセスの第1の段階中に、ルールベースビルダ110は、それぞれの構成要素1150が分析される時に遭遇したクラス宣言を追跡する。2つの構成要素1150が1つのクラスの一部分を定義すると、ルールベースビルダ110は、これらの宣言を1つのクラス宣言に組み合わせる。このことは、図11Dに見られ、ここでは、ルールベース1150d内のPersonクラス1160の完全な宣言を示している。
ルールベースビルダ110が構成要素1150b、次いで構成要素1150cを調べると想定すると、ルールベースビルダ110は、構成要素1150bにアクセスし、構成要素1150bがクラス1160の宣言を包含すると判断する。ルールベースビルダ110は、すべての以前に遭遇した宣言を包含する内部データ構造を調べ、クラス1160は以前に調べられた構成要素1150によって宣言されなかったと判断し、クラス1160及びフィールド1162を内部データ構造に追加する。ルールベースビルダ110は、構成要素1150cへと続行し、クラス1160の別の宣言を突き止める。ルールベースビルダ110は、その内部データ構造を調べ、クラス1160は以前に調べられた構成要素1150内で宣言されたと判断し、フィールド1164をデータ構造内のクラス1160に追加することがある。このことにより、図11Dに示されているクラス1160の全宣言が作成され、これには、フィールド1162、1164を有するクラス1160の1つの宣言が含まれる。同様の方法で、ルールベースビルダ110は、構成要素1150内で遭遇したインスタンス1158のそれぞれの宣言を突き止め、図11Dに示されているような1つの宣言を形成することがある。
図4について上述したように、ルールベース114は、複数のレベル(ルールベースレベル、ドメインレベル、又はルールセットレベル)のルールベース114で、クラスを定義することがある。また、同じ名前を有するクラスが、ルールベース114の異なるレベルに存在することができる。このため、マージプロセスの段階1中に作成された内部データ構造が、そのクラスの範囲を指定する。たとえば、図11Dでは、クラス1160が、ドメイン1156内に存在することが示されている。別のPersonクラスがルールセット1154内で宣言されると、その結果生じたルールベース1150dは、ルールセット1154の一部として現れる別のクラス定義を包含する。さらに別のPersonクラスがルールベースレベルで宣言されると、その結果生じたルールベース1150dは、ドメイン1156の外部に、ルールベース1150dの一部として現れるさらに別のクラス定義を包含する。
第1の段階中に、ルールベースビルダ110は、同じフィールドを必要とするクラス宣言を検出することがある。場合によっては、複数の構成要素1150が、Personクラス1160がNameフィールド1162を含むことを宣言する場合など、宣言同士が互いに合致することがある。他の場合においては、宣言同士が互いに矛盾し、ルールベースビルダ110がその矛盾を解決できないことがある。たとえば、構成要素1150cは、Ageフィールド1164を数字として定義し、別の構成要素1150は、Ageフィールド1164を文字列として定義することができる。これらの宣言は、互いに矛盾し、ルールベースビルダ110は、誤りメッセージを生成することができる。さらに他の場合においては、宣言は、互いに矛盾するが、ルールベースビルダ110によって解決できることがある。一例として、構成要素1150cは、Ageフィールド1164を数字として定義し、別の構成要素1150は、Ageフィールド1164を、0〜120の間の値に制限された数字として定義することができる。ルールベースビルダ110は、より制限された宣言を使用することにより、このような矛盾を解決することができ、これは、この例においては、制約を有する宣言である。
一実施形態においては、ルールベースビルダ110は、マージプロセスの第1の段階中に構成要素1150を訪問する場合には、定義された順序を使用しない。その結果、ルールベースビルダ110は、そのクラス1160の構造が定義される前に、クラス1160のインスタンス1158を使用する規則1152を処理することができる。特定の実施形態においては、ルールベースビルダ110によって使用される内部データ構造は、ルールベースのマージプロセス中の先付け宣言の使用を減少する又は削除する一助となる。
統合されたルールベース1150dを作成した後、ルールベースビルダ110は、ルールベース1150dを解析する。たとえば、ルールベースビルダ110は、規則1152を分析して、Father及びMotherが宣言されたインスタンスであるかどうかを判断する。ルールベースビルダ110はまた、Father及びMotherインスタンスに関連付けられたクラスがAgeフィールドを含むかどうかを判断する。ルールベースビルダ110は、さらに、Ageフィールドに関連付けられたデータ型が、規則1152で実施される演算に適切かどうかを判断する。この例においては、Ageの値が65の値と比較され、従ってルールベースビルダ110は、Ageが数字データ型であると宣言されたかどうかを判断する。その上、ルールベースビルダ110は、マージ結果を調べ、宣言されたそれぞれの方法がまた、関連付けられた実施を有するかどうかを判断する。この例においては、ある方法が1つのルールベース構成要素1150内で宣言され、その構成要素1150の開発者は、別の構成要素1150の開発者が方法の実施を提供できると想定する。いずれの開発者も方法が如何に実施されるべきかを定義しなかった場合は、ルールベースビルダ110は、誤りメッセージを生成することがある。ルールベースビルダ110は、統合されたルールベース1150dを解析するために、他の又は追加のステップをとることがある。
第3の段階中に、ルールベースビルダ110は、解析されたルールベース1150dをコンパイルする。一実施形態においては、ルールベース1150dは、式が何らかの副作用を有することを許可しないフォーマットによって定義される。推論エンジン112が式を評価している時にフィールドの値が変更した場合に、「副作用」が生じる。たとえば、図9Bでは、推論エンジン112は、GetAgeと呼ばれる機能を呼び出すことにより、式956を評価する。この実施形態においては、推論エンジン112は、GetAge機能を実行している時に任意のフィールドの値を修正することは許可されない。ルールベース1150d内の副作用の存在を減少又は削除するための一助として、ルールベースビルダ110は、方法が値を返すかどうかを識別する。方法が値を返した場合は、その方法は、フィールドの値を変更するステップを含んでいないことがある(その方法で使用される局所変数を除く)。また、値を返す方法は、フィールドの値を変更する第2の方法を起動しないことがある(第2の方法で使用される局所変数を除く)。別の実施形態においては、ルールベースビルダ110により、ルールベース内の式は副作用を有することができる。
ルールベースビルディングプロセス中に、ルールベースビルダ110はまた、最終値フィールドの使用に関連付けられたテーブルを生成することができる。上述したように、第1の値フィールドは、1回のみ値を割り当てるべきフィールドであり、最終値フィールドは、ある時間に渡って複数の値を割り当てられ得るフィールドである。推論中に、最終値フィールドの有用な値は、一般に、最終値フィールドの値を変更することのできる規則のすべてがファイア又はフェイルされるまで認識されない。ルールベースビルディングプロセス中に、ルールベースビルダ110は、最終値フィールドのためのテーブルを生成することができる。このテーブルは、最終値フィールドの値を変更する規則、及び最終値フィールドの最終値を使用する規則を識別することができる。このようにして、推論エンジン112は、そのテーブルを使用して、最終値フィールドの値を変更する規則のすべてをファイア又はフェイルすることができる。いったんこれらの規則のすべてが実行されると、推論エンジン112は、最終値フィールドの最終値を使用する規則をファイア又はフェイルすることができる。特定の実施形態においては、決定木規則は最終値フィールドを使用することができるが、パターン合致規則は使用することができない。この実施形態においては、ルールベースビルディング中に構成されたテーブルは、最終値フィールドに関連付けられた決定木規則のみを識別する。
図12は、本発明の一実施形態による推論サービスを提供する方法1200の例を示す例示的流れ図である。方法1200は、図1のシステム100について記述しているが、他のシステムを使用することもある。
サーバ102は、ステップ1202で、1つ以上の規則116を識別する情報を受け取る。このことは、たとえば、API120が1つ以上のドメイン131を有する2進ルールベース114を受け取るステップと、API120がドメイン131選択を受け取るステップとを含むことがある。このことはまた、API120が2進ルールベース114の場所を受け取ることを含むことがある。情報は、推論エンジン112の推論サービスを起動しようとするクライアントアプリケーション122などの、任意の好適なソースから来ることがある。
サーバ102は、ステップ1204で、識別された規則116に関連付けられた任意の事前条件及び任意の事後条件を識別する。このことは、たとえば、推論エンジン112が、ドメイン131内に包含されている情報を使用して、そのドメイン131に関連付けられた任意の事前条件及び事後条件を識別することを含むことがある。
サーバ102は、ステップ1206で、識別された事前条件のための値を受け取る。このことは、たとえば、API120が、推論エンジン112を起動しているクライアントアプリケーション122から事前条件のための値を受け取ることを含むことがある。推論エンジン112は、初期設定ハンドラを通じて又は他の適切な方法で、XML文書内の1グループとして、クライアントアプリケーション122から事前条件値を個々に受け取ることができる。
サーバ102は、ステップ1208で、事前条件値を使用して規則116を実行する。このことは、たとえば、推論エンジン112が、様々な規則116をファイアし、フェイルし、保留して、未知の状態から既知の状態に事後条件フィールドを解決することを試みることを含むことがある。このことはまた、推論エンジン112が、フィールド値が変更された後に、保留中の規則116を再訪問して、この変更により、推論エンジン112が保留中の規則116のいずれかをファイア又はフェイルすることができるかどうかを判断することを含むことがある。このことは、さらに、推論エンジン112が、規則116の前向き連鎖又は後ろ向き連鎖を実施することを含むことがある。
サーバ102は、ステップ1210で、任意の事後条件の値を返す。このことは、たとえば、推論エンジン112が、識別された事後条件のための値をクライアントアプリケーション122に伝えることを含むことがある。推論エンジン112は、変更ハンドラを通じて又は他の適切な方法で、XML文書の1グループとして、事後条件値をクライアントアプリケーション122に個々に伝えることができる。推論エンジン112は、すべての事後条件、又は事後条件のいくつかのための値の判断に成功することもあれば、事後条件のいずれの値の判断にも成功しないこともある。
図12は、推論サービスを提供する方法1200の一例を示しているが、方法1200に対しては様々な変更が行われ得る。たとえば、推論エンジン112は、実際の規則116を受け取る前に、任意の事前条件及び事後条件のための値を受け取ることができる。また、推論エンジン112は、推論中に、規則スナップショットなどの追加情報を生成することができる。その上、図12のステップのいくつかが、オーバラップすることがある。一例として、推論エンジン112は、変更ハンドラを使用して、事後条件値をクライアントアプリケーション122に伝えることがある。この場合には、事後条件値は、推論が完了する前に、クライアントアプリケーション122に送られることがある。
図13は、本発明の一実施形態によるルールベースビルディングのための方法1300の例を示す例示的流れ図である。方法1300は、図1のシステム100について記述しているが、他のシステムを使用することもある。
サーバ102は、ステップ1302で、1つ以上のルールベース構成要素を識別する情報を受け取る。このことは、たとえば、ルールベースビルダ110が、ソース又は2進規則116、ルールセット130、又はルールベース114を受け取ることを含むことがある。このことはまた、ルールベースビルダ110が、ソース又は2進規則116、ルールセット130、又はルールベース114の場所を受け取ることを含むことがある。この情報は、ルールベースビルダ110のルールベースビルディングサービスを起動しようとするクライアントアプリケーション122などの、任意の好適なソースから来ることがある。
サーバ102は、ステップ1304で、受け取られたルールベース構成要素が適切なフォーマットを有するかどうかを判断する。このことは、たとえば、サーバ102が、受け取られたルールベース構成要素がXML文書内に包含されているかどうかを判断することを含むことがある。このことはまた、サーバ102が、受け取られたルールベース構成要素が規則定義言語で定義されたフォーマットに従っているかどうかを判断することを含むことがある。従っていない場合は、サーバ102は、ステップ1306で、受け取られたルールベース構成要素を適切なフォーマットに変換し、かつ再フォーマット化する。このことは、たとえば、サーバ102が、ルールベース構成要素をXML文書に変換し、規則定義言語に従うよう、ルールベース構成要素を再フォーマット化することを含むことがある。
サーバ102は、ステップ1308で、ルールベース構成要素を統合されたルールベース114にマージする。このことは、たとえば、サーバ102が、ルールベース構成要素内のクラス又は他のデータオブジェクトの宣言を識別することを含むことがある。このことはまた、サーバ102が、内部データ構造を調べて、以前に調べたルールベース構成要素が同じクラス又は他のデータオブジェクトの別の宣言を含んでいたかどうかを判断することを含むことがある。含んでいない場合は、サーバ102は、その宣言を内部データ構造に追加する。そうでない場合は、サーバ102は、現在の宣言から内部データ構造内に包含されている以前の宣言内に要素を挿入する。サーバ102は、内部データ構造の生成を終了した時に、内部データ構造内に要素を包含する統合されたルールベース114を生成することがある。
サーバ102は、ステップ1310で、統合されたルールベース114をコンパイルする。このことは、たとえば、サーバ102が、統合されたルールベース114を様々な構造に解析することを含むことがあり、それぞれの構造は、規則定義言語で定義されたXML要素に対応する。このことはまた、サーバ102が、構造の様々な要素間のリンクを識別して、構造間の相互接続を作成することを含むことがある。このことはまた、サーバ102が、2進バージョンの統合されたルールベース114を作成することをさらに含むことがある。
図13は、ルールベースビルディングのための方法1300の一例を示しているが、方法1300に対しては様々な変更が行われ得る。たとえば、ルールベースビルダ110は、適切なフォーマットを有するルールベース構成要素のみを受け取ることができ、ルールベースビルダ110は、ルールベース構成要素を変換する必要がない。また、ルールベースビルダ110は、ロードマップ及びアプリケーションインターフェース文書などの追加情報を生成することができる。
図14は、本発明の一実施形態に従って、ルールベース構成要素をマージする方法1400の例を示す例示的流れ図である。方法1400は、図1のシステム100について記述しているが、他のシステムを使用することもある。
サーバ102は、ステップ1402で、ルールベース構成要素を選択する。このことは、たとえば、ルールベースビルダ110が、クライアントアプリケーション122によって供給される1つ以上のルールベース構成要素1150の1つを選択することを含むことがある。サーバ102は、ステップ1404で、選択されたルールベース構成要素を1つ以上のルールベース要素に解析する。このことは、たとえば、ルールベースビルダ110が、ルールベース構成要素1150を、クラス宣言などの様々な宣言に分割することを含むことがある。
サーバ102は、ステップ1406で、ルールベース要素を選択する。このことは、たとえば、ルールベースビルダ110が、選択されたルールベース構成要素1150内に最初に現れるルールベース要素を選択することを含むことがある。サーバ102は、ステップ1408で、選択されたルールベース要素に対応する標準要素を作成する。このことは、たとえば、ルールベースビルダ110が、XMLルールベース要素などのルールベース要素に対応する内部オブジェクトを作成することを含むことがある。
サーバ102は、対応する標準要素を作成した後、ステップ1410で、以前に遭遇した標準要素が同じ名前を有し、同じルールベースレベルに常駐するかどうかを判断する。このことは、たとえば、ルールベースビルダ110が、以前に遭遇した標準要素を包含する内部データ構造を分析することを含むことがある。このことはまた、ルールベースビルダ110が、以前に遭遇した標準要素が同じ名前を有し、同じ階層的ルールベースレベルに常駐し、選択された標準要素と同じタイプの要素であるかどうかを判断することを含むことがある。これらの条件のいずれも真でない場合は、サーバ102は、ステップ1418で、選択された標準要素を内部データ構造内に挿入する。このことは、たとえば、ルールベースビルダ110が、標準要素が常駐している階層レベルに基づいて、標準要素を内部データ構造内の適切な場所に挿入することを含むことがある。
ステップ1410で、3つの条件のすべてに合うと、2つの別個の標準要素が、同じルールベースレベルで同じルールベース構造を定義する。サーバ102は、ステップ1412で、2つの標準要素の1つのみがルールベース論理を定義するかどうかを判断する。ルールベース論理は、制約が満たされたかどうかを判断するために使用される式の定義と、宣言された方法の実施と、規則のための実施とを含むことがある。複数の標準要素が、同じルールベース構造のためのルールベース論理を定義すると、サーバ102は、ステップ1414で誤りを生成する。このことは、たとえば、ルールベースビルダ110が、メッセージハンドラによって捕捉され、かつクライアントアプリケーション122に伝えられた誤りメッセージを生成することを含むことがある。標準要素の1つのみが、同じルールベース構造のためのルールベース論理を定義すると、サーバ102は、ステップ1416で標準要素をマージする。このことは、たとえば、ルールベースビルダ110が、選択された標準要素から内部データ構造内に包含されている標準要素内に一部分を挿入することを含むことがある。
サーバ102は、ステップ1420で処理されるべき、選択されたルールベース構成要素の追加ルールベース要素があるかどうかを判断する。追加ルールベース要素があると、サーバ102は、ステップ1406に戻り、別のルールベース要素を選択する。追加ルールベース要素がない場合は、サーバ102は、ステップ1422で処理すべき、追加ルールベース構成要素があるかどうかを判断する。追加ルールベース構成要素があると、サーバ102は、ステップ1402に戻り、別のルールベース構成要素を選択する。
ルールベース構成要素が処理された後、サーバ102によって作成された内部データ構造は、これらのルールベース構成要素の様々な要素に対応する標準要素を包含する。次いで、サーバ102は、内部データ構造を使用して、他の任意の好適なアクションをとることがある。たとえば、サーバ102は、論理に対応する内部データ構造の文意を分析し、その論理のための2進命令を生成することができる。
図14は、ルールベース構成要素をマージする方法1400の一例を示しているが、方法1400に対しては様々な変更が行われ得る。たとえば、ルールベースビルダ110は、一度に1つのルールベース構成要素を受け取ることができるので、ルールベースビルダ110は、ステップ1402で、ルールベース構成要素を選択する必要がない。また、ルールベースビルダ110は、標準要素のいずれかを内部データ構造内に挿入する前に、すべてのルールベース構成要素のための標準要素を作成することができる。その上、ルールベースビルダ110は、1つの内部データ構造を処理する形で記述されているが、他のタイプ又は数のデータ構造も使用され得る。さらに、ルールベースビルダ110は、ルールベースXML要素を、既存の標準要素と直接比較することができ、これにより、重複する標準要素を作成することが回避される。
規則定義言語(RDL)
一実施形態においては、ルールベースは、規則定義言語を使用して定義される。規則定義言語は、ルールベースを形成する1つ以上のXML文書の構造及びコンテンツを定義する。具体的には、規則定義言語は、クラス、フィールド、方法、及び静的インスタンスの定義などのオブジェクト定義、及びドメイン内に編成される制約及び規則の定義をサポートする。
一実施形態においては、ルールベースは、規則定義言語を使用して定義される。規則定義言語は、ルールベースを形成する1つ以上のXML文書の構造及びコンテンツを定義する。具体的には、規則定義言語は、クラス、フィールド、方法、及び静的インスタンスの定義などのオブジェクト定義、及びドメイン内に編成される制約及び規則の定義をサポートする。
以下に、図1のシステム100を参照しながら、規則定義言語について記述するが、他のシステムも規則定義言語を使用することがある。また、システムが、ルールベースを定義するための他の言語を使用することもある。
1 概要
一般に、規則定義言語により、ユーザは、クラス、インスタンス、フィールド、ドメイン、及びルールセットなどの、ルールベース114内のどのオブジェクトが、パブリックオブジェクトとして、クライアントアプリケーション122と共用されるかを指定することができる。デフォルトにより、ルールベース114内で指定された他のオブジェクトが、そのルールベース114に対してプライベートのままであることがある。共用されているフィールドについて、ユーザは、事前条件として又は事後条件としてそれぞれのフィールドにアクセス可能かどうかを指定することがある。
一般に、規則定義言語により、ユーザは、クラス、インスタンス、フィールド、ドメイン、及びルールセットなどの、ルールベース114内のどのオブジェクトが、パブリックオブジェクトとして、クライアントアプリケーション122と共用されるかを指定することができる。デフォルトにより、ルールベース114内で指定された他のオブジェクトが、そのルールベース114に対してプライベートのままであることがある。共用されているフィールドについて、ユーザは、事前条件として又は事後条件としてそれぞれのフィールドにアクセス可能かどうかを指定することがある。
規則定義言語は、2つのタイプの規則116、即ちパターン合致規則と決定木規則とをサポートする。両タイプの規則とも前向き連鎖中に使用され、決定木規則は後ろ向き連鎖中に使用される。
規則定義言語は、数字、ブール、文字列、関連付けインスタンス、セット、及びインスタンス参照を含む、いくつかの異なるデータ型をサポートする。数字とは、整数と浮動小数点値とを区別しない、一般的な数値データ型である。この値は、任意のサイズを有し、数字の精度は、精度フラグを使用して指定されることがある。値はまた、特定のニーズにより、最近隣値に丸められることがある。一実施形態においては、2つの近接値が等距離にある場合は、推論エンジン112は、常に、偶数の最近隣値に又は奇数の最近隣値に丸めることができる。ブールとは、真又は偽の値である。文字列とは、一連のユニコード文字であり、大文字と小文字とを区別しない。
関連付けインスタンスは、ルールベースインスタンス間の関係を定義する。たとえば、Personインスタンスが、別のPersonインスタンスの配偶者であるか、又はPersonインスタンスが、Duckインスタンスを所有していることがある。規則定義言語は、1対1、1対多数、多数対1、及び多数対多数の関連付けなどの、任意の好適なタイプの関連付けをサポートすることができる。特定の例として、規則定義言語は、所有権(Owns及びIsOwnedBy)関連付け、管理(Manages及びIsManagedBy)関連付け、配偶者(IsSpouseOf)関連付け、及び兄弟(IsSiblingOf)関連付けをサポートすることができる。たとえば、Duckインスタンスのフィールドは、Duckが識別されたPersonによって所有されていることを示す、PersonインスタンスとのIsOwnedBy関連付けを定義することがある。
1つのインスタンス内のインスタンス参照とは、別のインスタンスへの参照である。たとえば、Duckクラスが、所与のDuckインスタンスを所有するPersonインスタンスを識別する、Personへのインスタンス参照を定義することがある。この例においては、インスタンス参照は、他のインスタンスに対するポインタとして作用する。他のデータ型と同様に、インスタンス参照は、既知の又は未知の状態のいずれかであり得る。既知の状態であれば、インスタンス参照値は、インスタンスを参照するか又はナルであり得る。未知の値は未知の関係を表し、ナル値は関係が欠如している既知の値を示すという点において、ナル値は、未知の値とは区別されることがある。
セットとは、一意の要素の無順序の集合である。要素は、上記のデータ型のいずれでも良い。特定の実施形態においては、すべての要素が同じデータ型を有するべきである。規則定義言語は、数組のセットをサポートする場合もしない場合もある。規則定義言語はまた、リスト、日付、及び時間などの、他のデータ型をサポートすることがある。
規則定義言語は、推論エンジン112によって行われる決定を、規則の前提又は制約式のいずれかに分類することがある。このことは、意思決定を、より少数のより良く定義されたコンテキストに限定するための一助となる。このことはまた、ルールベース114又はルールベース114の一部分を作成している開発者に、よりクリーンかつよりアトミックな規則を書き込むことを勧めるための一助となる。このことにより、ルールベース114内のIF−THEN規則の使用が、さらに減少又は削除されることがある。規則定義言語はまた、式がどのような副作用をも有することを認めないことがある。
規則定義言語は、さらに、ポインタ及び動的に割り当てられたオブジェクトの使用を制限することがある。たとえば、規則定義言語は、パターン合致規則内で使用される関連付けインスタンス内及び結合変数内のフィールドに対するポインタの使用を制限することがある。このことが、推論が開始され、ポインタが使用される前の、ルールベース114内の規則116の分析を容易にするための一助となる。特定の実施形態においては、推論が開始される前に、推論エンジン112によってではなく、ルールベースビルダ110がルールベース114をビルドする時に、ルールベース114の分析が行われることがある。別の実施形態においては、ポインタの使用が、他の方法で制限される場合も制限されない場合もある。
その上、サードパーティベンダが機能及び追加情報をルールベース114に追加できるようにするために、サードパーティベンダは、ルールベース114内で定義し、かつ使用する要素及びフィールドに、接頭部を追加することができる。ある実施形態においては、接頭部は、XML名前空間接頭部であり得る。推論エンジン112は、規則定義言語で定義された任意の要素及びフィールドを処理し、接頭部を有する要素及びフィールドなどの、他の任意の要素及びフィールドを無視することができる。
以下の規則定義言語についての記述においては、ルールベース114が1つ以上のXML文書を含むことを想定している。以下の記述においては、XML文書のコンテンツは、Backus−Naur形式(BNF)表記法を使用して記述されており、ルールベース論理の例は、インフィックス表記法を使用している。これは単に例示のためである。XML文書のコンテンツ及び例を記述するために使用される他の表記法も使用され得る。また、他の実施形態においては、ルールベース114は、他のタイプの情報を含むこともでき、XML文書に制限されるものではない。
2 要素属性
規則定義言語は、以下の属性をサポートする。
AbortMsg_Attrib
::=abort_msg=“<StringVal>” //No default
AppShared_Attrib
::=appshared=“true”
::=appshared=“false” //Default
CaseSensitivity_Attrib
::=case_sens=“true”
::=case_sens=“false” //Default
Collection_Attrib
::=coll_type=“set”
::=coll_type=“none” //Default
DataType_Attrib //No default
::=type=“number”
::=type=“boolean”
::=type=“string”
::=type=“inst_ref”
Enabled_Attrib
::=enabled=“true” //Default
::=enabled=“false”
Intrinsic_Attrib
::=intrinsic=“true”
::=intrnsic=“false” //Default
LocTag_Attrib
::=loc_tag=“<StringVal>” //No default
Name_Attrib
::=name=“<Identifier>” //Nodefault
ParamIOType_Attrib
::=iotype=“in” //Default
::=iotype=“out”
PMOptions_Attrib
::=options=“<Options>”//Default(least-recent,multi-fire)
Post_Attrib
::=post_Type=“conditional”
::=post_type=“unconditional” //Default
Precision_Attrib
::=precision=“<IntegerVal>” //Default: “0”
Priority_Attrib
::=priority=“<IntegerVal>” //Default: “0”
ResolutionType_Attrib
::=res_type=“first_valued” //Default
::=res_type=“final_valued”
ResumeVal_Attrib
::=resume_val=“<Value>” //No default
Value Attrib
::=value=“<Value>” //No default
規則定義言語は、以下の属性をサポートする。
AbortMsg_Attrib
::=abort_msg=“<StringVal>” //No default
AppShared_Attrib
::=appshared=“true”
::=appshared=“false” //Default
CaseSensitivity_Attrib
::=case_sens=“true”
::=case_sens=“false” //Default
Collection_Attrib
::=coll_type=“set”
::=coll_type=“none” //Default
DataType_Attrib //No default
::=type=“number”
::=type=“boolean”
::=type=“string”
::=type=“inst_ref”
Enabled_Attrib
::=enabled=“true” //Default
::=enabled=“false”
Intrinsic_Attrib
::=intrinsic=“true”
::=intrnsic=“false” //Default
LocTag_Attrib
::=loc_tag=“<StringVal>” //No default
Name_Attrib
::=name=“<Identifier>” //Nodefault
ParamIOType_Attrib
::=iotype=“in” //Default
::=iotype=“out”
PMOptions_Attrib
::=options=“<Options>”//Default(least-recent,multi-fire)
Post_Attrib
::=post_Type=“conditional”
::=post_type=“unconditional” //Default
Precision_Attrib
::=precision=“<IntegerVal>” //Default: “0”
Priority_Attrib
::=priority=“<IntegerVal>” //Default: “0”
ResolutionType_Attrib
::=res_type=“first_valued” //Default
::=res_type=“final_valued”
ResumeVal_Attrib
::=resume_val=“<Value>” //No default
Value Attrib
::=value=“<Value>” //No default
後のセクションでは、これらの属性を参照する。多くの場合には、このリストが、真及び偽などの、属性が有する実際の値を定義する。その他の場合には、このリストは記号値を反映し、この場合、記号値は括弧(<>)でくくられるが、このことについては、以下により詳細に説明する。
3 ルート要素
この要素は、XML文書のルート要素であり、ルールベース114の構造全体を定義する。これは、以下のフォーマットを有する。
Rulebase_Element
::=(‘rulebase’RB_Attribs+)
RB_Section*
Rulebase_Attribs
::=Name_Attrib //Required
::=LocTag_Attrib //Optional
Rulebase_Section
::=InitMethodDef_Element
::=Assoc_Element
::=ConstraintSet_Element
::=ExternalLib_Element
::=Class_Element
::=Domain_Element
この要素は、XML文書のルート要素であり、ルールベース114の構造全体を定義する。これは、以下のフォーマットを有する。
Rulebase_Element
::=(‘rulebase’RB_Attribs+)
RB_Section*
Rulebase_Attribs
::=Name_Attrib //Required
::=LocTag_Attrib //Optional
Rulebase_Section
::=InitMethodDef_Element
::=Assoc_Element
::=ConstraintSet_Element
::=ExternalLib_Element
::=Class_Element
::=Domain_Element
Name_Attribは、文字数字の列などの、ルールベース114のための名前を指定する。推論エンジン112は、誤り及びトレースメッセージ内で、この名前を使用することがある。Rulebase_Sectionは、ゼロ以上の部分要素を含み、これらの部分要素は、ルールベース114内のグローバル範囲にさらされたオブジェクトを定義する。たとえば、InitMethodDef_Elementsは、ルールベースレベルの初期設定方法を定義し、Assoc_Elementsは、ルールベースレベルのクラス間のルールベースレベルの関係を定義し、ConstraintSet_Elementsは、値の割当てをルールベースレベルのフィールドに制約する方法のルールベースレベルのセットを定義する。ExternalLib_Elementsは、ルールベース114から起動され得る外部ライブラリを定義し、Class_Elementsは、ルールベースレベルクラスのフィールド、方法、及び静的インスタンスを定義する。Domain_Elementsは、ルールベースレベルのドメインリソースを定義する。
上述したように、また以下により詳細に記述するように、規則定義言語は、不完全なルールベースのフラグメントのマージングをサポートして、完全なルールベース114を形成するので、これらの部分要素のすべてがオプションであり得る。また、以下に記述するように、それぞれの部分要素が、Name_Attribを指定することがある。これらの名前は、ルールベースレベルでは一意であり得るが、これより低位のレベルではオーバーライドされることがある。ルールベース114が所与のレベルで同名のオブジェクトを定義すると、ルールベースビルダ110は、マージプロセス中に、これらのオブジェクトを1つのルールベースオブジェクトにマージすることがある。
4 InitMethodDef_Element
この要素は、ルールベース114内のオブジェクトを初期設定する方法を定義し、以下のフォーマットを有する。
InitMethodDef_Element
::=(‘init_method’InitMethodDef_Attribs+)
[InitMethodBody_Element]
InitMethodDef_Attribs
::=Name_Attrib //Required
::=LocTag_Attrib //Optional
この要素は、ルールベース114内のオブジェクトを初期設定する方法を定義し、以下のフォーマットを有する。
InitMethodDef_Element
::=(‘init_method’InitMethodDef_Attribs+)
[InitMethodBody_Element]
InitMethodDef_Attribs
::=Name_Attrib //Required
::=LocTag_Attrib //Optional
InitMethodDef_Elementは、レベル特有のフィールド及び外部ライブラリを初期設定する方法論理を定義する。たとえば、この要素は、後に規則及び制約によって参照される様々なフィールドを初期設定することがある。推論エンジン112は、最初にそのレベルのためのリソースをロードする時に、この方法を起動する。一実施形態においては、推論エンジン112は、この方法を一回起動することがある。所与のレベルに複数のInitMethodDef_Elementがある場合には、推論エンジン112は、任意の好適な順序で要素を起動することがある。この要素内で定義された初期設定方法は、引き数を受け付けず、値を返さないことがある。この方法は、自由に、他の方法を起動し、かつそれらの範囲レベル内のあらゆるオブジェクトにアクセスすることがある。一実施形態においては、この方法は、推論を起動したり、又は未知の状態のフィールドを読み取ろうとすることができないことがある。この実施形態においては、これらのオペレーションのいずれかを検出するとすぐに、推論エンジン112は、誤りメッセージと共に推論を直ちにアボートすることがある。
この要素は、ルールベース114内のいくつかの異なるレベルで指定されることがある。たとえば、ルールベースレベル、ドメインレベル、及びルールセットレベルで指定され得る。所与のレベルに、この要素の複数の指定があることがあるが、それぞれが異なる名前を有するべきである。また、複数のサブルールベースが、同じルールベースレベルで、InitMethodDef_Elementに寄与することができる。
一実施形態においては、フィールドの初期設定は、フィールドの制約を受ける。この方法は、これらの制約に、及びこのような制約が依拠するフィールドにセンシティブであるべきである。たとえば、フィールドの制約はフィールドMaximumAgeに依拠することがあるので、初期設定の方法は、その制約に依存するフィールドを設定する前に、このフィールドが初期設定されていることを確実にするための一助となるべきである。
ルールベース114のサンプルは、以下に示すように、ルールベースレベルでInitMethodDef_Elementを定義することができる。
<init_methodname=“RulebaseConstantsInitializer”>
<method_body>
<![CDATA[
constants.max_age=120
constant.adult_age=21
constant.ValidSymptoms=set(“symptom1”, “symptom2”, “symptom3”)
]]>
</method_body>
</init_method>
この方法により、後に規則及び制約によって使用される、様々な定常場が初期設定される。
<init_methodname=“RulebaseConstantsInitializer”>
<method_body>
<![CDATA[
constants.max_age=120
constant.adult_age=21
constant.ValidSymptoms=set(“symptom1”, “symptom2”, “symptom3”)
]]>
</method_body>
</init_method>
この方法により、後に規則及び制約によって使用される、様々な定常場が初期設定される。
5 Assoc_Element
この要素は、フィールド間の関係を定義し、以下のフォーマットを有する。
Assoc_Element
::=(‘assoc’Assoc_Attribs+)
FieldRef_Element //AssocRolel
FieldRef_Element //AssocRole2
Assoc_Attribs
::=Name_Attrib //Assocname-Required
::=LocTag_Attrib //Optional
FieldRef_Element
::=(‘field_ref’FieldRef_Attribs+)
IdentifierSpec //Class for Field
FieldRef_Attribs
::=Name_Attrib //Field name-Required
::=LocTag_Attrib //Optional
この要素は、フィールド間の関係を定義し、以下のフォーマットを有する。
Assoc_Element
::=(‘assoc’Assoc_Attribs+)
FieldRef_Element //AssocRolel
FieldRef_Element //AssocRole2
Assoc_Attribs
::=Name_Attrib //Assocname-Required
::=LocTag_Attrib //Optional
FieldRef_Element
::=(‘field_ref’FieldRef_Attribs+)
IdentifierSpec //Class for Field
FieldRef_Attribs
::=Name_Attrib //Field name-Required
::=LocTag_Attrib //Optional
この要素は、ルールベース114内のいくつかの異なるレベルで指定されることがある。たとえば、ルールベースレベル、ドメインレベル、及びルールセットレベルで指定され得る。一実施形態においては、関連付けは、その重要性を反映する名前を有する。たとえば、所有権の関連付けは、如何にヒトがカモを所有しているかを定義し、管理の関連付けは、如何にヒトが他のヒトを管理しているかを定義し、配偶者の関連付けは、ヒトとヒトとの間の配偶者関係を定義することがある。
Assoc_Elementは、そのメンバーフィールドをFieldRef_Elementsとして指定する。これらの部分要素のそれぞれが、フィールド名及びそのフィールドを所有又は継承するクラスを指定する。その各クラス内で、これらのフィールドのそれぞれが、インスタンス参照データ型と共に宣言されることがある(以下に記述するDataTypeInstRef_Elementを参照のこと)。指定されたフィールドは、同じクラスのためのフィールドであることも、異なるクラスのためのフィールドであることもある。たとえば、ユーザが、DuckクラスのIsOwnedByフィールドとPersonクラスのOwnsフィールドとの間の関連付けを定義することがある。別の例として、ユーザが、PersonクラスのIsManagedByフィールドとPersonクラスのManagesフィールドとの間の関連付けを定義することがある。ユーザは、さらに、PersonクラスのIsSpouseOfフィールドが両方の関連付けの役割を果たすなどの、両方の関連付けの役割のための同じフィールドを指定することができる。
一実施形態においては、関連付けの多様性(1対1、1対多数、多数対1、多数対多数)が、指定されたフィールドがセットであるかどうかによって変わることがある。たとえば、PersonクラスのOwnsフィールドはセットであるが、DuckクラスのIsOwnedByフィールドはセットでない場合は、その関連付けは、PersonsとDucksとの間の1対多数の関係である。
Assoc_Element要素は、オブジェクトのスーパークラスを関連付けることがある。たとえば、PersonsをBirdsに関連付け、推論エンジン112が、Personと任意の種類のBird(Duck、Vultureなど)との間の関係を多様な形で解釈することがある。
特定の実施形態においては、Assoc_Elementは、そのクラスが、それ自体、同じルールベースレベル(グローバル、ドメイン、ルールセット)にあるフィールドを指定する。この実施形態においては、ドメインレベルの関連付けは、ドメインレベルのクラスのためのフィールドのみを参照し、グローバルレベルのクラスのためのフィールドを参照しないことがある。
ルールベース114のサンプルは、以下に示すように、ルールベースレベルで、2つのAssoc_Elementを定義することができる。
<assocname=“0wnership”>
<field_refname=“Owns”>
<identifiername=“Person”/>
</field_ref>
<field_refname=“IsOwnedBy”>
<identifiername=“Duck”/>
</field_ref>
</assoc>
<assoc name=“Siblingship”>
<field_refname=“IsSiblingOf”>
<identifiername=“Person”/>
</field_ref>
<field_refname=“IsSiblingOf”>
<identifiername=“Person”/>
</field_ref>
</assoc>
<assocname=“0wnership”>
<field_refname=“Owns”>
<identifiername=“Person”/>
</field_ref>
<field_refname=“IsOwnedBy”>
<identifiername=“Duck”/>
</field_ref>
</assoc>
<assoc name=“Siblingship”>
<field_refname=“IsSiblingOf”>
<identifiername=“Person”/>
</field_ref>
<field_refname=“IsSiblingOf”>
<identifiername=“Person”/>
</field_ref>
</assoc>
その上、ルールベース114は、関連付けフィールドを定義することができる。これらのフィールドは、その関連付けに特有なものではあるが、その関連付けの個々のメンバーには特有でない情報を維持するのに有用であり得る。たとえば、配偶者の関連付けが、DateOfMarriageフィールドを有することがある。関連付けフィールドを使用するために、推論エンジン112は、関連付けのインスタンスを維持し、他のインスタンスは、その関連付けインスタンスにアクセスすることができる。たとえば、Personインスタンスが、結婚した日を判断する必要があることがある。このことは、以下のような固有の方法で生じ得る。
marriage_date=@getAssocValue(Father.spouse,spousalship.marriage_date)
@setAssocValue(Father..spouse,Spousalship.marriage_date,20010708)
ここで、第1の引き数は、関連付け内で必要とされるインスタンスを指定し、第2の引き数は、関連する関連付けフィールドを示す。
marriage_date=@getAssocValue(Father.spouse,spousalship.marriage_date)
@setAssocValue(Father..spouse,Spousalship.marriage_date,20010708)
ここで、第1の引き数は、関連付け内で必要とされるインスタンスを指定し、第2の引き数は、関連する関連付けフィールドを示す。
別の実施形態においては、関連付けは、そのフィールドを参加しているインスタンスに「貸し出す」形で取り扱われ得る。たとえば、Personクラスは、Personが配偶者の関連付け内の役割クラスであるという事実により、marriage_dateフィールドを継承することができる。その場合、上記の例は、以下のように記録されることがある。
marriage_date=Father.marriage_date
Father.marriage_date=20010708
marriage_date=Father.marriage_date
Father.marriage_date=20010708
このアプローチにおいて、関連付けインスタンスのフィールド名が、Personクラス(及びその直系尊属クラス)のフィールド名にオーバラップすることがある。同様に、Personクラス(及びその直系尊属クラス)は、異なる関連付けインスタンスのために配偶者の役割を果たす2つのフィールドを定義できないことがある。さらに、Personが複数の異なる関連付け内でクラスの役割を果たす場合は、関連付けは、異なるフィールド名を用いることを必要とすることがある。
marriage_date=Father.Spousalship:marriage_date
Father.Spousalship:marriage_date=20010708
などにより、オプションである特別な接頭部を関連付けフィールドに使用して、これらの事柄のいくつかを無効化することができる。
marriage_date=Father.Spousalship:marriage_date
Father.Spousalship:marriage_date=20010708
などにより、オプションである特別な接頭部を関連付けフィールドに使用して、これらの事柄のいくつかを無効化することができる。
6 ConstraintSet_Element
この要素は、制約の定義の集合を指定し、以下のフォーマットを有する。
ConstraintSet_Element
::=(‘constraint_set’ConstraintSet_Attribs+)
Constraint_Element*
ConstraintSet_Attribs
::=Name_Attrib //Required
::=LocTag_Attrib //Optional
Constraint_Element
::=(‘constraint’Constraint_Attribs+)
GeneralExpr //Boolean expression
Constraint_Attribs
::=Name_Attrib //Required
::=LocTag_Attrib //Optional
この要素は、制約の定義の集合を指定し、以下のフォーマットを有する。
ConstraintSet_Element
::=(‘constraint_set’ConstraintSet_Attribs+)
Constraint_Element*
ConstraintSet_Attribs
::=Name_Attrib //Required
::=LocTag_Attrib //Optional
Constraint_Element
::=(‘constraint’Constraint_Attribs+)
GeneralExpr //Boolean expression
Constraint_Attribs
::=Name_Attrib //Required
::=LocTag_Attrib //Optional
ConstraintSet_Elementは、如何に値がフィールドに割り当てられるかを限定するための基準を指定する。推論エンジン112は、値をターゲットフィールドに割り当てる前に、制約を評価することがある。制約は、(FieldDcl_Elementを使用する)フィールドの宣言を用いるか、又は(StaticInstDef_Elementを使用する)静的インスタンスフィールド修飾子によるかのいずれかにより、フィールドに関連付けられることがある。それぞれの制約のGeneralExprは、ブール式であり得る。この式は、固有の識別子(candidate_value)を、そのフィールドの提案する新しい値に対する記号参照として参照する。式を評価する場合には、推論エンジン112が、任意の記号参照に固有の識別子を代入することがある。その式の値は、候補値が制約を満たしているかどうかを示す。その式の値が真である場合は、推論エンジン112により、値の割当てを続行することが可能となる。真でない場合は、推論エンジン112は、フィールド宣言(又はフィールド修飾子)指定に依存するアクションをとることがある。
式は、方法を起動し、その範囲レベル内のあらゆるオブジェクトにアクセスすることがある。一実施形態においては、式は、未知の状態のフィールドを読み取ろうとしなかったり、又は副作用の原因となったりすることがある。この実施形態においては、これらのオペレーションのいずれかを検出するとすぐに、推論エンジン112は、誤りメッセージと共に推論を直ちにアボートする。
この要素は、複数の制約を定義することができ、これらの制約のそれぞれが、制約セット内に一意の名前を有することがある。この要素はまた、ルールベース114内のいくつかの異なるレベルで指定されることがある。たとえば、ルールベースレベル、ドメインレベル、及びルールセットレベルで指定され得る。推論エンジン112は、同じデータ型のフィールドなどの、いくつかの異なるフィールドの代わりに、同じ制約を評価することがある。
ルールベース114のサンプルは、以下に示すように、ルールベースレベルで、2つのConstraintSet_Elementを定義することができる。
<constraint_setname=“ThingConstraints”>
<constraint name=“CheckAgeConstraints”>
<![CDATA[
@candidate_value>=0 and @candidate_value<=max_age
]]>
</constraint>
</constraint_set>
<constraint_setname=“PersonConstraints”>
<constraint name=“CheckSympConstraints”>
<![CDATA[
@candidate_value<=ValidSymptoms
]]>
</constraint>
</constraint_set>
<constraint_setname=“ThingConstraints”>
<constraint name=“CheckAgeConstraints”>
<![CDATA[
@candidate_value>=0 and @candidate_value<=max_age
]]>
</constraint>
</constraint_set>
<constraint_setname=“PersonConstraints”>
<constraint name=“CheckSympConstraints”>
<![CDATA[
@candidate_value<=ValidSymptoms
]]>
</constraint>
</constraint_set>
7 ExternalLib_Element
この要素により、ユーザは、Java又はC++で符号化されたライブラリなどの、1つ以上の「外部」ライブラリによって供給されるもので、規則定義言語機能を補足することができる。次いで、これらのユーザは、ルールベース114と共に外部ライブラリを分散することができる。ExternalLib_Elementは、外部ライブラリにゲートウェイを提供する。ルールベース114の観点から見て、外部ライブラリは、入力パラメータ、出力パラメータ、及び戻り値を方法に提示する「ブラックボックス」のように見え得る。ルールベース114は、それ自体ルールベース114内で定義された方法であるので、外部ライブラリ内の方法を起動することができる。推論エンジン112は、起動をターゲット環境にマップすることを担当することができる。ExternalLib_Elementの定義には、言語特有の、プラットフォーム特有の、又は環境特有の設定の指定が必要なことがある。その結果、推論エンジン112は、いくつかのターゲット特有のコードを含むことを必要とする場合も必要としない場合もある。
この要素により、ユーザは、Java又はC++で符号化されたライブラリなどの、1つ以上の「外部」ライブラリによって供給されるもので、規則定義言語機能を補足することができる。次いで、これらのユーザは、ルールベース114と共に外部ライブラリを分散することができる。ExternalLib_Elementは、外部ライブラリにゲートウェイを提供する。ルールベース114の観点から見て、外部ライブラリは、入力パラメータ、出力パラメータ、及び戻り値を方法に提示する「ブラックボックス」のように見え得る。ルールベース114は、それ自体ルールベース114内で定義された方法であるので、外部ライブラリ内の方法を起動することができる。推論エンジン112は、起動をターゲット環境にマップすることを担当することができる。ExternalLib_Elementの定義には、言語特有の、プラットフォーム特有の、又は環境特有の設定の指定が必要なことがある。その結果、推論エンジン112は、いくつかのターゲット特有のコードを含むことを必要とする場合も必要としない場合もある。
8 Class_Element
この要素は、フィールド、方法、及び静的インスタンスのクラスを定義する。以下のフォーマットを有する。
Class_Element
::=(‘class’Class_Attribs+)
Class_Item*
Class_Attribs
::=Name_Attrib //Required
::=LocTag_Attrib //Optional
Class_Item
::=Parent_Element
::=FieldDcl_E1ement
::=ClassMethodDef_Element
::=StaticInstDef_Element
Parent_Element
::=(‘parent’[LocTag_Attrib])
IdentifierSpec //Parent Class
この要素は、フィールド、方法、及び静的インスタンスのクラスを定義する。以下のフォーマットを有する。
Class_Element
::=(‘class’Class_Attribs+)
Class_Item*
Class_Attribs
::=Name_Attrib //Required
::=LocTag_Attrib //Optional
Class_Item
::=Parent_Element
::=FieldDcl_E1ement
::=ClassMethodDef_Element
::=StaticInstDef_Element
Parent_Element
::=(‘parent’[LocTag_Attrib])
IdentifierSpec //Parent Class
この要素は、ルールベース114内のいくつかの異なるレベルで指定されることがある。たとえば、ルールベースレベル、ドメインレベル、及びルールセットレベルで指定され得る。いくつかの又はすべての部分要素が、Name_Attribを指定することがある。オーバーロードしている方法を除き、これらの名前は、クラスレベルでは一意であるが、これより高位のレベルでは名前をオーバーライドし、これより低位のレベルではオーバーライドされることがある。また、オーバーロードしている方法を除き、クラスが同名のオブジェクトを定義すると、ルールベースビルダ110は、マージプロセス中にこれらのオブジェクトを1つのルールベースオブジェクトにマージすることがある。Class_Elementは、親Class_Elementを任意に指定することができるので、クラスは1つの継承階層に編成され得る。一実施形態においては、クラスは、せいぜい1つの親クラスを有することがある。特定の実施形態においては、クラスが親を有する場合は、親クラス及び子クラスは、同じルールベースレベル(グローバル、ドメイン、ルールセット)に常駐する。この実施形態においては、ドメインレベルのクラスは、別のドメインレベルのクラスから導出され、グローバルレベルのクラスからは導出され得ない。
特定の実施形態においては、フィールド及び方法は、クラスレベルではなくインスタンスレベルであり、またフィールド及び方法は、プライベート又は保護されたアクセスレベルではなくパブリックレベルである。また、特定の実施形態においては、親クラスではなく末端クラスが生成され得る。クラスを包含するためのサポートがある場合もない場合もある。
ルールベース114のサンプルは、以下などの、ルールベースレベルで、いくつかのClass_Elementを定義することができる。
<classname=“Duck”>
<parent>
<identifiername=“Thing”/>
</parent>
<fieldname=“IsOwnedBy”>
<datatypecoll_type=“none”type=“inst-ref”>
<identifier name="Person”/>
</datatype>
</field>
</class>
<classname=“Duck”>
<parent>
<identifiername=“Thing”/>
</parent>
<fieldname=“IsOwnedBy”>
<datatypecoll_type=“none”type=“inst-ref”>
<identifier name="Person”/>
</datatype>
</field>
</class>
8.1 FieldDcl_Element
Class_Elementのこの要素は、クラスデータオブジェクトを定義し、以下のフォーマットを有する。
FieldDcl_Element
::=(‘field’FieldDcl_Attribs+)
DataType_Element
[ConstrainedBy_Element]
FieldDcl_Attribs
::=Name_Attrib //Required
::=ResolutionType_Attrib //Optional
::=LocTag_Attrib //Optional
ConstrainedBy_Element
::=(‘constrained_by’[LocTag_Attrib])
ConstrainerList_Element
[ConstraintViolation_Element]
ConstrainerList_Element
::=(‘constrainer_list’[LocTag_Attrib])
IdentifierSpec* //Applicable Constraints
ConstraintViolation_Element
::=(‘constraint_violation’[LocTag_Attrib])
ConstraintViolation_Option
ConstraintViolation_Option
::=ConstraintAbort_Element
::=ConstraintResume_Element
ConstraintAbort_Element
::=(‘constraint_abort’ConstraintAbort_Attribs*)
ConstraintAbort_Attribs
::=LocTag_Attrib //Optional
::=AbortMsg_Attrib //Optional
ConstraintResume_Element
::=(‘constraint_resume’ConstraintResume_Attribs*)
ConstraintResume_Atttibs
::=LocTag_Attrib //Optional
::=ResumeVal_Attrib //Optional
Class_Elementのこの要素は、クラスデータオブジェクトを定義し、以下のフォーマットを有する。
FieldDcl_Element
::=(‘field’FieldDcl_Attribs+)
DataType_Element
[ConstrainedBy_Element]
FieldDcl_Attribs
::=Name_Attrib //Required
::=ResolutionType_Attrib //Optional
::=LocTag_Attrib //Optional
ConstrainedBy_Element
::=(‘constrained_by’[LocTag_Attrib])
ConstrainerList_Element
[ConstraintViolation_Element]
ConstrainerList_Element
::=(‘constrainer_list’[LocTag_Attrib])
IdentifierSpec* //Applicable Constraints
ConstraintViolation_Element
::=(‘constraint_violation’[LocTag_Attrib])
ConstraintViolation_Option
ConstraintViolation_Option
::=ConstraintAbort_Element
::=ConstraintResume_Element
ConstraintAbort_Element
::=(‘constraint_abort’ConstraintAbort_Attribs*)
ConstraintAbort_Attribs
::=LocTag_Attrib //Optional
::=AbortMsg_Attrib //Optional
ConstraintResume_Element
::=(‘constraint_resume’ConstraintResume_Attribs*)
ConstraintResume_Atttibs
::=LocTag_Attrib //Optional
::=ResumeVal_Attrib //Optional
FieldDcl_Elementは、「解決タイプ」を任意に指定することができるフィールドである、フィールド解決タイプを含むことができる。解決タイプは、決定木規則を処理する場合に、推論エンジン122の挙動に適用され、「第1の値」(デフォルト)又は「最終値」のいずれかで指定され得る。この設定により、推論エンジン112はフィールドの第1の値がその解決値であると想定すべきか、又は推論エンジン112はその解決値に至る途中の中間値がフィールドに割り当てられると予想すべきかどうかが判断される。たとえば、Ageフィールドは、一般に、「第1の値」フィールドであり、SetOfResultsフィールドは、「最終値」フィールドである。
FieldDcl_Elementはまた、フィールド値の割当てに制約を課すべきであることを任意に指定することができる。フィールドに値を割り当てる前に、推論エンジン112は、ConstrainerList_Elementによって指定された順序で、ゼロ以上の制約を評価することがある。制約のいずれかがブール偽値を評価する場合は、推論エンジン112は、ConstraintViolation_Elementにより、違反アクションを実施することがある。ConstraintViolation_ElementがConstraintAbort_Elementを指定する場合は、推論エンジン112は、推論をアボートすることがある。その要素がAbortMsg_Attribを指定する場合は、その属性の値は、誤りメッセージテキストであり得る。そうでない場合は、誤りメッセージは、デフォルトテキストを反映することがある。ConstraintViolation_ElementがConstraintResume_Elementを指定する場合は、推論エンジン112は、推論を再開することがある。その要素がResumeVal_Elementを指定する場合は、推論エンジン112は、フィールドの現在の値を属性の値に置換することがある。そうでない場合は、フィールドは、その現在の値を保持することがある。ConstraintViolation_Elementがない場合は、推論エンジン112は、デフォルト誤りメッセージと共に推論をアボートすることがある。FieldDcl_Elementレベルで指定された制約が、そのフィールドのクラスのすべてのインスタンスに適用されることがある。ユーザが、インスタンス特有の制約を指定することもある。
ルールベース114のサンプルからのフィールド宣言のサンプルは、以下のようであり得る。
<fieldname=“Symptoms”>
<datatype coll_type=“set”type=“string”/>
<constrained_by>
<constrainer_list>
<identifier name=“CheckSympConstraints”/>
</constrainer_list>
<constraint_violation>
<constraint_abortabort_msg=“Invalid symptoms
specified”/>
</constraint_violation>
</constrained_by>
</field>
<fieldname=“Symptoms”>
<datatype coll_type=“set”type=“string”/>
<constrained_by>
<constrainer_list>
<identifier name=“CheckSympConstraints”/>
</constrainer_list>
<constraint_violation>
<constraint_abortabort_msg=“Invalid symptoms
specified”/>
</constraint_violation>
</constrained_by>
</field>
8.2 ClassMethodDef_Element
Class_Elementのこの要素は、クラス方法オブジェクトを定義し、以下のフォーマットを有する。
ClassMethodDef_Element
::=(‘method’ClassMethodDef_Attribs+)
[DataType_Element] //MethodReturnType
[ClassMethodParams]
[ClassMethodBody_Element]
ClassMethodDef_Attribs
::=Name_Attrib //Required
::=LocTag_Attrib //Optional
ClassMethodParams
::=ClassParam_Element
::=ClassParamList_E1ement
ClassParam_Element
::=(‘param’ClassParamAttribs+)
DataType_Element
ClassParamAttribs
::=Name_Attrib //Required
::=ParamIOType_Attrib //Optional
::=LocTag_Attrib //Optional
ClassParamList_Element
::=(‘method_params’[LocTag_Attrib])
ClassParam_Element*
ClassMethodBody_Element
::=(‘method_body’[LocTag_Attrib])
Statement*
Class_Elementのこの要素は、クラス方法オブジェクトを定義し、以下のフォーマットを有する。
ClassMethodDef_Element
::=(‘method’ClassMethodDef_Attribs+)
[DataType_Element] //MethodReturnType
[ClassMethodParams]
[ClassMethodBody_Element]
ClassMethodDef_Attribs
::=Name_Attrib //Required
::=LocTag_Attrib //Optional
ClassMethodParams
::=ClassParam_Element
::=ClassParamList_E1ement
ClassParam_Element
::=(‘param’ClassParamAttribs+)
DataType_Element
ClassParamAttribs
::=Name_Attrib //Required
::=ParamIOType_Attrib //Optional
::=LocTag_Attrib //Optional
ClassParamList_Element
::=(‘method_params’[LocTag_Attrib])
ClassParam_Element*
ClassMethodBody_Element
::=(‘method_body’[LocTag_Attrib])
Statement*
方法は、任意のデータ型の任意の数の引き数を任意に受け入れることができ、そして、その方法は、それぞれのパラメータを入力(「イン」)パラメータ又は出力(「アウト」)パラメータのいずれかとして分類することがある。一実施形態においては、パラメータは、デフォルトにより、入力パラメータ又は出力パラメータのいずれかであり得る。特定の実施形態においては、パラメータは、入力パラメータと出力パラメータの両方ではないことがある。規則定義言語は、オーバーロードしている方法をサポートすることがあり、従って、それらのパラメータリストが区別できるものである限り、クラスは同じ名前の複数の方法を定義することがある。このような区別においては、ClassParamAttribs(ParamIOType_Attribなど)又は数字の精度を斟酌しないことがある。方法は、任意のデータ型の1つ以上の値を任意に返すことができる。方法が値を返すと、サーバ102は、それを機能方法として分類することがある。そうでない場合は、サーバ102は、それを手順方法として分類することがある。サーバ102は、恐らく手順方法に課されない機能方法に制限を課す。これは、機能方法が式であり、式が副作用を有さないためである。したがって、サーバ102は、機能方法が、出力パラメータをサポートし、フィールドに値を割り当て、手順方法を起動し、又は動的インスタンスを作成又は消去することを認めないことがある。
ClassMethodBody_Elementが指定されない場合は、サーバ102は、別のルールベース114が方法の実施を定義し、他のルールベース114が推論の前に現在のルールベース114とマージされると想定することがある。
ルールベース114のサンプルからの方法定義のサンプルは、以下のようであり得る。
<method name=“Has1stSymptomButNot2ndOne”>
<datatypecoll_type=“none”type=“boolean”/>
<method_params>
<paramname=“symp1”iotype=“in”>
<datatype coll_type=“none”type="string”/>
</param>
<paramname=“symp2”iotype=“in”>
<datatype coll_type=“none”type=“string”/>
</param>
</method_params>
<method_body>
<![CDATA[
return Symptoms.@Set_DoesIncludeVal(symp1)
and not Symptoms.@Set_DoesIncludeVal(symp2)
]]>
</method_body>
</method>
<method name=“Has1stSymptomButNot2ndOne”>
<datatypecoll_type=“none”type=“boolean”/>
<method_params>
<paramname=“symp1”iotype=“in”>
<datatype coll_type=“none”type="string”/>
</param>
<paramname=“symp2”iotype=“in”>
<datatype coll_type=“none”type=“string”/>
</param>
</method_params>
<method_body>
<![CDATA[
return Symptoms.@Set_DoesIncludeVal(symp1)
and not Symptoms.@Set_DoesIncludeVal(symp2)
]]>
</method_body>
</method>
8.3 StaticInstDef_Element
Class_Elementのこの要素は、クラス静的インスタンスオブジェクトを定義し、以下のフォーマットを有する。
StaticInstDef_Element
::=(‘instance’StaticInst_Attribs+)
[FieldModifiers_Element]
StaticInst_Attribs
::=Name_Attrib //Required
::=LocTag_Attrib //Optional
FieldModifiers_Element
::=(‘field_modifiers’[LocTag_Attrib])
FieldModifier_Element*
FieldModifier_Element
::=(‘field_modifier’FieldModifier_Attribs+)
[ConstrainedBy_Element]
[LastChanceValue_Element]
FieldModifier_Attribs
::=Name_Attrib //Required
::=LocTag_Attrib //Optional
LastChanceValue_Element
::=(‘lastchance_value’[LocTag_Attrib])
LastChanceValue
LastChanceValue
::=LiteralConstant_Element
::=UnaryExpr //with LiteralConstant_Element
::=SetConstant_Element
::=IdentifierSpec //Instance name
Class_Elementのこの要素は、クラス静的インスタンスオブジェクトを定義し、以下のフォーマットを有する。
StaticInstDef_Element
::=(‘instance’StaticInst_Attribs+)
[FieldModifiers_Element]
StaticInst_Attribs
::=Name_Attrib //Required
::=LocTag_Attrib //Optional
FieldModifiers_Element
::=(‘field_modifiers’[LocTag_Attrib])
FieldModifier_Element*
FieldModifier_Element
::=(‘field_modifier’FieldModifier_Attribs+)
[ConstrainedBy_Element]
[LastChanceValue_Element]
FieldModifier_Attribs
::=Name_Attrib //Required
::=LocTag_Attrib //Optional
LastChanceValue_Element
::=(‘lastchance_value’[LocTag_Attrib])
LastChanceValue
LastChanceValue
::=LiteralConstant_Element
::=UnaryExpr //with LiteralConstant_Element
::=SetConstant_Element
::=IdentifierSpec //Instance name
推論エンジン112は、インスタンスのクラスをロードする場合に静的インスタンスを作成し、インスタンスのクラスをアンロードする場合にそのインスタンスを消去することがある。一実施形態においては、ルールベース論理は、静的インスタンスを明示的に作成又は消去できないことがある。この要素は、最後のチャンス値及び制約などの、インスタンス特有のフィールド特性を指定するFieldModifiers_Elementを任意に指定することがある。FieldModifiers_ElementのためのName_Attribは、影響を受けたインスタンスフィールドを示す。この名前から、インスタンスのクラスによって宣言された又は継承されたフィールドが識別されることがある。
LastChanceValue_Elementは、フィールドのための最後のチャンス値を指定する。インスタンス参照データ型については、最後のチャンス値は、別の静的インスタンス又はこのようなインスタンスの1組のための識別子であり得る。別のデータ型のフィールドについては、値は、リテラル定数、セット定数、又はリテラル定数上の単項演算子であり得る。後者の場合には、リテラル定数は、数字又はブール定数であり得る。推論エンジン112は、決定木規則に関して良く定義された状況において、最後のチャンス値を適用でき、従って、最後のチャンス値の静的インスタンス定義は、推論エンジン112がそれらに適用されることを本質的に保証しないことがある。
制約部分要素は、フィールド値の割当てに制約を課すべきであることを指定する。制約についてのさらなる情報が、FieldDcl_Elementセクション内のConstrainedBy_Elementについての上記の記述において見られることがある。StaticInstDef_Elementレベルで指定された制約は、そのインスタンスのみに適用されることがある。たとえば、ユーザは、Mother.AgeではなくFather.Ageのための異なる制約を指定することができる。ユーザはまた、あるクラスのすべてのインスタンスに適用されるクラスレベルの制約を指定することがある。所与のフィールドについて、ユーザが両方のレベルの制約を指定した場合は、推論エンジン112は、インスタンス特有の制約の前に、クラスレベルの制約を適用することがある。
ルールベース114のサンプルからのStaticInstDef_Element定義のサンプルは、以下のようであり得る。
<instancename=“CurrentPatient”>
<field_modifiers>
<field_modifiername=“age”>
<lastchance_value>
<literal_constant value=“55”/>
</lastchance_value>
</field_modifier>
</field_modifiers>
</instance>
<instancename=“CurrentPatient”>
<field_modifiers>
<field_modifiername=“age”>
<lastchance_value>
<literal_constant value=“55”/>
</lastchance_value>
</field_modifier>
</field_modifiers>
</instance>
9 Domain_Element
この要素は、ルールベースレベルのドメインリソースを定義し、以下のフォーマットを有する。
Domain_Element
::=(‘domain’Domain_Attribs+)
Domain_Items*
Domain_Attribs
::=Name_Attrib //Required
::=AppShared_Attrib //Optional
::=LocTag_Attrib //Optional
Domain_Items
::=DomainGoal_Element
::=DomainAppSharedFlds_Element
::=InitMethodDef_Element
::=Assoc_Element
::=ConstraintSet_Element
::=Class_Element
::=Ruleset_Element
この要素は、ルールベースレベルのドメインリソースを定義し、以下のフォーマットを有する。
Domain_Element
::=(‘domain’Domain_Attribs+)
Domain_Items*
Domain_Attribs
::=Name_Attrib //Required
::=AppShared_Attrib //Optional
::=LocTag_Attrib //Optional
Domain_Items
::=DomainGoal_Element
::=DomainAppSharedFlds_Element
::=InitMethodDef_Element
::=Assoc_Element
::=ConstraintSet_Element
::=Class_Element
::=Ruleset_Element
この要素は、AppShared_Attribフィールドを使用することにより、ドメインがクライアントアプリケーション122によってロードされることを任意に指定することがある。そうでない場合は、ドメインは、dmn_push()固有の方法を使用してルールベース論理からロードできる。ルールベース114は、少なくとも1つのドメインをクライアントアプリケーション122と共用することがあるが、複数のドメインをクライアントアプリケーション122と共用することもできる。
大部分の部分要素は、Name_Attribを指定することがある。これらの名前は、ドメインレベルでは一意であるが、これより高位のレベルでは名前をオーバーライドし、これより低位のレベルではオーバーライドされることがある。ドメインが所与のレベルで同名のオブジェクトを定義すると、ルールベースビルダ110は、マージプロセス中に、これらのオブジェクトを1つのルールベースオブジェクトにマージすることがある。
InitMethodDef_Element、Assoc_Element、ConstraintSet_Element、Class_Elementなどの、ドメイン部分要素のいくつかは、前に記述したルールベースレベルの部分要素と同じであり得る。DomainGoal_Element、DomainAppSharedFlds_Element、Ruleset_Elementなどの他の部分要素は、ドメインに特有であり、これについては以下に記述する。
9.1 DomainGoal_Element
Domain_Elementのこの要素は、ドメインのための目標フィールドを指定し、以下のフォーマットを有する。
DomainGoal_Element
::=(‘domain_goal’[LocTag_Attrib])
IdentifierSpec //Backward-chaining goal(Field)
Domain_Elementのこの要素は、ドメインのための目標フィールドを指定し、以下のフォーマットを有する。
DomainGoal_Element
::=(‘domain_goal’[LocTag_Attrib])
IdentifierSpec //Backward-chaining goal(Field)
Domain_ElementがDomainGoal_Elementを指定する場合は、推論エンジン112は、目標フィールドを解決するために、ドメインの規則を後ろ向き連鎖することがある。指定しない場合は、推論エンジン112は、ドメインの規則を前向き連鎖することがある。
ルールベース114のサンプルからのDomainGoal_Elementのサンプルは、以下のようであり得る。
<domain name=“PerformConclusionAnalysis”appshared=“true”>
<domain_goal>
<identifiername=“OverallConclusion”/>
</domain_goal>
...
</domain>
<domain name=“PerformConclusionAnalysis”appshared=“true”>
<domain_goal>
<identifiername=“OverallConclusion”/>
</domain_goal>
...
</domain>
9.2 DomainAppSharedFlds_Element
Domain_Elementのこの要素は、クライアントアプリケーション122と共用されるフィールドを指定し、以下のフォーマットを有する。
DomainAppSharedFlds_Element
::=(‘appshared_fields’[LocTag_Attrib])
[DomainPreConditionList_Element]
[DomainPostConditionList_Element]
DomainPreConditionList_Element
::=(‘precondition_list’[LocTag_Attrib])
ConditionListItem*
DomainPostConditioniList_Element
::=(‘postcondition_list’[LocTag_Attrib])
ConditionListItem*
ConditionListItem //Restricted to globalfields
::=IdentifierSpec
::=FieldRef_Element
Domain_Elementのこの要素は、クライアントアプリケーション122と共用されるフィールドを指定し、以下のフォーマットを有する。
DomainAppSharedFlds_Element
::=(‘appshared_fields’[LocTag_Attrib])
[DomainPreConditionList_Element]
[DomainPostConditionList_Element]
DomainPreConditionList_Element
::=(‘precondition_list’[LocTag_Attrib])
ConditionListItem*
DomainPostConditioniList_Element
::=(‘postcondition_list’[LocTag_Attrib])
ConditionListItem*
ConditionListItem //Restricted to globalfields
::=IdentifierSpec
::=FieldRef_Element
ドメインがDomainAppSharedFlds_Element部分要素を含む場合は、そのドメイン自体が、クライアントアプリケーション122と自動的に共用されることがある。DomainAppSharedFlds_Elementは、2つの部分要素、即ち、事前条件を推論するための部分要素、及び事後条件を推論するための別の部分要素を指定する。それぞれの部分要素が、ゼロ以上のルールベースレベルのフィールドを指定する。一実施形態においては、リストは、ドメインレベルのフィールドではなくルールベースレベルのフィールドを指定することがある。両方のリストに同じフィールドが指定されると、そのフィールドは、事前条件フィールドであると想定されることがある。
DomainPreConditionList_Elementは、クライアントアプリケーション122によって読取り可能かつ書込み可能なフィールドを識別する。DomainPostConditionList_Elementは、クライアントアプリケーション122に対して読取り専用のフィールドを識別する。推論エンジン112は、クライアントアプリケーション122によるフィールドへの不正アクセスの試行を拒絶することがある。一実施形態においては、異なるルールベースドメインは、それらの入力及び出力フィールドが異なることがあるので、異なるDomainAppSharedFlds_Elementを指定することがある。
ルールベース114のサンプルからのDomainAppSharedFlds_Elementのサンプルは、以下のようであり得る。
<domain name=“PerformConclusionAnalysis”appshared=“true”>
...
<appshared_fields>
<precondition_list>
<identifier name=“Fact1”/>
<identifier name=“Fact2”/>
<identifier name=“Fact3”/>
<identifier name=“Fact4”/>
</precondition_list>
<postcondition_list>
<identifier name=“OverallConclusion”/>
<postcondition_list>
</appshared_fields>
...
</domain>
<domain name=“PerformConclusionAnalysis”appshared=“true”>
...
<appshared_fields>
<precondition_list>
<identifier name=“Fact1”/>
<identifier name=“Fact2”/>
<identifier name=“Fact3”/>
<identifier name=“Fact4”/>
</precondition_list>
<postcondition_list>
<identifier name=“OverallConclusion”/>
<postcondition_list>
</appshared_fields>
...
</domain>
上記の例は、4つの事前条件フィールド及び1つの事後条件フィールドの定義を示している。それぞれのフィールドについて、これらのフィールドのために定義されたクラスインスタンスはただ1つしかない(従って参照曖昧性がない)ので、1つの識別子のみが指定されている。一般に、共用されるフィールドは1つの静的インスタンスに特有であるので、たとえば、ドメインが、Mother.AgeではなくFather.Ageを共用することがある。ドメインが複数のインスタンスのためのフィールドを共用する必要がある場合は、DomainAppSharedFlds_Elementは、以下などにより、それぞれのインスタンスに1つずつ、複数のフィールドを指定することがある。
<precondition_list>
<identifier_path>
<identifiername=“Father”/>
<identifiername=“Age”/>
</identifier_path>
<identifier_path>
<identifiername=“Mother”/>
<identifiername=“Age”/>
<identifier_path>
</precondition_list>
<precondition_list>
<identifier_path>
<identifiername=“Father”/>
<identifiername=“Age”/>
</identifier_path>
<identifier_path>
<identifiername=“Mother”/>
<identifiername=“Age”/>
<identifier_path>
</precondition_list>
ドメインはまた、クラスのすべてのインスタンスのためのフィールドを共用することを選択することができる。そのために、DomainAppSharedFlds_Elementは、以下などにより、FieldRef_Elementを使用してフィールドを指定する。
<precondition_list>
<field_ref name=“Age”>
<identifiername=“Person”/>
</field_ref>
</precondition_list>
<precondition_list>
<field_ref name=“Age”>
<identifiername=“Person”/>
</field_ref>
</precondition_list>
この例は、AgeフィールドがPersonのすべてのインスタンスに共用されるべきであることを指定する。このことは、動的インスタンスと共に使用される場合に有用であり得るが、この場合、所与のフィールドのためにすべてのインスタンスを項目別に掲げることは、実際的でもなければ可能でもない。
FieldRef_Elementは、以下などの、親クラス及び末端クラスを指定することができる。
<precondition_list>
<field_refname=“Age”>
<identifiername=“Bird”/>
</field_ref>
</precondition_list>
<precondition_list>
<field_refname=“Age”>
<identifiername=“Bird”/>
</field_ref>
</precondition_list>
この形式は、以下などの、その親クラスから導出されるすべての末端クラスのための省略表現である。
<precondition_list>
<field_refname=“Age”>
<identifiername=“Duck”>
</field_ref>
<field_refname=“Age”>
<identifiername=“Vulture”/>
</field_ref>
<field_refname=“Age”>
<identifiername=“Robin”/>
</field_ref>
</precondition_list>
<precondition_list>
<field_refname=“Age”>
<identifiername=“Duck”>
</field_ref>
<field_refname=“Age”>
<identifiername=“Vulture”/>
</field_ref>
<field_refname=“Age”>
<identifiername=“Robin”/>
</field_ref>
</precondition_list>
9.3 Ruleset_Element
Domain_Elementのこの要素は、ルールセットレベルのリソースを定義し、以下のフォーマットを有する。
Ruleset_Element
::=(‘ruleset’Ruleset_Attribs+)
Ruleset_Item*
Ruleset_Attribs
::=Name_Attrib //Required
::=Post_Attrib //Optional
::=AppShared_Attrib //Optional
::=LocTag_Attrib //Optional
Ruleset_Item
::=InitMethodDef_Element
::=Assoc_Element
::=ConstraintSet_Element
::=Class_Element
::=Rule_Element
Domain_Elementのこの要素は、ルールセットレベルのリソースを定義し、以下のフォーマットを有する。
Ruleset_Element
::=(‘ruleset’Ruleset_Attribs+)
Ruleset_Item*
Ruleset_Attribs
::=Name_Attrib //Required
::=Post_Attrib //Optional
::=AppShared_Attrib //Optional
::=LocTag_Attrib //Optional
Ruleset_Item
::=InitMethodDef_Element
::=Assoc_Element
::=ConstraintSet_Element
::=Class_Element
::=Rule_Element
この要素は、Post_Attribフィールドを使用して、推論エンジン112が、ルールセットの規則を、クライアントアプリケーション122又はルールベース論理によって制御されるドメインの規則アジェンダに条件付きで記入すべきであることを任意に指定することがある。デフォルトにより、推論エンジン112は、ルールセットがロードされる場合に、規則をアジェンダに無条件で記入することがある。この要素はまた、AppShared_Attribフィールドを使用して、ルールセットがクライアントアプリケーション122からアクセス可能であることを任意に指定することがある。そうでない場合は、ルールセットは、ルールベース論理からのみアクセス可能である。
ドメインは、クライアントアプリケーション122と、複数のルールセットを共用することがある。ドメインがルールセットを共用する場合は、ドメイン自体もまた、クライアントアプリケーション122と自動的に共用されることがある。ルールセットがアプリケーションと共用される場合は、Post_Attribは、「条件付き」に設定されることがある。そうでない場合は、サーバ102は、シンタックス誤りと共に要素を拒絶することがある。ルールセットがクライアントアプリケーション122と共用されされない場合は、Post_Attribは、「条件付き」又は「無条件」のいずれかに設定されることがある。
すべての部分要素は、Name_Attribを指定することがある。これらの名前は、ルールセットレベルでは一意であるが、これより高位のレベルではオーバーライドし、これより低位のレベルではオーバーライドされることがある。ルールセットが所与のレベルで同名のオブジェクトを定義すると、ルールベースビルダ110は、マージプロセス中に、これらのオブジェクトを1つのルールベースオブジェクトにマージすることがある。
InitMethodDef_Element、Assoc_Element、ConstraintSet_Element、Class_Elementなどのルールセット部分要素のいくつかは、上述したルールベースレベルの部分要素と同じである。Rule_Elementは、ルールセットに特有なものであり、これについては以下に記述する。
ルールベース114のサンプル内のRuleset_Elementのサンプルは、以下のようであり得る。
<domainname=“PerformConclusionAnalysis” appshared=“true”>
...
<rulesetname=“ConclusionAnalysis”>
...
</ruleset>
...
</domain>
<domainname=“PerformConclusionAnalysis” appshared=“true”>
...
<rulesetname=“ConclusionAnalysis”>
...
</ruleset>
...
</domain>
10 Rule_Element
この要素は、規則を定義し、以下のフォーマットを有する。
Rule_Element
::=(‘rule’Rule_Attribs+)
RuleBody
Rule_Attribs
::=Name_Attrib //Required
::=Priority_Attrib //Optional
::=Enabled_Attrib //Optional
::=LocTag_Attrib //Optional
RuleBody
::=DecisionTree_Element
::=PatternMatching_Element
この要素は、規則を定義し、以下のフォーマットを有する。
Rule_Element
::=(‘rule’Rule_Attribs+)
RuleBody
Rule_Attribs
::=Name_Attrib //Required
::=Priority_Attrib //Optional
::=Enabled_Attrib //Optional
::=LocTag_Attrib //Optional
RuleBody
::=DecisionTree_Element
::=PatternMatching_Element
この要素は、Priority_Attribフィールドを使用して、優先レベルを任意に指定することがある。推論エンジン112は、最高値から最低値へ又は最低値から最高値へなどの優先順位により、ドメインアジェンダ内の規則を順番付けることがある。要素が優先レベルを指定しない場合は、推論エンジン112は、ゼロ又は他の好適な値のデフォルト優先度を割り当てることがある。
この要素はまた、Enabled_Attrib属性を介して推論するために、規則を動作可能にすべきかどうかを任意に指定することがある。動作可能にすると、その規則は推論に参加する。そうでない場合は、推論エンジン112はその規則を無視する。一実施形態においては、規則はデフォルトにより動作可能となっている。
規則定義言語は、本来、2つのタイプの規則、即ち決定木規則及びパターン合致規則をサポートする。同じルールセット内に異なるタイプが混合していることがある。ルールエディタ132及びトランスフォーマ133などの、ルールエディタ及びコンバータが、追加のタイプの規則をサポートするよう選択することがある。たとえば、Infix−to−XMLツールもまた、IF−THEN規則をサポートすることができる。IF−THEN規則とは決定木規則の単純な特化であり得るので、Infix−to−XMLツールは、IF−THEN規則から決定木規則を生成することができる。IF−THEN規則と同様に、デシジョンテーブル規則も決定木規則の特化であり得るので、デシジョンテーブル規則についても同じことが言える。
ルールベース114のサンプルからのいくつかのサンプルRule_Elementは、以下のようであり得る。
<domainname=“PerformConclusionAnalysis”appshared=“true”>
...
<rulesetname=“ConclusionAnalysis”>
<rulename=“Overall_status">
...
</rule>
<rulename=“Conclusion1_status”>
...
</rule>
<rulename=“Conclusion2_status”>
...
</rule>
</ruleset>
</domain>
<domainname=“PerformConclusionAnalysis”appshared=“true”>
...
<rulesetname=“ConclusionAnalysis”>
<rulename=“Overall_status">
...
</rule>
<rulename=“Conclusion1_status”>
...
</rule>
<rulename=“Conclusion2_status”>
...
</rule>
</ruleset>
</domain>
10.1 DecisionTree_Element
Rule_Elementのこの要素は、決定木規則の本体を定義する。
Rule_Elementのこの要素は、決定木規則の本体を定義する。
10.1.1 構造要素
決定木は、以下の形式を有する1つ以上の決定を含む。
DecisionTree_Element
::=(‘dec_tree_body’[LocTag_Attrib])
Decision_Element+
決定木は、以下の形式を有する1つ以上の決定を含む。
DecisionTree_Element
::=(‘dec_tree_body’[LocTag_Attrib])
Decision_Element+
10.1.1.1 決定
それぞれの決定は、識別子(Name_Attrib)によって名づけられ、以下の部分要素を含む。
Decision_Element
::=(‘decision’Decision_Attribs+)
GeneralExpr
DecTestGroup_Element*
[DecOtherwise_Element]
[DecUnknown_Element]
Decision_Attribs
::=Name_Attrib //Required
::=LocTag_Attrib //Optional
それぞれの決定は、識別子(Name_Attrib)によって名づけられ、以下の部分要素を含む。
Decision_Element
::=(‘decision’Decision_Attribs+)
GeneralExpr
DecTestGroup_Element*
[DecOtherwise_Element]
[DecUnknown_Element]
Decision_Attribs
::=Name_Attrib //Required
::=LocTag_Attrib //Optional
異なる規則内の決定が同じ決定名を有することがあるが、所与の規則内の決定は、一意の名前を有することがある。決定が、任意のデータ型の基本式(GeneralExpr)を定義することがある。この式は、フィールドを参照し、方法を起動することがある。決定はまた、1つ以上の試験グループ(DecTestGroup_Element)を定義することがある。決定は、さらに、別様の文節(DecOtherwise_Element)及び/又は未知の文節(DecUnknown_Element)を任意に定義することがある。
10.1.1.2 試験グループ決定
それぞれの試験グループは、1つ以上の場合式及び1つの動作句を指定し、以下の形式を有する。
DecTestGroup_Element
::=(‘dec_test_group’[LocTag_Attrib])
DecCaseExpr+
DecAction
それぞれの試験グループは、1つ以上の場合式及び1つの動作句を指定し、以下の形式を有する。
DecTestGroup_Element
::=(‘dec_test_group’[LocTag_Attrib])
DecCaseExpr+
DecAction
推論エンジン112は、場合式(DecCaseExpr)の値を、その決定の基本式の値と比較する。推論エンジン112が少なくとも1つの「等しい」比較を発見すると、推論エンジン112は、そのグループの動作句(DecAction)によって指定されたアクションを実施する。
10.1.1.3 別様の文節決定
別様の文節は、現在の決定のためのデフォルトの動作句を指定し、以下の形式を有する
DecOtherwise_Element
::=(‘dec_otherwise’[LocTag_Attrib])
DecAction
別様の文節は、現在の決定のためのデフォルトの動作句を指定し、以下の形式を有する
DecOtherwise_Element
::=(‘dec_otherwise’[LocTag_Attrib])
DecAction
試験グループ決定がない場合、又はそれらのいずれも、結果として「真」の比較を生じない場合は、推論エンジン112は、この文節の動作句(DecAction)によって指定されたアクションを実施する。
10.1.1.4 未知の文節決定
未知の文節も、別様の文節と同様に、現在の決定のための、特別な場合の動作句であり、以下の形式を有する。
DecUnknown_Element
::=(‘dec_unknown’[LocTag_Attrib])
DecAction
未知の文節も、別様の文節と同様に、現在の決定のための、特別な場合の動作句であり、以下の形式を有する。
DecUnknown_Element
::=(‘dec_unknown’[LocTag_Attrib])
DecAction
推論エンジン112は、未知のフィールドの参照により、その決定の基本式を評価できない場合は、この文節の動作句(DecAction)によって指定されたアクションを実施する。
10.1.1.5 動作句決定
動作句は、2つのタイプのアクションの1つを指定することができ、以下の形式を有する。
DecAction
::=DecStatements_Element
::=DecRef_Element //Nested Decision
DecStatements_Element
::=(‘dec_statements’[LocTag_Attrib])
Statement*
DecRef_Element
::=(‘dec_ref’DecRef_Attribs+)
DecRef_Attribs
::=Name_Attrib //Decision name-Required
::=LocTag_Attrib //Optional
動作句は、2つのタイプのアクションの1つを指定することができ、以下の形式を有する。
DecAction
::=DecStatements_Element
::=DecRef_Element //Nested Decision
DecStatements_Element
::=(‘dec_statements’[LocTag_Attrib])
Statement*
DecRef_Element
::=(‘dec_ref’DecRef_Attribs+)
DecRef_Attribs
::=Name_Attrib //Decision name-Required
::=LocTag_Attrib //Optional
ステートメント動作句(DecStatements_Element)は、実施すべきゼロ以上のステートメントを指定する。これらのアクションを実施するとすぐに、推論エンジン112は、(文節がいくつかのステートメントを指定した場合は)「ファイアされた」又は「保留された」状態のいずれかで、あるいは(文節がステートメントを指定しなかった場合は)「フェイルされた」状態で、その規則を終了する。
決定動作句(DecRef_Element)は、現在の決定木規則内の別の決定に名前を付ける。推論エンジン112は、その名前が付けられた決定を、現在の決定の部分決定として追求する。所与の規則について、(同じ決定であろうとも又は異なる決定であろうとも)複数の決定動作句はすべて、部分決定として同じ決定を参照することがある。
10.1.1.6 試験グループの場合式
それぞれの試験グループの場合式は、部分比較を指定し、以下の形式を有する。
DecCaseExpr
::=PartComp_EQ_Element //=GeneralExpr
::=PartComp_NE_Element //<>GeaeraExpr
::=PartComp_LT_Element //<GeneralExpr
::=PartComp_LTEQ_Element //<=GeneralExpr
::=PartComp_GT_Element //>GeneralExpr
::=PartComp_GTEQ_Element //>=GeneralExpr
::=PartComp_Range_Element //in range:(GeneraIExpr1 GeneralExpr2)
それぞれの試験グループの場合式は、部分比較を指定し、以下の形式を有する。
DecCaseExpr
::=PartComp_EQ_Element //=GeneralExpr
::=PartComp_NE_Element //<>GeaeraExpr
::=PartComp_LT_Element //<GeneralExpr
::=PartComp_LTEQ_Element //<=GeneralExpr
::=PartComp_GT_Element //>GeneralExpr
::=PartComp_GTEQ_Element //>=GeneralExpr
::=PartComp_Range_Element //in range:(GeneraIExpr1 GeneralExpr2)
部分比較(PartComp_xxx_Elements)については後に記述する。一実施形態においては、これらの式は定数式である必要はない。たとえば、これらの式は、自由にフィールドを参照し、方法を起動することがある。これらの式はまた、その決定の基本式とタイプ互換性を有することがある。
10.1.2 動的識別子経路内のナル
一実施形態においては、動的識別子経路は、ナル値を含むことができる。たとえば、ステートメント、
Duckl.OwnedBy.SpouseOf.Name=“fred”
において、SpouseOfは、ナル値を有することがある。基本式の評価中にナル値が検出されると、推論エンジン112は、(otherwise文節を指定しない場合は)規則をフェイルすることがある。テストケースの評価中にナル値が検出されると、推論エンジン112は、そのテストケースをフェイルするが、他のテストケースで再開することがある。アクションの実施中にナル値が検出されると、推論エンジン112は、誤りと共に推論をアボートすることがある。
一実施形態においては、動的識別子経路は、ナル値を含むことができる。たとえば、ステートメント、
Duckl.OwnedBy.SpouseOf.Name=“fred”
において、SpouseOfは、ナル値を有することがある。基本式の評価中にナル値が検出されると、推論エンジン112は、(otherwise文節を指定しない場合は)規則をフェイルすることがある。テストケースの評価中にナル値が検出されると、推論エンジン112は、そのテストケースをフェイルするが、他のテストケースで再開することがある。アクションの実施中にナル値が検出されると、推論エンジン112は、誤りと共に推論をアボートすることがある。
推論エンジン112はまた、単純実行文について考慮することがある。たとえば、これらのステートメント、
isTrue=Duckl.OwnedBy.SpouseOf.Name=“fred”
//SpouseOf is null
isTrue=Duckl.owner.age>5and Duckl.spouse.age<5
//Owner and/or Spouse are null
において、推論エンジン112は、アボートするのではなく、関係部分式を偽であると評価することがある。同様に、
evalDuckl.owner.age<5 or Duckl.spouse.age<5//Owner is null
などの基本式の前提について、
推論エンジン112は、個々の比較をフェイルすることがある。しかし、Ownerがナルであり、Spouseがナルではなく、Spouseが充分に若い場合に、推論エンジン112は、なおも基本式を真であると評価することがある。
isTrue=Duckl.OwnedBy.SpouseOf.Name=“fred”
//SpouseOf is null
isTrue=Duckl.owner.age>5and Duckl.spouse.age<5
//Owner and/or Spouse are null
において、推論エンジン112は、アボートするのではなく、関係部分式を偽であると評価することがある。同様に、
evalDuckl.owner.age<5 or Duckl.spouse.age<5//Owner is null
などの基本式の前提について、
推論エンジン112は、個々の比較をフェイルすることがある。しかし、Ownerがナルであり、Spouseがナルではなく、Spouseが充分に若い場合に、推論エンジン112は、なおも基本式を真であると評価することがある。
10.1.3 規則及び挙動の例
決定木の決定が、C、C++、及びJavaで見られるスイッチステートメントと同様であることがある。決定の基本式はスイッチ式に対応し、試験グループの場合式はそのスイッチの場合分け文に対応し、決定の別様の文節はそのスイッチのデフォルトの場合に対応することがある。
決定木の決定が、C、C++、及びJavaで見られるスイッチステートメントと同様であることがある。決定の基本式はスイッチ式に対応し、試験グループの場合式はそのスイッチの場合分け文に対応し、決定の別様の文節はそのスイッチのデフォルトの場合に対応することがある。
ここに、1つの決定を反映する、非常に単純な決定木規則のインフィックスコードの例がある。
<rule name=“Fact1_is_true”>
<![CDATA[
decisionmain
evalFact2
then
case=false:
do Fact1=true end
end
]]>
</rule>
<rule name=“Fact1_is_true”>
<![CDATA[
decisionmain
evalFact2
then
case=false:
do Fact1=true end
end
]]>
</rule>
この例は、より従来型のIF規則の均等物である。規則は、Fact2が偽である場合は、Fact1を真に設定する。
ここに、複数の決定を反映する別の例がある。
<rulename=“Determine_Fact4_status”>
<![CDATA[
decisionmain
evalage
then
case<21.5:
decision sub1
case>=30..<=32:
case>=41..<=55.5:
decision sub2
case>32..<41:
do end
otherwise:
do Fact4=false end
unknown:
do Fact4=true end
end
decisionsub1
evalFact2
then
case=true:
do Fact4=false end
otherwise:
do Fact4=true end
end
decisionsub2
evalFact3
then
case=false:
do Fact4=true end
otherwise:
do Fact4=false end
end
]]>
</rule>
<rulename=“Determine_Fact4_status”>
<![CDATA[
decisionmain
evalage
then
case<21.5:
decision sub1
case>=30..<=32:
case>=41..<=55.5:
decision sub2
case>32..<41:
do end
otherwise:
do Fact4=false end
unknown:
do Fact4=true end
end
decisionsub1
evalFact2
then
case=true:
do Fact4=false end
otherwise:
do Fact4=true end
end
decisionsub2
evalFact3
then
case=false:
do Fact4=true end
otherwise:
do Fact4=false end
end
]]>
</rule>
この規則は、年齢を評価し、その結果に基づいて、アクションを条件付きで実施する。場合によっては(年齢が15であるなどの)、アクションは、(規則にそれに特徴的な木状の挙動を与える)別の決定を処理する。他の場合には(年齢が35であるなどの)、実施するアクションはない。
この例においては、決定試験グループは、(年齢が35及び45であるなどの)アクションを共用するために、場合を「スタックする」ことができる。未知の文節を使用すると、年齢が未知である状況を捕え、別様の文節を使用すると、決定試験グループによってカバーされていない状況を捕える。
10.1.4 追加挙動
10.1.4.1 ルールベースのコンパイル中
一実施形態においては、ルールベースビルダ110は、所与の決定木規則について、すべての決定が一意に名づけられることを確実にすることがある。この実施形態においては、ルールベースビルダ110はまた、規則の決定の正確に1つが、他の任意の決定により部分決定として参照されないことを確実にすることがある。ルールベースビルダ110は、この決定を規則のルート決定として区別することがある。規則は、決定が部分決定として互いを如何に参照するかに関わらず、任意の順序で決定を指定することがある。複数の決定動作句が、同じ決定を部分決定として指定することがある。ルールベースビルダ110は、自己参照決定及び決定間の「周期的」参照を認めないことがある。
10.1.4.1 ルールベースのコンパイル中
一実施形態においては、ルールベースビルダ110は、所与の決定木規則について、すべての決定が一意に名づけられることを確実にすることがある。この実施形態においては、ルールベースビルダ110はまた、規則の決定の正確に1つが、他の任意の決定により部分決定として参照されないことを確実にすることがある。ルールベースビルダ110は、この決定を規則のルート決定として区別することがある。規則は、決定が部分決定として互いを如何に参照するかに関わらず、任意の順序で決定を指定することがある。複数の決定動作句が、同じ決定を部分決定として指定することがある。ルールベースビルダ110は、自己参照決定及び決定間の「周期的」参照を認めないことがある。
10.1.4.2 推論中
一実施形態においては、推論エンジン112は、ルート決定における規則処理を開始する。次いで、この実施形態においては、推論エンジン112は、そこでの結果に従って、その決定のネストされた決定のせいぜい1つに進むことがある。決定は、任意の数のレベルにネストされることがあるが、それぞれのレベルでは、推論エンジン112の挙動は、同様であり得る。
一実施形態においては、推論エンジン112は、ルート決定における規則処理を開始する。次いで、この実施形態においては、推論エンジン112は、そこでの結果に従って、その決定のネストされた決定のせいぜい1つに進むことがある。決定は、任意の数のレベルにネストされることがあるが、それぞれのレベルでは、推論エンジン112の挙動は、同様であり得る。
所与の決定について、推論エンジン112は、決定の基本式をまず評価する。未知のフィールドの参照により、それがフェイルすると、推論エンジン112は、(指定されている場合は)未知の文節のためのアクションを実施する。このような文節がない場合は、推論エンジン112は、規則の処理を保留された状態で直ちに終了する。
推論エンジン112が決定の基本式を成功裏に評価すると、推論エンジン112は、次に、その式の値を任意の試験グループの場合式に適用する。推論エンジン112は、その決定によって指定された順序で試験グループを訪問する。それぞれの試験グループ内で、推論エンジン112は、その試験グループによって指定された順序で場合式を訪問する。
真の場合を検出するとすぐに、推論エンジン112は、その所有グループのアクションを実施する。試験グループのいずれの場合にも適用されない場合は、推論エンジン112は、(定義されている場合は)別様の文節のアクションを実施するか、又は規則の処理をフェイルされた状態で終了する。
ステートメント動作句は、空である場合も又は空でない場合もある。空である場合は、推論エンジン112は、規則の処理をフェイルされた状態で終了する。空でない場合は、推論エンジン112は、規則の処理をファイアされた又は保留された状態で終了する。
10.1.4.3 場合式のための規則の保留
推論エンジン112は、試験グループの場合式を共通のアクションのための代替資格とみなすことがある。場合式のいずれかが真の場合となると、推論エンジン112は、そのグループのアクションを実施する。
推論エンジン112は、試験グループの場合式を共通のアクションのための代替資格とみなすことがある。場合式のいずれかが真の場合となると、推論エンジン112は、そのグループのアクションを実施する。
未知のフィールドの参照により、場合式の評価がフェイルすると、推論エンジン112は、真の場合のためのそのグループの場合式の他の場合式を評価する。場合式が見つからなかった場合は、推論エンジン112は、保留された状態でその規則を終了する。
このように取り扱った結果、複数のテストケースを有する試験グループは、それぞれ、1つのテストケースを有する複数の試験グループの文意的な均等物でないことがある。たとえば、以下の試験グループが与えられると、
case<minimum
case>maximum
case>dangerous_range_start..<dangerous_range_end
do
DoSomething()
end
推論エンジン112は、たとえ最小値及び最大値が未知であっても、基本式の値が危険範囲内にある場合は、その規則をファイアする。しかし、以下の一見均等物であるような試験グループが与えられると、
case<minimum
do
DoSomething()
end
case>maximum
do
DoSomething()
end
case>dangerous_range_start..<dangerous_range_end
do
DoSomething()
end
推論エンジン112は、たとえ最大値及び/又は範囲値が既知であっても、最小値が未知である場合は、保留された状態でその規則を直ちに終了する。
case<minimum
case>maximum
case>dangerous_range_start..<dangerous_range_end
do
DoSomething()
end
推論エンジン112は、たとえ最小値及び最大値が未知であっても、基本式の値が危険範囲内にある場合は、その規則をファイアする。しかし、以下の一見均等物であるような試験グループが与えられると、
case<minimum
do
DoSomething()
end
case>maximum
do
DoSomething()
end
case>dangerous_range_start..<dangerous_range_end
do
DoSomething()
end
推論エンジン112は、たとえ最大値及び/又は範囲値が既知であっても、最小値が未知である場合は、保留された状態でその規則を直ちに終了する。
10.1.4.4 ステートメントアクションのための規則の保留
規則アクションを実施している間に、推論エンジン112が未知のフィールドに対する参照を検出すると、推論エンジン112は、保留された状態でその規則を直ちに終了する。規則を再始動するとすぐに、推論エンジン112は、前に規則を保留する原因となったアクションの実行を再開する。
規則アクションを実施している間に、推論エンジン112が未知のフィールドに対する参照を検出すると、推論エンジン112は、保留された状態でその規則を直ちに終了する。規則を再始動するとすぐに、推論エンジン112は、前に規則を保留する原因となったアクションの実行を再開する。
10.1.5 その他の考慮事項
推論エンジン112は、決定木規則を前向き連鎖又は後ろ向き連鎖することができる。一実施形態においては、決定木規則は、(inst_make固有の方法を介して)動的インスタンスを作成することができるが、動的インスタンスにアクセスしないこともある。この実施形態においては、静的インスタンスのためのフィールド及び方法のみを参照することができる。
推論エンジン112は、決定木規則を前向き連鎖又は後ろ向き連鎖することができる。一実施形態においては、決定木規則は、(inst_make固有の方法を介して)動的インスタンスを作成することができるが、動的インスタンスにアクセスしないこともある。この実施形態においては、静的インスタンスのためのフィールド及び方法のみを参照することができる。
10.2 PatternMatching_Element
Rule−Elementのこの要素は、パターン合致規則を定義し、以下のフォーマットを有する。
PatternMatching_Element
::=(‘pm_rule’PM_Attribs*)
PMBindVars
PMPremise_Element
PMActions_Element
[PMOrderBy_Element]
PM_Attribs
::=PMOptions_Attrib //Optional(seevalues below)
::=LocTag_Attrib //Optional
//forPMOptions_Attrib:
PMOption
::=‘mostrecent’
::=‘singlefire’
Rule−Elementのこの要素は、パターン合致規則を定義し、以下のフォーマットを有する。
PatternMatching_Element
::=(‘pm_rule’PM_Attribs*)
PMBindVars
PMPremise_Element
PMActions_Element
[PMOrderBy_Element]
PM_Attribs
::=PMOptions_Attrib //Optional(seevalues below)
::=LocTag_Attrib //Optional
//forPMOptions_Attrib:
PMOption
::=‘mostrecent’
::=‘singlefire’
この規則は、1つ以上の選択肢をフィールドとして指定することができる。これらの選択肢は、インスタンス結合の順序付け(mostrecent)、及び推論エンジン112が、(第1の結合のために)1回のみ又は(すべての結合のために)複数回、規則をファイアするかどうかに影響を及ぼす。デフォルトにより、推論エンジン112は、結合を先入れ先出し方式で(least−recent)順序付けし、すべての結合について規則をファイアすることがある。
PM_Attribが複数の選択肢を指定した場合には、その選択肢は、
options=“mostrecent,singlefire”
などにより、コンマ区切りされることがある。
その選択肢はまた、任意の順序で指定されることがある。
options=“mostrecent,singlefire”
などにより、コンマ区切りされることがある。
その選択肢はまた、任意の順序で指定されることがある。
PatternMatching_Elementは、結合変数宣言(PMBindVars)、規則論理(PMPremise_Element、PMActions_Element)、及びオプションの分類指定(PMOrderBy_Element)のための、3つの部分要素を含むことがある。
ルールベース114のサンプルからのパターン合致規則のインフィックスコードの例は、以下のようであり得る。
<rule name=“Itemize_persons_without_any_siblings”>
<![CDATA[
for
any person p
if
//person never had any siblings
p.IsSiblingOf.@fld_isunknown()
//person currently has no siblings
or p.IsSiblingOf=set()
then
var msg is string=“No sibling for:” & p.@inst_getname()
@engn_tracemsg(msg)
end
//Sortitems in ascending sequence by age;
//Forequal ages,sort by recency(most-recent first)
optionsmostrecent
orderbyp.getage()
]]>
</rule>
<rule name=“Itemize_persons_without_any_siblings”>
<![CDATA[
for
any person p
if
//person never had any siblings
p.IsSiblingOf.@fld_isunknown()
//person currently has no siblings
or p.IsSiblingOf=set()
then
var msg is string=“No sibling for:” & p.@inst_getname()
@engn_tracemsg(msg)
end
//Sortitems in ascending sequence by age;
//Forequal ages,sort by recency(most-recent first)
optionsmostrecent
orderbyp.getage()
]]>
</rule>
この規則は、Personのすべてのインスタンス全体に動作し、兄弟のいない者を項目別に掲げる。その結果は、年齢によって順序付けられる。年齢が同じ場合には、より最近の結合が、より古い結合に先行する。
パターン合致規則は、より動的であり、他の規則で実施されるインスタンス作成、修正、及び消去に自動的に反応することがある。たとえば、ひとりでにフィードオフし、これによりすべての兄弟関係を計算する1つの規則は、以下のようであり得る。
<rulename=“Make_sibling_if_there_are_shared_siblings”>
<![CDATA[
for
any person p1,
any person p2
if
//different persons
p1<>p2
//persons not already siblings
and not p1.IsSiblingOf@set_doesincludeval(p2)
//persons share siblings
and pl.IsSiblingOf.@set_doesintersect(p2.IsSiblingOf)
then
//make persons siblings
p1.IsSiblingOf.@set_addval(p2)
end
]]>
</rule>
<rulename=“Make_sibling_if_there_are_shared_siblings”>
<![CDATA[
for
any person p1,
any person p2
if
//different persons
p1<>p2
//persons not already siblings
and not p1.IsSiblingOf@set_doesincludeval(p2)
//persons share siblings
and pl.IsSiblingOf.@set_doesintersect(p2.IsSiblingOf)
then
//make persons siblings
p1.IsSiblingOf.@set_addval(p2)
end
]]>
</rule>
動的識別子経路がナル値を含む場合は、推論エンジン112は、決定木規則について上述したアクションと同じアクションを実施することがある。
10.2.1 PMBindVars構文
この構文は、パターン合致規則のための結合変数を宣言し、以下のフォーマットを有する。
PMBindVars
::=PMBindVarDcl_Element
::=PMBindVarList_Element
PMBindVarDcl_Element
::=(‘bindvar_dcl’PMBindVarDcl_Attribs+)
IdentifierSpec //bindvar class
PMBindVarDcl_Attribs
::=Name_Attrib //Required
::=LocTag_Attrib //Optional
PMBindVarList_Element
::=(‘bindlist’[LocTag_Attrib])
PMBindVarDcl_Element*
この構文は、パターン合致規則のための結合変数を宣言し、以下のフォーマットを有する。
PMBindVars
::=PMBindVarDcl_Element
::=PMBindVarList_Element
PMBindVarDcl_Element
::=(‘bindvar_dcl’PMBindVarDcl_Attribs+)
IdentifierSpec //bindvar class
PMBindVarDcl_Attribs
::=Name_Attrib //Required
::=LocTag_Attrib //Optional
PMBindVarList_Element
::=(‘bindlist’[LocTag_Attrib])
PMBindVarDcl_Element*
この構文は、1つ以上の結合変数を宣言することができる。それぞれの宣言が、(PMBindVarDcl_Attribs Name_Attribとしての)変数名、及びクラス名を指定する。異なる結合変数が、同じ又は異なるクラスに関連付けられることがある。インフィックスコード宣言、
any person p,
any duck d
について、生成された規則定義言語コードは、以下のようであり得る。
<bindlist>
<bindvar_dclname=“p”loc_tag=“Line#2”>
<Identifiername=“person”/>
</bindvar_dcl>
<bindvar_dclname=“d”loc_tag=“Line#3”>
<identifiername=“duck”/>
</bindvar_dcl>
</bindlist>
any person p,
any duck d
について、生成された規則定義言語コードは、以下のようであり得る。
<bindlist>
<bindvar_dclname=“p”loc_tag=“Line#2”>
<Identifiername=“person”/>
</bindvar_dcl>
<bindvar_dclname=“d”loc_tag=“Line#3”>
<identifiername=“duck”/>
</bindvar_dcl>
</bindlist>
上述したように、loc_tagフィールドとは、推論エンジン112が誤り及びトレースメッセージを含むことがあるフィールドである。推論演算を実施する場合には、推論エンジン112により、loc_tagフィールドを処理する必要はない。その上、低位要素がloc_tag値をオーバーライドしない場合は、loc_tagフィールドを規則定義言語内の階層上の低位要素に適用することができる。その結果、loc_tagフィールドを使用して、原始入力行番号をXML要素に付加することができる。
10.2.2 PMPremise_Element
この要素は、以下のように、規則の前提を定義する。
PMPremise_Element
::=(‘pm-premise’[LocTag_Attrib])
GeneralExpr
この要素は、以下のように、規則の前提を定義する。
PMPremise_Element
::=(‘pm-premise’[LocTag_Attrib])
GeneralExpr
GeneralExprは、この規則について宣言された結合変数のすべてを参照するブール式であり得る。そうでない場合は、サーバ102は、シンタックス誤りと共に規則を拒絶することがある。
10.2.3 PMActions_Element
この要素は、以下のように、規則のアクションを定義する。
PMActions_Element
::=(‘pm_actions’[LocTag_Attrib])
Statement*
この要素は、以下のように、規則のアクションを定義する。
PMActions_Element
::=(‘pm_actions’[LocTag_Attrib])
Statement*
規則のアクションは、結合変数を介していくつかのフィールド値を参照することがあるが、サーバ102は、このような参照を主張しないことがある。
10.2.4 PMOrderedBy_Element
この要素は、インスタンス結合を分類するための基準を指定し、以下のフォーマットを有する。
PMOrderBy_Element
::=(‘orderby’[LocTag_Attrib])
GeneralExpr* //Number or String
この要素は、インスタンス結合を分類するための基準を指定し、以下のフォーマットを有する。
PMOrderBy_Element
::=(‘orderby’[LocTag_Attrib])
GeneralExpr* //Number or String
この要素は、ゼロ以上の数字又は文字列式を分類基準として指定する。推論エンジン112は、まず、第1の式により結合を分類し、次いで、第2の式により合致結合を分類し、以下同様に分類することがある。これらの比較結合がすべて合致する場合は、推論エンジン112は、mostrecent選択肢により順序付けを解決することがある。分類は、昇順、降順、又は他の好適な順序で行われることがある。数字式について降順が望ましい場合は、ユーザは、
orderby-p.getage()
などにより、その式を否定することができる。
orderby-p.getage()
などにより、その式を否定することができる。
10.2.5 その他の考慮事項
一実施形態においては、推論エンジン112は、パターン合致規則を前向き連鎖することはできるが、後ろ向き連鎖することはできない。この実施形態においては、推論エンジン112は、後ろ向き連鎖中に、パターン合致規則を無視することができる。パターン合致規則はまた、静的及び動的インスタンスの両方又はこれら2つのタイプの混合を扱うことができる。規則は、静的インスタンスを自由に修正でき、動的インスタンスを自由に作成し、修正し、消去できる。パターン合致インスタンス結合を計算する場合には、推論エンジン112は、inst_template固有のインスタンスを無視することができる。結合変数は、オブジェクトのスーパークラスに関連付けられ得る。たとえば、ユーザは、Bird結合変数を指定し、推論エンジン112は、Duck、Robin、及びHawkのインスタンスに対して、多様な形でパターン合致することができる。
一実施形態においては、推論エンジン112は、パターン合致規則を前向き連鎖することはできるが、後ろ向き連鎖することはできない。この実施形態においては、推論エンジン112は、後ろ向き連鎖中に、パターン合致規則を無視することができる。パターン合致規則はまた、静的及び動的インスタンスの両方又はこれら2つのタイプの混合を扱うことができる。規則は、静的インスタンスを自由に修正でき、動的インスタンスを自由に作成し、修正し、消去できる。パターン合致インスタンス結合を計算する場合には、推論エンジン112は、inst_template固有のインスタンスを無視することができる。結合変数は、オブジェクトのスーパークラスに関連付けられ得る。たとえば、ユーザは、Bird結合変数を指定し、推論エンジン112は、Duck、Robin、及びHawkのインスタンスに対して、多様な形でパターン合致することができる。
11 ステートメント構文
この構文は、論理ステートメントのための規則定義言語の要素を定義し、以下のフォーマットを有する。
Statement
::=VarDclStmt_Element
::=AssignmentStmt_Element
::=MethodCall_Element
::=ReturnStmt_Element
この構文は、論理ステートメントのための規則定義言語の要素を定義し、以下のフォーマットを有する。
Statement
::=VarDclStmt_Element
::=AssignmentStmt_Element
::=MethodCall_Element
::=ReturnStmt_Element
11.1 VarDclStmt_Element
Statementのこの要素は、局所変数を宣言し、以下のフォーマットを有する。
VarDclStmt_Element
::=(‘var_dcl’VarDcl_Attribs+)
DataType_Element
GeneralExpr //initialization Value
VarDcl_Attribs
::=Name_Attrib //Required
::=LocTag_Attrib //Optional
Statementのこの要素は、局所変数を宣言し、以下のフォーマットを有する。
VarDclStmt_Element
::=(‘var_dcl’VarDcl_Attribs+)
DataType_Element
GeneralExpr //initialization Value
VarDcl_Attribs
::=Name_Attrib //Required
::=LocTag_Attrib //Optional
このステートメントは、規則及び方法論理の両方によって指定され得る。このステートメントは、その論理内のどこにでも位置することができるが、その位置が、その範囲の可視性に影響を及ぼす場合がある。局所変数は、セット及び関連付けインスタンスを含む、任意のデータ型であり得る。ステートメントは、局所変数のための初期設定値を指定することがある。GeneralExprは、タイプ互換性を有する初期設定値を定義する。その式は、定数式である必要はない。
ルールベース114のサンプルからのインフィックスコードの例は、以下のようであり得る。
var result isboolean=true //be optimistic
かつ、対応する規則定義言語コードは、以下のようであり得る。
<var_dclname=“result”loc_tag=“Line#2”>
<datatypecoll_type=“none”type=“Boolean”/>
<literal_constantvalue=“true”/>
<var_dcl>
var result isboolean=true //be optimistic
かつ、対応する規則定義言語コードは、以下のようであり得る。
<var_dclname=“result”loc_tag=“Line#2”>
<datatypecoll_type=“none”type=“Boolean”/>
<literal_constantvalue=“true”/>
<var_dcl>
11.2 AssignmentStmt_Element
Statementのこの要素は、割当てステートメントを定義し、以下のフォーマットを有する。
AssignmentStmt_Element
::=(‘assign_stmt’[LocTag_Attrib])
IdentifierSpec //Destination(Field)
GeneraIExpr //Source
Statementのこの要素は、割当てステートメントを定義し、以下のフォーマットを有する。
AssignmentStmt_Element
::=(‘assign_stmt’[LocTag_Attrib])
IdentifierSpec //Destination(Field)
GeneraIExpr //Source
この要素は、規則及び方法論理の両方によって指定され得る。推論エンジン112は、GeneralExprを評価し、その値をタイプ互換性を有する指定された宛先オブジェクトに割り当てる。宛先オブジェクトは、フィールド又は局所変数であり得る。フィールドである場合は、推論エンジン112は、割当てを完了する前に、まず制約検査を起動することがある。
オペランドが数字のタイプである場合には、推論エンジン112は、オペランドの精度を比較する。GeneralExprの精度が宛先オブジェクトの精度より低いと、推論エンジン112は、宛先の精度に合致するよう、GeneralExpr値をゼロ展開し、次いで、割当てを実施することがある。そうでない場合は、推論エンジン112は、宛先の精度に合致するよう、必要に応じてGeneralExpr値を丸める。
ルールベース114のサンプルからのインフィックスコードの例は、以下のようであり得る。
Fact1=true
かつ、対応する規則定義言語コードは、以下のようであり得る。
<assign_stmtloc_tag=“Line#3”>
<identifiername=“Fact1”/>
<literal_constantvalue=“true”/>
</assign_stmt>
Fact1=true
かつ、対応する規則定義言語コードは、以下のようであり得る。
<assign_stmtloc_tag=“Line#3”>
<identifiername=“Fact1”/>
<literal_constantvalue=“true”/>
</assign_stmt>
11.3 MethodCall_Element
Statementのこの要素は、方法起動ステートメントを定義し、以下のフォーマットを有する。
MethodCall_Element
::=(‘method_call’[LocTag_Attrib])
IdentifierSpec //Method
[MethodArgList_Element]
MethodArgList_Element
::=(‘arg_list’[LocTag_Attrib])
GeneralExpr*
Statementのこの要素は、方法起動ステートメントを定義し、以下のフォーマットを有する。
MethodCall_Element
::=(‘method_call’[LocTag_Attrib])
IdentifierSpec //Method
[MethodArgList_Element]
MethodArgList_Element
::=(‘arg_list’[LocTag_Attrib])
GeneralExpr*
この要素は、規則及び方法論理の両方によって指定され得る。推論エンジン112は、任意の指定された引き数で、指定された方法を起動することができる。この要素は、独立ステートメントとして、かつ(起動された方法が値を返す場合は)式中の項として適用されることがある。起動には、ゼロ以上の引き数式を必要とすることがある。引き数の数は、ターゲット方法が期待するパラメータの数と同一であり、それぞれの引き数は、それに対応する方法パラメータとタイプ互換性を有することがある。方法パラメータが出力パラメータである場合は、引き数は、フィールド又は局所変数のいずれかのための識別子であり得る。
引き数及びパラメータが数字のタイプである場合には、推論エンジン112は、それらの精度を比較する。ソースオブジェクト(入力パラメータのための引き数、出力パラメータのためのパラメータ)の精度が、宛先オブジェクト(入力パラメータのためのパラメータ、出力パラメータのための引き数)の精度より低い場合は、推論エンジン112は、宛先の精度に合致するよう、ソース値をゼロ展開し、次いで、その値を渡す。そうでない場合は、推論エンジン112は、宛先の精度に合致するよう、必要に応じてソース値を丸める。同様の考慮事項が、数字のタイプの、方法の戻り値に適用されることがある。推論エンジン112は、宛先オブジェクトに割り当てる前に、戻り値を調整するか又は丸めることがある。
ルールベース114のサンプル内のパターン合致規則からのインフィックスコードの例は、以下のようであり得る。
//associateperson and duck
p.AssignDuck(d)
かつ、対応する規則定義言語コードは、以下のようであり得る。
<methood_callloc_tag=“Line#13”>
<identifier_path>
<identifiername=“p”/>
<identifiername=“AssignDuck”/>
</identifier_path>
<arg_list>
<identifiername=“d”/>
</arg_list>
</method_call>
//associateperson and duck
p.AssignDuck(d)
かつ、対応する規則定義言語コードは、以下のようであり得る。
<methood_callloc_tag=“Line#13”>
<identifier_path>
<identifiername=“p”/>
<identifiername=“AssignDuck”/>
</identifier_path>
<arg_list>
<identifiername=“d”/>
</arg_list>
</method_call>
11.4 ReturnStmt_Element
この要素は、方法の引き取り命令を定義し、以下のフォーマットを有する。
ReturnStmt_Element
::=(‘return_stmt’[LocTag_Attrib])
[GeneralExpr]
この要素は、方法の引き取り命令を定義し、以下のフォーマットを有する。
ReturnStmt_Element
::=(‘return_stmt’[LocTag_Attrib])
[GeneralExpr]
一実施形態においては、この引き取り命令は、方法論理によってのみ指定することができ、規則論理によっては指定することができない。規則論理内で指定されると、サーバ102は、シンタックス誤りと共にその引き取り命令を拒絶することができる。この引き取り命令を実行する場合には、推論エンジン112は、方法の実行を終了し、その方法を起動したコードに制御を返すことができる。引き取り命令がGeneralExprを指定した場合は、値を返す時に現在の方法を定義することができ、宣言された戻りデータ型は、その引き取り命令のGeneralExprとタイプ互換性を有し得る。MethodCall_Elementについて記述したように、推論エンジン112は、数字のタイプの戻り値を調整するか又は丸めることがある。
ルールベース114のサンプルからのインフィックスコードの例は、以下のようであり得る。
returnSymptoms.@Set_DoesIncludeVal(sympl)
andnot Symptoms.@Set_DoesIncludeVal(symp2)
かつ、対応する規則定義言語コードは、以下のようであり得る。
return_stmtloc_tag=“Line#l”>
<and_oploc_tag=“Line#2”>
<method_call>
<identifier intrinsic=“true”name=“set_doesincludeval”/>
<arg_list>
<identifier name=“Symptoms”/>
<identifier name=“symp1”/>
</arg_list>
</method_call>
<not_op>
<method_call>
<identifier intrinsic=“true”name=“set_doesincludeval”/>
<arg_list>
<identifier name=“Symptoms”/>
<identifier name=“symp2”/>
</arg_list>
</method_call>
</not_op>
</and_op>
</return_stmt>
returnSymptoms.@Set_DoesIncludeVal(sympl)
andnot Symptoms.@Set_DoesIncludeVal(symp2)
かつ、対応する規則定義言語コードは、以下のようであり得る。
return_stmtloc_tag=“Line#l”>
<and_oploc_tag=“Line#2”>
<method_call>
<identifier intrinsic=“true”name=“set_doesincludeval”/>
<arg_list>
<identifier name=“Symptoms”/>
<identifier name=“symp1”/>
</arg_list>
</method_call>
<not_op>
<method_call>
<identifier intrinsic=“true”name=“set_doesincludeval”/>
<arg_list>
<identifier name=“Symptoms”/>
<identifier name=“symp2”/>
</arg_list>
</method_call>
</not_op>
</and_op>
</return_stmt>
12 GeneralExpr構文
GeneralExpr構文は、規則定義言語論理から参照される時に、式を定義し、以下のフォーマット有する。
GeneralExpr
::=SimpleTerm
::=RelationalTerm
//UnaryOperators
::=UnaryPlusExpr_Element
::=UnaryMinusExpr_Element
::=UnaryNotExpr_Element
//BinaryOperators
::=ORed_Element
::=ANDed_Element
::=Addition_Element
::=Subtraction_Element
::=Concatenation_Element
::=Multiplication_Element
::=Division_Element
GeneralExpr構文は、規則定義言語論理から参照される時に、式を定義し、以下のフォーマット有する。
GeneralExpr
::=SimpleTerm
::=RelationalTerm
//UnaryOperators
::=UnaryPlusExpr_Element
::=UnaryMinusExpr_Element
::=UnaryNotExpr_Element
//BinaryOperators
::=ORed_Element
::=ANDed_Element
::=Addition_Element
::=Subtraction_Element
::=Concatenation_Element
::=Multiplication_Element
::=Division_Element
GeneralExprは、予想されるセットの項及び演算子をサポートする。前述したように、式の評価によって副作用が生成されることはない。したがって、式によって起動される方法は、副作用を生成しない。機能方法と呼ばれるこれらの方法は、さらに、上記のClassMethodDef_Elementセクションにおいて記述されている。
一実施形態においては、文法は、データ型に互換性のある演算を互換性のない演算から区別しようとはしない。たとえば、文法は、文字列値からブール値を減算できることを提案することができる。この実施形態においては、タイプ互換性の強制実施がサーバ102によって実施され、これにより、タイプ検査及び定数の畳み込みの両方が実施される。
大部分のタイプの項及び演算子のサンプリンングを含むよう管理するインフィックスコードステートメントのサンプルは、以下のようであり得る。
var IsHappyis Boolean=
IsWealthy
or(
age>0..<=200
and notIsTooTall
and QualityIndex(
(income+savings-debts)/12,
firstname &““& lastname,
some_random_number)
>+l00
)
このステートメントについて対応する規則定義言語コードは、以下のようであり得る。
<var_dclloc_tag=“Line#l”name=“IsHappy”>
<datatypecoll_type=“none”type=“Boolean”/>
<or_oploc_tag=“Line#3”>
<identifiername=“IsWealthy”/>
<and_oploc_tag=“Line#6”>
<and_op loc_tag=“Line#5”>
<range_op>
<identifier name=“age”/>
<part_gt_op>
<literal_constant value=“0”/>
</part_gt_op>
<part_1teq_op>
<literal_constant value=“2OO”/>
</part_1teq_op>
</range_op>
<not_op>
<identifier name=“IsTooTall”/>
</not_op>
</and_op>
<gt_op>
<method_call>
<identifier name=“QualityIndex”/>
<arg_list>
<div_op>
<subt_op>
<add_op>
<identifier name=“income”/>
<identifier name=“savings”/>
</add_op>
<identifier name=“debts”/>
</subt_op>
<literal_constant value=“12”/>
</div_op>
<concat_op>
<concat_op>
<identifier name=“firstname”/>
<literal_constant value=“"" ”/>
</concat_op>
<identifier name=“lastname”/>
</concat_op>
<identifier name=“some_random_number”/>
</arg_list>
</method_call>
<uplus_op>
<literal_constant value=“lOO”/>
</uplus_op>
</gt_op>
</and_op>
</or_op>
</vardcl>
var IsHappyis Boolean=
IsWealthy
or(
age>0..<=200
and notIsTooTall
and QualityIndex(
(income+savings-debts)/12,
firstname &““& lastname,
some_random_number)
>+l00
)
このステートメントについて対応する規則定義言語コードは、以下のようであり得る。
<var_dclloc_tag=“Line#l”name=“IsHappy”>
<datatypecoll_type=“none”type=“Boolean”/>
<or_oploc_tag=“Line#3”>
<identifiername=“IsWealthy”/>
<and_oploc_tag=“Line#6”>
<and_op loc_tag=“Line#5”>
<range_op>
<identifier name=“age”/>
<part_gt_op>
<literal_constant value=“0”/>
</part_gt_op>
<part_1teq_op>
<literal_constant value=“2OO”/>
</part_1teq_op>
</range_op>
<not_op>
<identifier name=“IsTooTall”/>
</not_op>
</and_op>
<gt_op>
<method_call>
<identifier name=“QualityIndex”/>
<arg_list>
<div_op>
<subt_op>
<add_op>
<identifier name=“income”/>
<identifier name=“savings”/>
</add_op>
<identifier name=“debts”/>
</subt_op>
<literal_constant value=“12”/>
</div_op>
<concat_op>
<concat_op>
<identifier name=“firstname”/>
<literal_constant value=“"" ”/>
</concat_op>
<identifier name=“lastname”/>
</concat_op>
<identifier name=“some_random_number”/>
</arg_list>
</method_call>
<uplus_op>
<literal_constant value=“lOO”/>
</uplus_op>
</gt_op>
</and_op>
</or_op>
</vardcl>
12.1 SimpleTerm構文
GeneralExprのSimpleTermは、以下のフォーマットを有することができる。
SimpleTerm
::=LiteralConstant_Element
::=SetConstant_Element
::=IdentifierSpec //Object name
::=MethodCall_Element
GeneralExprのSimpleTermは、以下のフォーマットを有することができる。
SimpleTerm
::=LiteralConstant_Element
::=SetConstant_Element
::=IdentifierSpec //Object name
::=MethodCall_Element
ここでは、LiteralConstant_Element及びSetConstant_Elementについて記述する。IdendfierSpecについては、本明細書の後に記述する。MethodCall_Elementについては、上述した。
12.1.1 LiteralConstant_Element
LiteralConstant_Elementは、以下のフォーマットを有する。
LiteralConstant_Element
::=(‘literal_constant’LiteralConstant_Attribs+)
LiteralConstant_Attribs
::=Value_Attrib //Required
::=LocTag_Attrib //Optional
LiteralConstant_Elementは、以下のフォーマットを有する。
LiteralConstant_Element
::=(‘literal_constant’LiteralConstant_Attribs+)
LiteralConstant_Attribs
::=Value_Attrib //Required
::=LocTag_Attrib //Optional
Va1ue_Attribは、文字列用文字としての定数値を示す。サーバ102は、その定数のデータ型を判断するために、(大文字と小文字とを区別せずに)この値を調べることがある。その値が「真」又は「偽」であれば、サーバ102は、その定数をブール定数と認識する。その値が「ナル」であれば、サーバ102は、その定数を(関連付けインスタンスの欠如を示す)関連付けインスタンス定数と認識する。その値の最初の文字が二重引用文字であれば、サーバ102は、その定数を文字列定数と認識し、その値の最後の文字も二重引用文字であることを検証する。そうでない場合は、サーバ102は、その定数が数字定数であると想定し、しかるべくそれを解析する。推論エンジン112は、小数点以下の桁数を調べることにより、その定数の精度を判断する。その定数が指数表現で表されている場合は、その精度に、その指数値も考慮に入れられる。
リテラル定数のインフィックスコードの例は、以下のようであり得る。
methodl(false,null,“abc”‘‘‘‘,123.456)
かつ、対応する規則定義言語コードは、以下のようであり得る。
<method_callloc_tag=“Line#l”>
<identifiername=“methodl”/>
<arg_list>
<literal_constantvalue=“false”/>
<literal_constantvalue=“null”/>
<literal_constantvalue=“"abc"”/>
<literal_constantvalue=“""”/>
<literal_constantvalue=“123.456”/>
</arg_list>
</methodcal1>
methodl(false,null,“abc”‘‘‘‘,123.456)
かつ、対応する規則定義言語コードは、以下のようであり得る。
<method_callloc_tag=“Line#l”>
<identifiername=“methodl”/>
<arg_list>
<literal_constantvalue=“false”/>
<literal_constantvalue=“null”/>
<literal_constantvalue=“"abc"”/>
<literal_constantvalue=“""”/>
<literal_constantvalue=“123.456”/>
</arg_list>
</methodcal1>
12.1.2 SetConstant_Element
SetConstant_Elementは、以下のフォーマットを有する。
SetConstant_Element
::=(‘set_constant’[LocTag_Atttib])
SetMember*
SetMember
::=LiteralConstant_Element
::=IdentifierSpec //Instance name
::=UnaryExpr //with LiteralConstant_Element only
1セットは、ゼロ以上のメンバーを包含する。一実施形態においては、1セットのすべてのメンバーは、同じデータ型であるべきである。そのメンバーのデータ型(あれば)は、セット定数のデータ型である。メンバーは、リテラル定数、(関連付けインスタンスのセットのための)IdentifierSpec、又はリテラル定数の単項演算子であり得る。リテラル定数の単項演算子の場合には、リテラル定数は、数字又はブール定数のいずれかであり得る。数字のセット定数については、セット自体は精度を有さないが、そのメンバーは精度を有する。同様に、インスタンスのセット定数は、どのような特定の関連付けにも拘束されないことがある。
SetConstant_Elementは、以下のフォーマットを有する。
SetConstant_Element
::=(‘set_constant’[LocTag_Atttib])
SetMember*
SetMember
::=LiteralConstant_Element
::=IdentifierSpec //Instance name
::=UnaryExpr //with LiteralConstant_Element only
1セットは、ゼロ以上のメンバーを包含する。一実施形態においては、1セットのすべてのメンバーは、同じデータ型であるべきである。そのメンバーのデータ型(あれば)は、セット定数のデータ型である。メンバーは、リテラル定数、(関連付けインスタンスのセットのための)IdentifierSpec、又はリテラル定数の単項演算子であり得る。リテラル定数の単項演算子の場合には、リテラル定数は、数字又はブール定数のいずれかであり得る。数字のセット定数については、セット自体は精度を有さないが、そのメンバーは精度を有する。同様に、インスタンスのセット定数は、どのような特定の関連付けにも拘束されないことがある。
セット定数のインフィックスコードの例は、以下のようであり得る。
setl=set(l23)
set2=set(“abc”,“def”)
set3=set(duckl,duck2)
set4=set(-123,0)
set5=set() //Empty set
かつ、対応する規則定義言語コードは、以下のようであり得る。
<assign_stmtloc_tag=“Line#1”>
<identifiername=“setl”/>
<set_constant>
<literal_constantvalue=“123”/>
</set_constant>
</assign_stmt>
<assign_stmtloc_tag=“Line#2”>
<identifiername=“set2”/>
<set_constant>
<literal_constantvalue=“"abc" ”/>
<literal_constantvalue=“"def" ”/>
<set_constant>
</assign_stmt>
<assign_stmtloc_tag=“Line#3”>
<identiifier name=“set3”/>
<set_constant>
<identifiername=“duckl”/>
<identifiername=“duck2”/>
</set_constant>
</assign_stmt>
<assign_stmtloc_tag=“Line#4”>
<identifiername=“set4”/>
<set_constant>
<uminus_op>
<literal_constant value=“123”/>
</uminus_op>
<literal_constantvalue=“0”/>
</set_constant>
</assign_stmt>
<assign_stmtloc_tag=“Line#5”>
<identifier name=“set5”/>
<set_constant/>
</assign_stmt>
setl=set(l23)
set2=set(“abc”,“def”)
set3=set(duckl,duck2)
set4=set(-123,0)
set5=set() //Empty set
かつ、対応する規則定義言語コードは、以下のようであり得る。
<assign_stmtloc_tag=“Line#1”>
<identifiername=“setl”/>
<set_constant>
<literal_constantvalue=“123”/>
</set_constant>
</assign_stmt>
<assign_stmtloc_tag=“Line#2”>
<identifiername=“set2”/>
<set_constant>
<literal_constantvalue=“"abc" ”/>
<literal_constantvalue=“"def" ”/>
<set_constant>
</assign_stmt>
<assign_stmtloc_tag=“Line#3”>
<identiifier name=“set3”/>
<set_constant>
<identifiername=“duckl”/>
<identifiername=“duck2”/>
</set_constant>
</assign_stmt>
<assign_stmtloc_tag=“Line#4”>
<identifiername=“set4”/>
<set_constant>
<uminus_op>
<literal_constant value=“123”/>
</uminus_op>
<literal_constantvalue=“0”/>
</set_constant>
</assign_stmt>
<assign_stmtloc_tag=“Line#5”>
<identifier name=“set5”/>
<set_constant/>
</assign_stmt>
12.2 RelationalTerm構文
RelationalTermは、値の比較を定義し、以下のフォーマットを有する。
RelationalTerm
::=FullComp_EQ_Element
::=FullComp_NE_Element
::=FullComp_LT_Element
::=FullComp_LTEQ_Element
::=FullComp_GT_Element
::=FullComp_GTEQ_Element
::=FullComp_Range_Element
値の比較は、上述した全比較及び部分比較を含むことができる。
RelationalTermは、値の比較を定義し、以下のフォーマットを有する。
RelationalTerm
::=FullComp_EQ_Element
::=FullComp_NE_Element
::=FullComp_LT_Element
::=FullComp_LTEQ_Element
::=FullComp_GT_Element
::=FullComp_GTEQ_Element
::=FullComp_Range_Element
値の比較は、上述した全比較及び部分比較を含むことができる。
12.2.1 全比較構文
全比較は、ある範囲の値を必要とする、2項演算子又は3項演算子を含むことがある。2項演算子の例は、以下のようであり得る。
IsLessThan=fldl<123
3項演算子の例は、以下のようであり得る。
IsInRange=fld1>=100..<200
//above statementis semantically equivalent to following statement
//(but ismore efficient):
IsInRange=fld1>=100and fld1<200
いずれの場合においても、式は、比較結果を示すブール値を返す。
全比較は、ある範囲の値を必要とする、2項演算子又は3項演算子を含むことがある。2項演算子の例は、以下のようであり得る。
IsLessThan=fldl<123
3項演算子の例は、以下のようであり得る。
IsInRange=fld1>=100..<200
//above statementis semantically equivalent to following statement
//(but ismore efficient):
IsInRange=fld1>=100and fld1<200
いずれの場合においても、式は、比較結果を示すブール値を返す。
上記の3つのインフィックスステートメントに対応する規則定義言語コードは、以下のようであり得る。
<assign_stmtloc_tag=“Line#1”>
<identifiername=“IsLessThan”/>
<It_op>
<identifiername=“fldl”/>
<literal_constantvalue=“l23”/>
</It_op>
</assign_stmt>
<assign_stmtloc_tag=“Line#2”>
<identifiername=“IsInRange”/>
<range_op>
<identifiername=“fldl”/>
<part_gteq_op>
<literal_constant value=“lOO”/>
</part_gteq_op>
<part_It_op>
<literal_constant value=“2OO”/>
</part_It_op>
</range_op>
</assign_stmt>
<assign_stmtloc_tag=“Line#5”>
<identifiername“IsInRange”/>
<and_oploc_tag=“Line#5">
<gteq_op>
<identifier name=“fld1”/>
<literal_constant value=“1OO”/>
</gteq_op>
<lt_op>
<identifier name=“fld1”/>
<literal_constant value=“2OO”/>
</lt_op>
</andop>
</assignstmt>
全比較要素は、以下のフォーマットを有することができる。
FullComp_EQ_Element //GeneralExpr=GeneralExpr
::=(‘eq_op’Comp_Attribs*)
GeneralExpr
GeneralExpr
FullComp_NE_Element //GeneralExpr<>GeneralExpr
::=(‘neq_op’Comp_Attribs*)
GeneralExpr
GeneralExpr
FullComp_LT_Element //GeneralExpr<GeneralExpr
::=(‘It_op’Comp_Attribs*)
GeneralExpr
GeneralExpr
FullComp_LTEQ_Element //GeneralExpr<=GeneralExpr
::=(‘lteq_op’Comp_Attribs*)
GeneralExpr
GeneralExpr
FullComp_GT_Element //GeneralExpr>GeneralExpr
::=(‘gt_op’Comp_Attribs*)
GeneralExpr
GeneralExpr
FullComp_GTEQ_Element //GeneralExpr>=GeneralExpr
::=(‘gteq_op’Comp_Attribs*)
GeneralExpr
GeneralExpr
FullComp_Range_Element
//GeneralExpr in range:(GeneralExpr1..GeneralExpr2)
::=(‘range_op’[LocTag_Attrib])
GeneralExpr
RangeStartComp
RangeStopComp
RangeStartComp
::=PartComp_GT_Element
::=PartComp_GTEQ_Element
RangeStopComp
::=PartComp_LT_Element
::=PartComp_LTEQ_Element
<assign_stmtloc_tag=“Line#1”>
<identifiername=“IsLessThan”/>
<It_op>
<identifiername=“fldl”/>
<literal_constantvalue=“l23”/>
</It_op>
</assign_stmt>
<assign_stmtloc_tag=“Line#2”>
<identifiername=“IsInRange”/>
<range_op>
<identifiername=“fldl”/>
<part_gteq_op>
<literal_constant value=“lOO”/>
</part_gteq_op>
<part_It_op>
<literal_constant value=“2OO”/>
</part_It_op>
</range_op>
</assign_stmt>
<assign_stmtloc_tag=“Line#5”>
<identifiername“IsInRange”/>
<and_oploc_tag=“Line#5">
<gteq_op>
<identifier name=“fld1”/>
<literal_constant value=“1OO”/>
</gteq_op>
<lt_op>
<identifier name=“fld1”/>
<literal_constant value=“2OO”/>
</lt_op>
</andop>
</assignstmt>
全比較要素は、以下のフォーマットを有することができる。
FullComp_EQ_Element //GeneralExpr=GeneralExpr
::=(‘eq_op’Comp_Attribs*)
GeneralExpr
GeneralExpr
FullComp_NE_Element //GeneralExpr<>GeneralExpr
::=(‘neq_op’Comp_Attribs*)
GeneralExpr
GeneralExpr
FullComp_LT_Element //GeneralExpr<GeneralExpr
::=(‘It_op’Comp_Attribs*)
GeneralExpr
GeneralExpr
FullComp_LTEQ_Element //GeneralExpr<=GeneralExpr
::=(‘lteq_op’Comp_Attribs*)
GeneralExpr
GeneralExpr
FullComp_GT_Element //GeneralExpr>GeneralExpr
::=(‘gt_op’Comp_Attribs*)
GeneralExpr
GeneralExpr
FullComp_GTEQ_Element //GeneralExpr>=GeneralExpr
::=(‘gteq_op’Comp_Attribs*)
GeneralExpr
GeneralExpr
FullComp_Range_Element
//GeneralExpr in range:(GeneralExpr1..GeneralExpr2)
::=(‘range_op’[LocTag_Attrib])
GeneralExpr
RangeStartComp
RangeStopComp
RangeStartComp
::=PartComp_GT_Element
::=PartComp_GTEQ_Element
RangeStopComp
::=PartComp_LT_Element
::=PartComp_LTEQ_Element
これらの要素のすべてについて、GeneralExprはすべて、同じデータ型であり得る。しかし、演算子の中には、あるデータ型のみをサポートするものがある。たとえば、相等性及び不等性の比較は、すべてのデータ型及び値のセットをサポートする。不等なセットは共通する場合もしない場合もある。絶対値の比較は、数字及び文字列式のみをサポートすることができるが、セットにも適用され得る。セットについては、その結果がサブセットの関係を示す。数字値を比較する場合には、推論エンジン112は、まず、精度の低いオペランドを他のオペランドの精度にゼロ展開し、次いで、比較を実施する。
要素のすべてについて、以下のフォーマットで、Comp_Attribsを指定することができる。
Comp_Attribs
::=CaseSensitivity_Attrib //Optional
::=LocTag_Attrib //Optional
CaseSensitivity_Attribを指定して、大文字と小文字とを区別する文字列比較を示すことができる。デフォルトにより、文字列の比較は、大文字と小文字とを区別する場合もしない場合もあり得る。他のデータ型の比較については、このような設定は無視され得る。
Comp_Attribs
::=CaseSensitivity_Attrib //Optional
::=LocTag_Attrib //Optional
CaseSensitivity_Attribを指定して、大文字と小文字とを区別する文字列比較を示すことができる。デフォルトにより、文字列の比較は、大文字と小文字とを区別する場合もしない場合もあり得る。他のデータ型の比較については、このような設定は無視され得る。
12.2.2 部分比較構文
範囲の比較は、部分比較構文、又は全比較の「右辺」のみを指定する構文に依拠する。部分比較構文は、以下のフォーマットを有する。
PartComp_EQ_Element //=GeneralExpr
::=(‘part_eq_op’Comp_Attribs*)
GeneralExpr
PartComp_NE_Element //<>GeneralExpr
::=(‘part_neq_op’Comp_Attribs*)
GeneralExpr
PartComp_LT_Element //<GeneralExpr
::=(‘part_It_op’Comp_Attribs*)
GeneralExpr
PartComp_LTEQ_Element //<=GeneralExpr
::=(‘part_lteq_op’Comp_Attribs*)
GeneralExpr
PartComp_GT_Element //>GeneralExpr
::=(‘part_gt_op’Comp_Attribs*)
GeneralExpr
PartComp_GTEQ_Element //>=GeneralExpr
::=(‘part_gteq_op’Comp_Attribs*)
GeneralExpr
PartComp_Range_Element
//inrange:(GeneralExprl..GeneralExpr2)
::=(‘part_range_op’[LocTag_Attrib])
RangeStartComp
RangeStopComp
決定木要素によっても使用され得るこれらの構文は、1つのGeneralExpr(又は範囲については2つ)を指定する。全比較については、同じデータ型及び大文字と小文字の区別についての考慮事項がそれらに適用される。
範囲の比較は、部分比較構文、又は全比較の「右辺」のみを指定する構文に依拠する。部分比較構文は、以下のフォーマットを有する。
PartComp_EQ_Element //=GeneralExpr
::=(‘part_eq_op’Comp_Attribs*)
GeneralExpr
PartComp_NE_Element //<>GeneralExpr
::=(‘part_neq_op’Comp_Attribs*)
GeneralExpr
PartComp_LT_Element //<GeneralExpr
::=(‘part_It_op’Comp_Attribs*)
GeneralExpr
PartComp_LTEQ_Element //<=GeneralExpr
::=(‘part_lteq_op’Comp_Attribs*)
GeneralExpr
PartComp_GT_Element //>GeneralExpr
::=(‘part_gt_op’Comp_Attribs*)
GeneralExpr
PartComp_GTEQ_Element //>=GeneralExpr
::=(‘part_gteq_op’Comp_Attribs*)
GeneralExpr
PartComp_Range_Element
//inrange:(GeneralExprl..GeneralExpr2)
::=(‘part_range_op’[LocTag_Attrib])
RangeStartComp
RangeStopComp
決定木要素によっても使用され得るこれらの構文は、1つのGeneralExpr(又は範囲については2つ)を指定する。全比較については、同じデータ型及び大文字と小文字の区別についての考慮事項がそれらに適用される。
12.3 単項演算子要素
GeneralExprの単項演算子は、UnaryPlusExpr_Element、UnaryMinusExpr_Element、及びUnaryNotExpr_Elementを含む。
GeneralExprの単項演算子は、UnaryPlusExpr_Element、UnaryMinusExpr_Element、及びUnaryNotExpr_Elementを含む。
12.3.1 UnaryPlusExpr_Element
GeneralExprのUnaryPlusExpr_Elementは、以下のフォーマットを有する。
UnaryPlusExpr_Element
::=(‘uplus_op’[LocTag_Attrib])
GenaralExpr
この演算は、基本的に、GeneralExprの値を返す。これは、
if this_value>=-100..<=+100then...end
などにより、「表記可能に」するために含まれるものである。
GeneralExprは、数字式であり得、この演算は数字値を返す。
GeneralExprのUnaryPlusExpr_Elementは、以下のフォーマットを有する。
UnaryPlusExpr_Element
::=(‘uplus_op’[LocTag_Attrib])
GenaralExpr
この演算は、基本的に、GeneralExprの値を返す。これは、
if this_value>=-100..<=+100then...end
などにより、「表記可能に」するために含まれるものである。
GeneralExprは、数字式であり得、この演算は数字値を返す。
12.3.2 UnaryMinusExpr_Element
UnaryMinusExpr_Elementは、以下のフォーマットを有する。
UnaryMinusExpr_Element
::=(‘uminus_op’[LocTag_Attrib])
GeneralExpr
この演算は、GeneralExpr値の算術符号を逆にする。正値は負値となり、負値は正値となる。GeneralExprは数字式であり得、この演算は数字値を返す。
UnaryMinusExpr_Elementは、以下のフォーマットを有する。
UnaryMinusExpr_Element
::=(‘uminus_op’[LocTag_Attrib])
GeneralExpr
この演算は、GeneralExpr値の算術符号を逆にする。正値は負値となり、負値は正値となる。GeneralExprは数字式であり得、この演算は数字値を返す。
12.3.3 UnaryNotExpr_Element
UnaryNotExpr_Elementは、以下のフォーマットを有する。
UnaryNotExpr_Element
::=(‘not_op’[LocTag_Attrib])
GeneralExpr
UnaryNotExpr_Elementは、以下のフォーマットを有する。
UnaryNotExpr_Element
::=(‘not_op’[LocTag_Attrib])
GeneralExpr
この演算は、GeneralExprのブールの値を逆にする。真値は偽となり、偽値は真となる。GeneralExprはブール式であり得、この演算はブール値を返す。
12.4 2項演算子要素
2項演算子は、ORed_Element、ANDed_Element、Addition_Element、Subtraction_Element、Concatenation_Element、Multiplication_Element、及びDivision_Elementを含む。
2項演算子は、ORed_Element、ANDed_Element、Addition_Element、Subtraction_Element、Concatenation_Element、Multiplication_Element、及びDivision_Elementを含む。
12.4.1 ORed_Element
ORed_Elementは、OR演算をサポートし、以下のフォーマットを有する。
ORed_Element
::=(‘or_op’[LocTag_Attrib])
GeneralExpr
GeneralExpr
この演算は、部分要素に論理OR演算を実施する。その結果は、いずれかの部分要素が真であれば真である。そうでない場合は、その結果は偽である。GeneralExprは両方ともブール式であり得、この演算はブール値を返す。
ORed_Elementは、OR演算をサポートし、以下のフォーマットを有する。
ORed_Element
::=(‘or_op’[LocTag_Attrib])
GeneralExpr
GeneralExpr
この演算は、部分要素に論理OR演算を実施する。その結果は、いずれかの部分要素が真であれば真である。そうでない場合は、その結果は偽である。GeneralExprは両方ともブール式であり得、この演算はブール値を返す。
実行時間に、推論エンジン112が、GeneralExprの1つのみを評価することがある。たとえば、インフィックスコード式、
fldl<100 orfld2>=200
について、fld1が50の値を有する場合は、推論エンジン112は、最終結果が真であることが分かっているので、fld2を試験する必要はない。しかし、fld1が分かっていない場合は、推論エンジン112はfld2を試験することがあり、従って、推論エンジン112は、fld2が250などの十分に大きな値を有する場合は、規則を保留することを回避することができる。同様に、推論エンジン112はまた、中間インスタンス参照フィールドを有する識別子経路のいずれかが、ナル値を有するかどうかを判断することができる。たとえば、インフィックスコード式、
Father.pDog.age<5or Child.pFriend.age>10
について、Fatherが、犬を飼っていないことがある(pDog=ナル)。しかし、推論エンジン112は、Childの友人が十分な年であれば、その式を真と評価することがある。
fldl<100 orfld2>=200
について、fld1が50の値を有する場合は、推論エンジン112は、最終結果が真であることが分かっているので、fld2を試験する必要はない。しかし、fld1が分かっていない場合は、推論エンジン112はfld2を試験することがあり、従って、推論エンジン112は、fld2が250などの十分に大きな値を有する場合は、規則を保留することを回避することができる。同様に、推論エンジン112はまた、中間インスタンス参照フィールドを有する識別子経路のいずれかが、ナル値を有するかどうかを判断することができる。たとえば、インフィックスコード式、
Father.pDog.age<5or Child.pFriend.age>10
について、Fatherが、犬を飼っていないことがある(pDog=ナル)。しかし、推論エンジン112は、Childの友人が十分な年であれば、その式を真と評価することがある。
ORed_Elementが2進演算子として記述されているが、任意の数のオペランドを収容することもできる。たとえば、ORed_Elementは、1つ以上のオペランドの「リスト」を取り扱うことができる。ORed_Element内の1つ以上のオペランドにより、規則が保留された場合は、推論エンジン112は、以前に保留されたオペランド(及びこれらのオペランドのみ)で推論を再始動することができる。
12.4.2 ANDed_Element
ANDed_Elementは、AND演算をサポートし、以下のフォーマットを有する。
ANDed_Element
::=(‘and_op’[LocTag_Attrib])
GeaeralExpr
GeneralExpr
この演算は、部分要素に論理AND演算を実施する。両方の部分要素が真であれば、その結果は真である。そうでない場合は、その結果は偽である。GeneralExprsは、両方ともブール式であり得、この演算はブール値を返す。実行時間に、推論エンジン112は、GeneralExprの1つのみを評価することがある。たとえば、インフィックスコード式、
fld1>=100and fld2<200
について、fld1が50の値を有する場合は、その最終結果が偽であることが分かっている場合は、推論エンジン112は、fld2を試験する必要はない。しかし、fld1が分かっていない場合は、推論エンジン112はfld2を試験することがあり、従って、推論エンジン112は、fld2が250などの十分に大きな値を有する場合は、規則を保留することを回避することができる。同様に、推論エンジン112はまた、中間インスタンス参照フィールドを有する識別子経路のいずれかがナル値を有するかどうかを判断することができる。たとえば、インフィックスコード式、
Father.pDog.age<5and Child.pFriend.age>10
について、Fatherが犬を飼っていないことがある(pDog=ナル)。しかし、推論エンジン112は、Childの友人が十分な年でない場合は、式を偽であると評価することがある。
ANDed_Elementは、AND演算をサポートし、以下のフォーマットを有する。
ANDed_Element
::=(‘and_op’[LocTag_Attrib])
GeaeralExpr
GeneralExpr
この演算は、部分要素に論理AND演算を実施する。両方の部分要素が真であれば、その結果は真である。そうでない場合は、その結果は偽である。GeneralExprsは、両方ともブール式であり得、この演算はブール値を返す。実行時間に、推論エンジン112は、GeneralExprの1つのみを評価することがある。たとえば、インフィックスコード式、
fld1>=100and fld2<200
について、fld1が50の値を有する場合は、その最終結果が偽であることが分かっている場合は、推論エンジン112は、fld2を試験する必要はない。しかし、fld1が分かっていない場合は、推論エンジン112はfld2を試験することがあり、従って、推論エンジン112は、fld2が250などの十分に大きな値を有する場合は、規則を保留することを回避することができる。同様に、推論エンジン112はまた、中間インスタンス参照フィールドを有する識別子経路のいずれかがナル値を有するかどうかを判断することができる。たとえば、インフィックスコード式、
Father.pDog.age<5and Child.pFriend.age>10
について、Fatherが犬を飼っていないことがある(pDog=ナル)。しかし、推論エンジン112は、Childの友人が十分な年でない場合は、式を偽であると評価することがある。
ANDed_Elementが2進演算子として記述されているが、任意の数のオペランドを収容することもできる。たとえば、ANDed_Elementは、1つ以上のオペランドの「リスト」を取り扱うことができる。ANDed_Element内の1つ以上のオペランドにより、規則が保留された場合は、推論エンジン112は、以前に保留されたオペランド(及びこれらのオペランドのみ)で推論を再始動することができる。
12.4.3 Addition_Element
Addition_Elementは加算演算をサポートし、以下のフォーマットを有する。
Addition_Element
::=(‘add_op’[LocTag_Attrib])
GeneralExpr
GeaeralExpr
この演算は、部分要素の算術加算を実施する。その演算は、第2の部分要素を第1の部分要素に追加した結果を返す。GeneralExprsは、両方とも数字式であり得、この演算は数字値を返す。オブジェクトを追加する場合には、算術演算の前に、精度の低いオブジェクトを他のオブジェクトの精度にゼロ展開することがある。その結果は、より高い精度を反映することがある。
Addition_Elementは加算演算をサポートし、以下のフォーマットを有する。
Addition_Element
::=(‘add_op’[LocTag_Attrib])
GeneralExpr
GeaeralExpr
この演算は、部分要素の算術加算を実施する。その演算は、第2の部分要素を第1の部分要素に追加した結果を返す。GeneralExprsは、両方とも数字式であり得、この演算は数字値を返す。オブジェクトを追加する場合には、算術演算の前に、精度の低いオブジェクトを他のオブジェクトの精度にゼロ展開することがある。その結果は、より高い精度を反映することがある。
12.4.4 Subtraction_Element
Subtraction_Elementは、加算演算をサポートし、以下のフォーマットを有する。
Subtraction_Element
::=(‘subt_op’[LocTag_Attrib])
GeneralExpr
GeneralExpr
この演算は、部分要素の算術減算を実施する。この演算は、第1の部分要素から第2の部分要素を減算した結果を返す。GeneralExprsは、両方とも数字式であり得、この演算は数字値を返す。オブジェクトを減算する場合には、算術演算の前に、精度の低いオブジェクトを他のオブジェクトの精度にゼロ展開することがある。その結果は、より高い精度を反映することがある。
Subtraction_Elementは、加算演算をサポートし、以下のフォーマットを有する。
Subtraction_Element
::=(‘subt_op’[LocTag_Attrib])
GeneralExpr
GeneralExpr
この演算は、部分要素の算術減算を実施する。この演算は、第1の部分要素から第2の部分要素を減算した結果を返す。GeneralExprsは、両方とも数字式であり得、この演算は数字値を返す。オブジェクトを減算する場合には、算術演算の前に、精度の低いオブジェクトを他のオブジェクトの精度にゼロ展開することがある。その結果は、より高い精度を反映することがある。
12.4.5 Concatenation_Element
Concatenation_Elementは、連結演算をサポートし、以下のフォーマットを有する。
Concatenation_Element
::=(‘concat_op’[LocTag_Attrib])
GeneralExpr
GeneralExpr
この演算は、ある文字列値を別の文字列値にアペンドする。この演算は、第2の部分要素を第1の部分要素にアペンドした結果を返す。GeneralExprsは任意のデータ型であり得、いずれかの又は両方の式がセット式であり得る。推論エンジン112は、アペンド演算を実施する前に、非文字列式を文字列値に自動的に変換することがある。非文字列値のフォーマット化を制御する選択肢がない場合がある。この演算は文字列値を返す。
Concatenation_Elementは、連結演算をサポートし、以下のフォーマットを有する。
Concatenation_Element
::=(‘concat_op’[LocTag_Attrib])
GeneralExpr
GeneralExpr
この演算は、ある文字列値を別の文字列値にアペンドする。この演算は、第2の部分要素を第1の部分要素にアペンドした結果を返す。GeneralExprsは任意のデータ型であり得、いずれかの又は両方の式がセット式であり得る。推論エンジン112は、アペンド演算を実施する前に、非文字列式を文字列値に自動的に変換することがある。非文字列値のフォーマット化を制御する選択肢がない場合がある。この演算は文字列値を返す。
12.4.6 Multiplication_Element
Multiplication_Elementは、加算演算をサポートし、以下のフォーマットを有する。
Multiplication_Element
::=(‘mult_op’[LocTag_Attrib])
GeneralExpr
GeneralBxpr
この演算は、部分要素に算術乗算を実施する。この演算は、第2の部分要素で第1の部分要素を乗算した結果を返す。GeneralExprsは、両方とも数字式であり得、この演算は数字値を返す。オブジェクトを乗算する場合に、精度調整がないことがあり、その積は、オペランド精度の合計である精度を反映することがある。
Multiplication_Elementは、加算演算をサポートし、以下のフォーマットを有する。
Multiplication_Element
::=(‘mult_op’[LocTag_Attrib])
GeneralExpr
GeneralBxpr
この演算は、部分要素に算術乗算を実施する。この演算は、第2の部分要素で第1の部分要素を乗算した結果を返す。GeneralExprsは、両方とも数字式であり得、この演算は数字値を返す。オブジェクトを乗算する場合に、精度調整がないことがあり、その積は、オペランド精度の合計である精度を反映することがある。
12.4.7 Division_Element
Division_Elementは、加算演算をサポートし、以下のフォーマットを有する。
Division_Element
::=(‘div_op’[LocTag_Attrib])
GeneralExpr
GeaeralExpr
この演算は、部分要素の算術除算を実施する。この演算は、第2の部分要素で第1の部分要素を除算した結果を返す。ゼロで除算することにより、誤りと共に推論を終了することができる。GeneralExprsは、両方とも数字式であり得、この演算は数字値を返す。オブジェクトを除算する場合に、精度調整がないことがあり、その商は、除算された値の精度を反映し、必要に応じて丸められることがある。
Division_Elementは、加算演算をサポートし、以下のフォーマットを有する。
Division_Element
::=(‘div_op’[LocTag_Attrib])
GeneralExpr
GeaeralExpr
この演算は、部分要素の算術除算を実施する。この演算は、第2の部分要素で第1の部分要素を除算した結果を返す。ゼロで除算することにより、誤りと共に推論を終了することができる。GeneralExprsは、両方とも数字式であり得、この演算は数字値を返す。オブジェクトを除算する場合に、精度調整がないことがあり、その商は、除算された値の精度を反映し、必要に応じて丸められることがある。
13 Datatype_Element
この指定では、Datatype_Elementを頻繁に参照する。Datatype_Elementは、以下のフォーマットを有する。
DataType_Element
::=DataTypeNumber_Element
::=DataTypeBoolean_Element
::=DataTypeString_Element
::=DataTypeInstRef_Element
//.................................................
DataTypeNumber_Element
::=(‘datatype’NumberType_Attribs+)
NumberType_Attribs
::=DataType_Attrib //“number”(Required)
::=Collection_Attrib //Optional
::=Precision_Attrib //Optional
::=LocTag_Attrib //Optional
//.................................................
DataTypeBoolean_Element
::=(‘datatype’BooleanType_Attribs+)
BooleanType_Attribs
::=DataType_Attrib //“boolean”(Required)
::=Collection_Attrib //Optional
::=LocTag_Attrib //Optional
//................................................
DataTypeString_E1ement
::=('datatype'StringType_Attribs+)
StringType_Attribs
::=DataType_Attrib //“string” (Required)
::=Collection_Attrib //Optional
::=LocTag_Attrib //Optional
//................................................
DataTypeInstRef_Element
::=(‘datatype’InstRefType_Attribs+)
IdentifierSpec //Class for instance
InstRefType_Attribs
::=DataType_Attrib //“inst_ref”(Required)
::=Collection_Attrib //Optional
::=LocTag_Attrib //Optional
規則定義言語は、上記に示した、4つの「原子的な」データ型をサポートする。それぞれの原子的なデータ型については、Datatype_Elementの変形形態もあり得る。
この指定では、Datatype_Elementを頻繁に参照する。Datatype_Elementは、以下のフォーマットを有する。
DataType_Element
::=DataTypeNumber_Element
::=DataTypeBoolean_Element
::=DataTypeString_Element
::=DataTypeInstRef_Element
//.................................................
DataTypeNumber_Element
::=(‘datatype’NumberType_Attribs+)
NumberType_Attribs
::=DataType_Attrib //“number”(Required)
::=Collection_Attrib //Optional
::=Precision_Attrib //Optional
::=LocTag_Attrib //Optional
//.................................................
DataTypeBoolean_Element
::=(‘datatype’BooleanType_Attribs+)
BooleanType_Attribs
::=DataType_Attrib //“boolean”(Required)
::=Collection_Attrib //Optional
::=LocTag_Attrib //Optional
//................................................
DataTypeString_E1ement
::=('datatype'StringType_Attribs+)
StringType_Attribs
::=DataType_Attrib //“string” (Required)
::=Collection_Attrib //Optional
::=LocTag_Attrib //Optional
//................................................
DataTypeInstRef_Element
::=(‘datatype’InstRefType_Attribs+)
IdentifierSpec //Class for instance
InstRefType_Attribs
::=DataType_Attrib //“inst_ref”(Required)
::=Collection_Attrib //Optional
::=LocTag_Attrib //Optional
規則定義言語は、上記に示した、4つの「原子的な」データ型をサポートする。それぞれの原子的なデータ型については、Datatype_Elementの変形形態もあり得る。
DataType_Attrib及びCollection_Attribは、すべてのデータ型に共通である。DataType_Attribは、関連データ型を示す。Collection_Attribは、このデータ型が、セットなどの、値の集合のためのものであるか、又は単純な原子的な値のためのものであるかどうかを示す。
DataTypeNumber_Elementについて、ユーザは、10進数の少数で表される「精度」を任意に指定することができる。指定されない場合は、サーバ102は、その値がゼロ精度の整数であると想定する。
DataTypeAssocInst_Elementについて、ユーザは、2つの部分要素を指定することができる。これらは、それぞれ、データ型の関連付け役割及び関連付け名を識別する。たとえば、Person及びDuckクラスを必要とする所有権関連付けについて、Duckクラスは、
<fieldname=“IsOwnedBy”>
<datatypecoll_type=“none”type=“assoc_instance”>
<identifiername=“Person”/>
<identifiername=“Ownership”/>
</datatype>
</field>
などにより、Ownership関連付け内の役割Personのための関連付けインスタンスとして宣言されるフィールド(IsOwnedBy)を定義することがある。
<fieldname=“IsOwnedBy”>
<datatypecoll_type=“none”type=“assoc_instance”>
<identifiername=“Person”/>
<identifiername=“Ownership”/>
</datatype>
</field>
などにより、Ownership関連付け内の役割Personのための関連付けインスタンスとして宣言されるフィールド(IsOwnedBy)を定義することがある。
DataTypeInstRef_Elementについて、ユーザは、インスタンス参照に関連付けられたクラスを識別する部分要素を指定する。たとえば、Duckクラスは、
<fieldname=“IsOwnedBy”>
<datatypecoll_type=“none”type=“inst_ref”>
<identifiername=“Person”/>
</datatype>
</field>
により、Personクラスにインスタンスとして宣言されるIsOwnedByフィールドを定義することがある。
<fieldname=“IsOwnedBy”>
<datatypecoll_type=“none”type=“inst_ref”>
<identifiername=“Person”/>
</datatype>
</field>
により、Personクラスにインスタンスとして宣言されるIsOwnedByフィールドを定義することがある。
14 識別子
一実施形態においては、識別子名は、大文字と小文字とを区別しない場合がある。特定の実施形態においては、規則定義言語は、識別子名が、二重引用文字、ピリオド、コンマ、コロン、(前の又は後ろの)括弧を含むことを認めない。サーバ102は、語を保留したり順序付け制限を課すなどの、追加制限を課すことができる。
一実施形態においては、識別子名は、大文字と小文字とを区別しない場合がある。特定の実施形態においては、規則定義言語は、識別子名が、二重引用文字、ピリオド、コンマ、コロン、(前の又は後ろの)括弧を含むことを認めない。サーバ102は、語を保留したり順序付け制限を課すなどの、追加制限を課すことができる。
14.1 IdentifierSpec−Identifier_Element、IdentifierPath_Element
IdentifierSpec要素は、以下のフォーマットを有する。
IdentifierSpec
::=Identifier_Element
::=IdentifierPath_Element
Identifier_Element
::(‘identifier’Identifier_Attribs+)
IdentifierAttribs
::=Name_Attrib //Required
::=Intrinsic_Attrib //Optional
::=LocTag_Attrib //Optional
IdentifierPath_Element
::=(‘identifier_path’[LocTag_Attrib])
Identifier_Element+
識別子指定は、1つの識別子、又は複数の識別子の「経路」のいずれかを含むことができる。たとえば、インフィックス言語は、
Classl.Instance1.Fldl=3
などの「.」演算子を使用して経路をサポートする。
IdentifierSpec要素は、以下のフォーマットを有する。
IdentifierSpec
::=Identifier_Element
::=IdentifierPath_Element
Identifier_Element
::(‘identifier’Identifier_Attribs+)
IdentifierAttribs
::=Name_Attrib //Required
::=Intrinsic_Attrib //Optional
::=LocTag_Attrib //Optional
IdentifierPath_Element
::=(‘identifier_path’[LocTag_Attrib])
Identifier_Element+
識別子指定は、1つの識別子、又は複数の識別子の「経路」のいずれかを含むことができる。たとえば、インフィックス言語は、
Classl.Instance1.Fldl=3
などの「.」演算子を使用して経路をサポートする。
14.2 固有識別子
それぞれのIdentifier_Elementについて、ユーザは、識別子が固有識別子(Intrinsic_Attrib)、又は規則定義言語に組み込まれた識別子であることを任意に指定することができる。サーバ102は、これらの識別子を調べ、これらをその固有名のリストと比較することができる。大文字と小文字とを区別しない合致などの合致があり得る。そうでない場合は、サーバ102は、シンタックス誤りとしてその使用を拒絶することができる。
それぞれのIdentifier_Elementについて、ユーザは、識別子が固有識別子(Intrinsic_Attrib)、又は規則定義言語に組み込まれた識別子であることを任意に指定することができる。サーバ102は、これらの識別子を調べ、これらをその固有名のリストと比較することができる。大文字と小文字とを区別しない合致などの合致があり得る。そうでない場合は、サーバ102は、シンタックス誤りとしてその使用を拒絶することができる。
インフィックス言語は、それぞれの固有識別子が「@」接頭部を用いて指定されることを必要とする場合がある。また、インフィックス言語は、固有の使用法の代替形態をサポートすることができる。たとえば、以下の対のステートメントは、文意的に均等物であり得、以下の同一の規則定義言語コードを生成することができる。
@inst_reset(duck.@inst_template)
duck.@inst_template.@inst_reset()
@dmn_push(DomainX)
DomainX.@dmn_push()
if@fld_isunknown(instance1.fldl)then...end
if instancel.fldl.@fld_isunknown()then...end
if@set_doesincludeval(setl,123)then...end
if setl.@set_doesincludeval(123)then...end
その上、サーバ102は、本文書によって定義された名前とは異なる名前を有する固有識別子を表すことを選択することがある。たとえば、サーバ102は、inst_templateを、より単純に「template」として表し、「template」をその言語の保留語とすることを選択することがある。
@inst_reset(duck.@inst_template)
duck.@inst_template.@inst_reset()
@dmn_push(DomainX)
DomainX.@dmn_push()
if@fld_isunknown(instance1.fldl)then...end
if instancel.fldl.@fld_isunknown()then...end
if@set_doesincludeval(setl,123)then...end
if setl.@set_doesincludeval(123)then...end
その上、サーバ102は、本文書によって定義された名前とは異なる名前を有する固有識別子を表すことを選択することがある。たとえば、サーバ102は、inst_templateを、より単純に「template」として表し、「template」をその言語の保留語とすることを選択することがある。
14.3 識別子の解決
規則定義言語は、識別子を、クラス、ドメイン、インスタンス、及びフィールドなどのルールベースオブジェクトに関連付ける。次いで、サーバ102は、これらのオブジェクトに対する名前の参照を解決する。
規則定義言語は、識別子を、クラス、ドメイン、インスタンス、及びフィールドなどのルールベースオブジェクトに関連付ける。次いで、サーバ102は、これらのオブジェクトに対する名前の参照を解決する。
14.3.1 識別子の有効範囲規則
ユーザは、以下のオブジェクトを階層的に定義することができる。
・ rulebase-global objects
・ class-specific objects
・ method-specific localvariables
・ domain-specific objects
・ class-specific objects
・ method-specific localvariables
・ ruleset-specific objects
・ class-specific objects
・ method-specific local variables
・ rule-specific localvariables
この階層内のオブジェクトの位置が、オブジェクト参照に対するその範囲(可視性)を判断する。ルールベースレベルのオブジェクトが、ルールベースレベル及び低位レベルの両方のオブジェクトから、ルールベース全体に認識できる。ドメインレベルのオブジェクトが、ドメインレベル及び低位レベルの両方のオブジェクトから、そのドメイン全体に認識できるが、これらのオブジェクトは、それらのドメインの外部では認識できないことがある。ルールセットレベルのオブジェクトが、ルールセットレベル及び低位レベルの両方のオブジェクトから、ルールセット全体に認識できるが、このようなオブジェクトは、ルールセットの外部では認識できないことがある。低位レベルのオブジェクトが、高位レベルの同名のオブジェクトを「隠す」。したがって、Ageと名づけられた局所変数が、Ageと名づけられたクラスフィールドを隠すことがある。
ユーザは、以下のオブジェクトを階層的に定義することができる。
・ rulebase-global objects
・ class-specific objects
・ method-specific localvariables
・ domain-specific objects
・ class-specific objects
・ method-specific localvariables
・ ruleset-specific objects
・ class-specific objects
・ method-specific local variables
・ rule-specific localvariables
この階層内のオブジェクトの位置が、オブジェクト参照に対するその範囲(可視性)を判断する。ルールベースレベルのオブジェクトが、ルールベースレベル及び低位レベルの両方のオブジェクトから、ルールベース全体に認識できる。ドメインレベルのオブジェクトが、ドメインレベル及び低位レベルの両方のオブジェクトから、そのドメイン全体に認識できるが、これらのオブジェクトは、それらのドメインの外部では認識できないことがある。ルールセットレベルのオブジェクトが、ルールセットレベル及び低位レベルの両方のオブジェクトから、ルールセット全体に認識できるが、このようなオブジェクトは、ルールセットの外部では認識できないことがある。低位レベルのオブジェクトが、高位レベルの同名のオブジェクトを「隠す」。したがって、Ageと名づけられた局所変数が、Ageと名づけられたクラスフィールドを隠すことがある。
14.3.2 識別子資格
ユーザは、一般に、完全なオブジェクト参照を必要としない。ユーザは、参照を明確にするのに充分な修飾子を指定するだけで良い。したがって、識別子Ageが、クラスPersonのインスタンスFather内のフィールドを一意に識別する場合は、ユーザは、単に、
age
を指定するだけで良い。
Personの静的インスタンスが複数ある場合は、ユーザは、さらに、識別子に、
father.age.
の資格を与えることができる。
複数の範囲内クラスがFatherオブジェクトを定義する場合は、ユーザは、識別子に、
person.father.age
の資格をより完全に与えることができる。
Ageがコードブロックの範囲内の複数の場所で定義される場合は、コードブロックは、適切な修飾子を指定することにより、オブジェクトのそれぞれを参照することができる。
ユーザは、一般に、完全なオブジェクト参照を必要としない。ユーザは、参照を明確にするのに充分な修飾子を指定するだけで良い。したがって、識別子Ageが、クラスPersonのインスタンスFather内のフィールドを一意に識別する場合は、ユーザは、単に、
age
を指定するだけで良い。
Personの静的インスタンスが複数ある場合は、ユーザは、さらに、識別子に、
father.age.
の資格を与えることができる。
複数の範囲内クラスがFatherオブジェクトを定義する場合は、ユーザは、識別子に、
person.father.age
の資格をより完全に与えることができる。
Ageがコードブロックの範囲内の複数の場所で定義される場合は、コードブロックは、適切な修飾子を指定することにより、オブジェクトのそれぞれを参照することができる。
14.4 静的及び動的IdentifierSpec要素
14.4、1 静的指定
静的IdentifierSpecは、
age
father.age
person.father.age
domain1.ruleset1.duck.donald.age.
などの、推論前に、その値を解決できるものである。
一実施形態においては、IdentifierSpecは、IdentifierSpecが許可されるルールベース内のどこにおいても、静的なものとして指定され得る。特定の実施形態においては、経路は5つを超える識別子から構成されないことがあり、その経路の長さがその解釈に影響を及ぼす。たとえば、5つの識別子を有するフィールド経路は、
<domain_name>.<ruleset_name>.<class_name>.<instance_name>.<field_name>
のフォーマット内にあると想定され、
それに対して、3つの識別子のフィールド経路は、
<class_name>.<instance_name>.<field_name>
のフォーマット内にあると想定される。
14.4、1 静的指定
静的IdentifierSpecは、
age
father.age
person.father.age
domain1.ruleset1.duck.donald.age.
などの、推論前に、その値を解決できるものである。
一実施形態においては、IdentifierSpecは、IdentifierSpecが許可されるルールベース内のどこにおいても、静的なものとして指定され得る。特定の実施形態においては、経路は5つを超える識別子から構成されないことがあり、その経路の長さがその解釈に影響を及ぼす。たとえば、5つの識別子を有するフィールド経路は、
<domain_name>.<ruleset_name>.<class_name>.<instance_name>.<field_name>
のフォーマット内にあると想定され、
それに対して、3つの識別子のフィールド経路は、
<class_name>.<instance_name>.<field_name>
のフォーマット内にあると想定される。
14.4.2 動的指定
動的IdentifierSpecは、
//The age ofthe spouse for the Person instance named Father
person.father.spouse.age
//The age of theowner for the Duck instance named Donald
domain1.rulesetl.duck.donald.owner.age
などの、推論中に、その値が解決されるものである。
一実施形態においては、IdentifierSpecは、規則または方法論理内で動的なものとして指定され得る。特定の実施形態においては、これらの指定は、
//The age ofthe spouse of the manager of Employee1's manager's spouse
employee1.manager.spouse.manager.spouse.age=32
などの、任意の長さであり得る。
経路の「末端」は、2つ以上のフィールド名を指定する。一実施形態においては、最後のフィールド名以外のすべてが、インスタンス参照フィールドとして宣言されたフィールドを識別する。上記の例においては、識別子Manager及びSpouseがインスタンス参照フィールドに名前を付ける。
動的IdentifierSpecは、
//The age ofthe spouse for the Person instance named Father
person.father.spouse.age
//The age of theowner for the Duck instance named Donald
domain1.rulesetl.duck.donald.owner.age
などの、推論中に、その値が解決されるものである。
一実施形態においては、IdentifierSpecは、規則または方法論理内で動的なものとして指定され得る。特定の実施形態においては、これらの指定は、
//The age ofthe spouse of the manager of Employee1's manager's spouse
employee1.manager.spouse.manager.spouse.age=32
などの、任意の長さであり得る。
経路の「末端」は、2つ以上のフィールド名を指定する。一実施形態においては、最後のフィールド名以外のすべてが、インスタンス参照フィールドとして宣言されたフィールドを識別する。上記の例においては、識別子Manager及びSpouseがインスタンス参照フィールドに名前を付ける。
14.4.2.1 挙動の推論
推論エンジン112は、動的指定において様々なフィールドを評価する時に、未知の値又はナルフィールド値に遭遇することがある。
推論エンジン112は、動的指定において様々なフィールドを評価する時に、未知の値又はナルフィールド値に遭遇することがある。
14.4.2.1.1 未知のフィールド値の取り扱い
推論エンジン112は、未知の値を検出した場合は、現在実行中の規則を保留する。
推論エンジン112は、未知の値を検出した場合は、現在実行中の規則を保留する。
14.4.2.1.2 ナルフィールド値の取り扱い
推論エンジン112がナル値を有する中間フィールドを検出した場合は、その結果は、現在のコンテキストに依存することがある。現在のコンテキストが、
employee1.manager.age<32//whereemployee1.manager=NULL(no manager)
などの比較である場合は、推論エンジン112は、その比較結果を偽であるとすることがある。推論エンジン112は、比較コンテキストの外部でナル値を検出した場合は、誤り例外と共に推論を終了する。この実施形態においては、Employee1が管理者を持たない(Employee1.Manager=ナル)場合は、推論エンジン112は、以下の比較のすべてを偽と評価する。
employeel.manager.age<32
employee1.manager.age>=32
employeel.manager.age<>32
employee1.manager.age=32
推論エンジン112がナル値を有する中間フィールドを検出した場合は、その結果は、現在のコンテキストに依存することがある。現在のコンテキストが、
employee1.manager.age<32//whereemployee1.manager=NULL(no manager)
などの比較である場合は、推論エンジン112は、その比較結果を偽であるとすることがある。推論エンジン112は、比較コンテキストの外部でナル値を検出した場合は、誤り例外と共に推論を終了する。この実施形態においては、Employee1が管理者を持たない(Employee1.Manager=ナル)場合は、推論エンジン112は、以下の比較のすべてを偽と評価する。
employeel.manager.age<32
employee1.manager.age>=32
employeel.manager.age<>32
employee1.manager.age=32
15 ルールベースのマージング
ルールベースのマージングとは、参加しているルールベース114又はサブルールベースからの要素及びフィールドの混合である。場合によっては、マージングは、同じルールベース内の同名のオブジェクトを必要とする。ルールベースビルダ110は、ルールベースレベル、制約セットレベル、クラスレベル、ドメインレベル、及びルールセットレベルで、オブジェクト名を比較することにより、ルールベース要素をマージする。
ルールベースのマージングとは、参加しているルールベース114又はサブルールベースからの要素及びフィールドの混合である。場合によっては、マージングは、同じルールベース内の同名のオブジェクトを必要とする。ルールベースビルダ110は、ルールベースレベル、制約セットレベル、クラスレベル、ドメインレベル、及びルールセットレベルで、オブジェクト名を比較することにより、ルールベース要素をマージする。
所与のレベルでのオーバラップがない(同名の要素がない)場合は、その結果は、そのレベルのマージオブジェクトの単なる集合体である。したがって、1つのルールベース114がClass1と名づけられたルールベースレベルのクラスのみを定義し、別のルールベース114がClass2と名づけられたルールベースレベルのクラスのみを定義する場合は、そのマージ結果は、Class1及びClass2の両方を反映する。
オーバラップがある場合には、その結果は、マージされた要素及びフィールドに依存する。場合によっては、要素とフィールドとの混合がある。他の場合においては、ルールベース114間の整合性確認のみがある。いずれの場合においても、以下のガイドラインが適用され得る。まず第1に、マージ結果は、ルールベースビルダ110によって認識された要素及びフィールドのみを反映し、名前空間の接頭部のある又は認識されなかった要素/フィールドを含まないことがある。第2に、ルールベース論理をマージしようとしない場合がある。方法については、これは、ただ1つのルールベース要素が、その方法のための実施論理を定義できるということを意味する。規則については、これは、ただ1つのルールベース要素が、その規則のための実施論理を指定できるということを意味する。制約については、これは、ただ1つのルールベース要素が、制約ブール式を指定できるということを意味する。第3に、所与の要素については、マージは、発見された第1のLocTag_Attribのみを反映する。したがって、第1のルールベース要素がLocTag_Attribを指定した場合は、そのマージ結果はそのフィールドを反映する。そうでない場合は、その結果は、第2のルールベース要素のための(あれば)LocTag_Attribを反映する。以下のセクションにおいては、ルールベース要素が如何にマージされ得るかについて、さらに詳細に記載する。
15.1 IdentifierSpec_Elementのマージング
これらの要素をマージする場合には、1つの要素の指定は、他の要素と同一か又は右側のサブパスであるべきである。たとえば、1つの要素が、Person.Father.Nameを指定し、他の要素が、Person.Father.Name、Father.Name、又はNameを指定することができる。指定が同一でない場合は、そのマージ結果は、最も多く指定された(最も長い)指定を反映することがある。
これらの要素をマージする場合には、1つの要素の指定は、他の要素と同一か又は右側のサブパスであるべきである。たとえば、1つの要素が、Person.Father.Nameを指定し、他の要素が、Person.Father.Name、Father.Name、又はNameを指定することができる。指定が同一でない場合は、そのマージ結果は、最も多く指定された(最も長い)指定を反映することがある。
15.2 DataType_Elementのマージング
これらの要素をマージする場合には、それぞれの要素の属性及び部分要素は、他の要素の属性及び部分要素と一貫性を有するべきである。DataTypeNumber_Elementについては、Precision_Attribが異なる場合は、そのマージ結果は、その2つの精度の高い方を反映することがある。
これらの要素をマージする場合には、それぞれの要素の属性及び部分要素は、他の要素の属性及び部分要素と一貫性を有するべきである。DataTypeNumber_Elementについては、Precision_Attribが異なる場合は、そのマージ結果は、その2つの精度の高い方を反映することがある。
15.3 Rulebase_Elementのマージング
そのマージ結果は、第1の要素のName_Attribを反映する。
そのマージ結果は、第1の要素のName_Attribを反映する。
15.4 (任意のレベルの)InitMethodDef_Elementのマージング
そのマージ結果は、複数のInitMethodDef_Elementを保持することができる。したがって、それぞれのルールベース要素が、所与のレベルで1つのInitMethodDef_Elementを定義する場合は、その結果は、そのレベルの2つのInitMethodDef_Elementとなる。それぞれの要素は、それ自体のフィールド及び部分要素を保持し、マージされた要素は、異なる名前を有するべきである。マージされた要素が同一の名前を有する場合は、それらの要素の最も大きいものが、InitMethodBodyを指定することがある(方法の実施)。
そのマージ結果は、複数のInitMethodDef_Elementを保持することができる。したがって、それぞれのルールベース要素が、所与のレベルで1つのInitMethodDef_Elementを定義する場合は、その結果は、そのレベルの2つのInitMethodDef_Elementとなる。それぞれの要素は、それ自体のフィールド及び部分要素を保持し、マージされた要素は、異なる名前を有するべきである。マージされた要素が同一の名前を有する場合は、それらの要素の最も大きいものが、InitMethodBodyを指定することがある(方法の実施)。
15.5 (任意のレベルの)同名のAssoc_Elementのマージング
IdentifierSpec要素は、互いに一貫性を有するべきである。
IdentifierSpec要素は、互いに一貫性を有するべきである。
15.6 (任意のレベルの)同名のConstraintSet_Elementのマージング
ルールベースビルダ110は、Constraint_Elementを組み合わせることができる。同名のConstraint_Elementについては、ただ1つの要素が、GeneralExprを指定することがある。
ルールベースビルダ110は、Constraint_Elementを組み合わせることができる。同名のConstraint_Elementについては、ただ1つの要素が、GeneralExprを指定することがある。
15.7 (任意のレベルの)同名のClass_Elementのマージング
複数の要素がParent_Elementを指定する場合は、これらの指定は、互いに一貫性を有するべきである。いずれかの要素がParent_Elementを指定する場合は、そのマージ結果は親を反映する。
複数の要素がParent_Elementを指定する場合は、これらの指定は、互いに一貫性を有するべきである。いずれかの要素がParent_Elementを指定する場合は、そのマージ結果は親を反映する。
同名のFieldDcl_Elementについては、ResolutionType_Attrib及びDataType_Elementは、同一であるべきである。1つの要素が「最終値」を指定したが、他の要素が指定しなかった場合は、その要素は、「第1の値」となる。ルールベースビルダ110は、ConstrainerList_Elementのリストを組み合わせることができる。両方の要素がConstraintViolation_Elementを指定する場合は、ルールベースビルダ110は、最も限定的なもの(再開要素よりアボート要素)を選択することがある。
同名のClassMethodDef_Elementについては、方法署名(パラメータ名を除く)は、一貫性を有するべきであり、せいぜい1つの要素が、ClassMethodBody_Elementを指定することがある(方法の実施)。
同名のStaticInstDef_Elementについては、ルールベースビルダ110は、LastChanceValue_Elementの任意のリストを組み合わせることがある。同名の識別子を有する要素については、ルールベースビルダ110は、発見された最初のLastChanceValueのみを保持することがある。ルールベースビルダ110は、FieldDcl_Elementに関する制約を取り扱う。
15.8 同名のDomain_Elementのマージング
いずれかの要素がクライアントアプリケーション122と共用される場合は、その結果も共用される。そうでない場合は、その結果も共用されない。両方の要素がDomainGoal_Elementを指定した場合は、その目標は、一貫性のある値を有するべきである。いずれかの要素が目標を指定した場合は、そのマージ結果は、目標を反映する。
いずれかの要素がクライアントアプリケーション122と共用される場合は、その結果も共用される。そうでない場合は、その結果も共用されない。両方の要素がDomainGoal_Elementを指定した場合は、その目標は、一貫性のある値を有するべきである。いずれかの要素が目標を指定した場合は、そのマージ結果は、目標を反映する。
いずれかの要素が、DomainAppSharedFlds_Elementを指定した場合は、その結果は、DomainAppSharedFlds_Elementを反映することがある。両方がDomainAppSharedFlds_Elementを指定した場合は、その部分要素がマージされることがあるが、同じ識別子が、DomainPreConditionList_ElementとDomainPostConditionList_Elementとの両方で終了すべきではない。
同名のRuleset_Elementについては、1つの要素がPost_Attribを「条件付き」を指定し、他の要素が指定しなかった場合は、その要素は「無条件」となる。いずれかの要素がアプリケーションと共用される場合は、その結果も共用される。そうでない場合は、その結果は共用されない。ルールベースビルダ110は、Rule_Element部分要素を組み合わせるが、同名のRule_Elementは認めないことがある。
16 固有識別子
規則定義言語は、固有識別子を参照する。以下に、インフィックス言語で用いられる固有識別子の例を示す。これらの例においては、インフィックス言語には、それぞれの固有識別子が「@」接頭部を用いて指定されることが必要である。
規則定義言語は、固有識別子を参照する。以下に、インフィックス言語で用いられる固有識別子の例を示す。これらの例においては、インフィックス言語には、それぞれの固有識別子が「@」接頭部を用いて指定されることが必要である。
16.1 記号参照
16.1.1 scope_global
この識別子は、ルールベース範囲レベルに対する記号参照である。たとえば、これは、ルールベースレベルのClass1をドメインレベルのClass1と区別する際に有用であり得る。この識別子は、
@scope_global.classl.instancel.fld1=3
などにより、識別子経路内の第1の識別子として指定されることがある。
16.1.1 scope_global
この識別子は、ルールベース範囲レベルに対する記号参照である。たとえば、これは、ルールベースレベルのClass1をドメインレベルのClass1と区別する際に有用であり得る。この識別子は、
@scope_global.classl.instancel.fld1=3
などにより、識別子経路内の第1の識別子として指定されることがある。
16.1.2 scope_currclass
この識別子は、方法を実行するための現在のクラスに対する記号参照である。たとえば、これは、インスタンスxyzを局所変数xyzと区別する際に有用であり得る。この識別子は、
@scope_currclass.xyz.fldl=3
などにより、識別子経路内の第1の識別子として、方法論理では指定されるが、規則論理では指定されないことがある。
この識別子は、方法を実行するための現在のクラスに対する記号参照である。たとえば、これは、インスタンスxyzを局所変数xyzと区別する際に有用であり得る。この識別子は、
@scope_currclass.xyz.fldl=3
などにより、識別子経路内の第1の識別子として、方法論理では指定されるが、規則論理では指定されないことがある。
16.1.3 scope_currinstance
この識別子は、方法を実行するための現在のインスタンスに対する記号参照である。たとえば、これは、フィールドxyzを局所変数xyzと区別する際に有用であり得る。この識別子は、
@scope_currinstance.xyz=3
などにより、識別子経路内の第1の識別子として、方法論理では指定されるが、規則論理では指定されないことがある。
この識別子は、方法を実行するための現在のインスタンスに対する記号参照である。たとえば、これは、フィールドxyzを局所変数xyzと区別する際に有用であり得る。この識別子は、
@scope_currinstance.xyz=3
などにより、識別子経路内の第1の識別子として、方法論理では指定されるが、規則論理では指定されないことがある。
16.1.4 candidate_value
この識別子は、フィールドのために提案された新しい値に対する記号参照である。この識別子は、
@candidate_value>=0or @candidate_value<=max_age
などにより、制約ブール式内で指定されることがある。
この識別子は、フィールドのために提案された新しい値に対する記号参照である。この識別子は、
@candidate_value>=0or @candidate_value<=max_age
などにより、制約ブール式内で指定されることがある。
16.2 固有オブジェクト
16.2.1 inst_template
この識別子は、すべてのクラスに関連付けられた固有インスタンスに対する参照である。この識別子は、動的インスタンスを作成するためのモデルとして機能する。規則又は方法が、新しい動的インスタンスの所望のフィールドを反映するよう、テンプレートのフィールドを初期設定する。テンプレートインスタンスは、書込み専用インスタンスであるという点で、使用が限定されている特別な形式のインスタンスである。ルールベース論理は、テンプレートフィールドのための値のみを設定できるが、テンプレートインスタンスを介して、テンプレートフィールドを読み取ること、又は方法を起動することはできない。同様に、テンプレートインスタンスは、パターン合致のためなどの、推論の重みを有さないことがある。1つの使用例を以下に示す。
//Create aDuck
@inst_reset(duck.@inst_template)//Reset fields to UNKNOWN
// status
//Initializetemplate fields
duck.@inst_template.age=4
... //init additional fields
//Create newinstance
@inst_make(duck)
16.2.1 inst_template
この識別子は、すべてのクラスに関連付けられた固有インスタンスに対する参照である。この識別子は、動的インスタンスを作成するためのモデルとして機能する。規則又は方法が、新しい動的インスタンスの所望のフィールドを反映するよう、テンプレートのフィールドを初期設定する。テンプレートインスタンスは、書込み専用インスタンスであるという点で、使用が限定されている特別な形式のインスタンスである。ルールベース論理は、テンプレートフィールドのための値のみを設定できるが、テンプレートインスタンスを介して、テンプレートフィールドを読み取ること、又は方法を起動することはできない。同様に、テンプレートインスタンスは、パターン合致のためなどの、推論の重みを有さないことがある。1つの使用例を以下に示す。
//Create aDuck
@inst_reset(duck.@inst_template)//Reset fields to UNKNOWN
// status
//Initializetemplate fields
duck.@inst_template.age=4
... //init additional fields
//Create newinstance
@inst_make(duck)
16.3 エンジンレベルの方法
16.3.1 engn_startchain
この識別子は、現在のドメインコンテキストのための推論を起動する(又は再始動する)固有の方法である。一例を以下に示す。
rcInfer=@engn_startchain()
推論エンジン112が既に現在のドメインに対して推論している場合は、推論エンジン112は、誤りと共にこの演算をアボートすることがある。方法戻りコードは、engn_stopchain()戻りコード(あれば)を示す。推論が、(engn_stopchainを実行せずに)通常に終了する場合は、戻りコードはゼロである。
16.3.1 engn_startchain
この識別子は、現在のドメインコンテキストのための推論を起動する(又は再始動する)固有の方法である。一例を以下に示す。
rcInfer=@engn_startchain()
推論エンジン112が既に現在のドメインに対して推論している場合は、推論エンジン112は、誤りと共にこの演算をアボートすることがある。方法戻りコードは、engn_stopchain()戻りコード(あれば)を示す。推論が、(engn_stopchainを実行せずに)通常に終了する場合は、戻りコードはゼロである。
16.3.2 engn_stopchain
この識別子は、現在のドメインコンテキストのための推論を直ちにアボートする固有の方法である。推論エンジン112が現在のドメインに対して、現在、推論していない場合は、推論エンジン112は、誤りと共にこの演算をアボートすることがある。この識別子はまた、推論戻りコードとして返される数値値を指定する。慣例として、推論が通常に終了した場合には、推論エンジン112がゼロを返すので、この値はゼロ以外であり得る。いずれの場合においても、推論は、現在の規則アクションを完了せずに、直ちに終了することがある。そのアクションが方法を起動し、その1つがengn_stopchain()を起動した場合は、その方法及びすべての動的に優勢な方法も直ちに終了する。1つの使用例を以下に示す。
@engn_stopchain(-123)
この識別子は、現在のドメインコンテキストのための推論を直ちにアボートする固有の方法である。推論エンジン112が現在のドメインに対して、現在、推論していない場合は、推論エンジン112は、誤りと共にこの演算をアボートすることがある。この識別子はまた、推論戻りコードとして返される数値値を指定する。慣例として、推論が通常に終了した場合には、推論エンジン112がゼロを返すので、この値はゼロ以外であり得る。いずれの場合においても、推論は、現在の規則アクションを完了せずに、直ちに終了することがある。そのアクションが方法を起動し、その1つがengn_stopchain()を起動した場合は、その方法及びすべての動的に優勢な方法も直ちに終了する。1つの使用例を以下に示す。
@engn_stopchain(-123)
16.3.3 engn_tracemsg
この識別子は、アプリケーションのMessageHandler又はMessageArrayオブジェクト(あれば)に、テキストメッセージを送信する固有の方法である。クライアントアプリケーション122がこれらのオブジェクトのいずれをも定義していない場合は、推論エンジン112は、engn_tracemsg()の起動を無視することがある。1つの使用例を以下に示す。
@engn_tracemsg(“InRulel;father age=”&father.age)
この識別子は、アプリケーションのMessageHandler又はMessageArrayオブジェクト(あれば)に、テキストメッセージを送信する固有の方法である。クライアントアプリケーション122がこれらのオブジェクトのいずれをも定義していない場合は、推論エンジン112は、engn_tracemsg()の起動を無視することがある。1つの使用例を以下に示す。
@engn_tracemsg(“InRulel;father age=”&father.age)
16.4 ドメインレベルの方法
16.4.1 dmn_push
この識別子は、指定された部分推論ドメインをロードする固有の方法である。指定されたドメインが既にロードされている(プッシュされている)場合は、推論エンジン112は、誤りと共にこの演算をアボートすることがある。1つの使用例を以下に示す。
@dmn_push(DomainX)
16.4.1 dmn_push
この識別子は、指定された部分推論ドメインをロードする固有の方法である。指定されたドメインが既にロードされている(プッシュされている)場合は、推論エンジン112は、誤りと共にこの演算をアボートすることがある。1つの使用例を以下に示す。
@dmn_push(DomainX)
16.4.2 dmn_pop
この識別子は、現在の部分推論ドメインをアンロードする固有の方法である。現在ロードされているドメインがない場合は、推論エンジン112は、誤りと共にこの演算をアボートすることがある。1つの使用例を以下に示す。
@dmn_pop()
この識別子は、現在の部分推論ドメインをアンロードする固有の方法である。現在ロードされているドメインがない場合は、推論エンジン112は、誤りと共にこの演算をアボートすることがある。1つの使用例を以下に示す。
@dmn_pop()
16.5 インスタンスレベルの方法
16.5.1 inst_make
この識別子は、インスタンステンプレートから動的インスタンスを作成する固有の方法である。この識別子は、テンプレートインスタンスのための現在のフィールド値に基づいて、インスタンスを作成する。ルールベース論理は、すべてのインスタンスによって共用されるフィールド値と共に、テンプレートインスタンスを一回初期設定し、次いでinst_make()を数回起動し、インスタンス特有の差異のためのテンプレートフィールド値を毎回修正することにより、複数の同様のインスタンスを作成することができる。
16.5.1 inst_make
この識別子は、インスタンステンプレートから動的インスタンスを作成する固有の方法である。この識別子は、テンプレートインスタンスのための現在のフィールド値に基づいて、インスタンスを作成する。ルールベース論理は、すべてのインスタンスによって共用されるフィールド値と共に、テンプレートインスタンスを一回初期設定し、次いでinst_make()を数回起動し、インスタンス特有の差異のためのテンプレートフィールド値を毎回修正することにより、複数の同様のインスタンスを作成することができる。
16.5.2 inst_reset
この識別子は、指定されたインスタンスのフィールドのすべてを未知の状態にリセットする固有の方法である。1つの使用例を以下に示す。
@inst_reset(classl.instancel)
この識別子は、指定されたインスタンスのフィールドのすべてを未知の状態にリセットする固有の方法である。1つの使用例を以下に示す。
@inst_reset(classl.instancel)
16.5.3 inst_delete
この識別子は、指定された動的インスタンスを消去する固有の方法である。一実施形態においては、いかなる種類の規則も動的インスタンスを作成することができるが、パターン合致規則のみが、それらを消去することができる。1つの使用例を以下に示す。
for
anyduck d
if
//duckis an old duck
d.getage()>=100
then
@inst_delete(d)
end
この識別子は、指定された動的インスタンスを消去する固有の方法である。一実施形態においては、いかなる種類の規則も動的インスタンスを作成することができるが、パターン合致規則のみが、それらを消去することができる。1つの使用例を以下に示す。
for
anyduck d
if
//duckis an old duck
d.getage()>=100
then
@inst_delete(d)
end
16.5.4 inst_getname
この識別子は、指定されたインスタンスの名前を返す固有の方法である。静的インスタンスについては、返された名前は、
“Domain1.Rulesetl.Person.Fafher”
などの、「.」区切り記号の付いた、完全に資格を有する名前である。
動的インスタンスについては、インスタンス識別子は、
“Domain1.Rulesetl.Person(23)”
などの索引値を反映する。
1つの使用例を以下に示す。
strName=@inst_getname(person1.spouse)
この識別子は、指定されたインスタンスの名前を返す固有の方法である。静的インスタンスについては、返された名前は、
“Domain1.Rulesetl.Person.Fafher”
などの、「.」区切り記号の付いた、完全に資格を有する名前である。
動的インスタンスについては、インスタンス識別子は、
“Domain1.Rulesetl.Person(23)”
などの索引値を反映する。
1つの使用例を以下に示す。
strName=@inst_getname(person1.spouse)
16.6 フィールドレベルの方法(すべてのフィールド)
16.6.1 fld_isknown
この識別子は、指定されたフィールドの認識力のステータスを試験する固有の方法である。フィールドが現在、既知の状態である場合は、この方法はブール真値を返す。そうでない場合は、そのフィールドが既知の状態を得るまで、現在実行中の規則は保留する。1つの使用例を以下に示す。
if@fld_isknown(instance.fldl)then...end
16.6.1 fld_isknown
この識別子は、指定されたフィールドの認識力のステータスを試験する固有の方法である。フィールドが現在、既知の状態である場合は、この方法はブール真値を返す。そうでない場合は、そのフィールドが既知の状態を得るまで、現在実行中の規則は保留する。1つの使用例を以下に示す。
if@fld_isknown(instance.fldl)then...end
16.6.2 fld_isunknown
この識別子は、指定されたフィールドの認識力のステータスを試験する固有の方法である。フィールドが現在、既知の状態である場合は、この方法はブール偽値を返す。そうでない場合は、この方法はブール真値を返す。1つの使用例を以下に示す。
if@fld_isunknown(instancel.fldl)then...end
この識別子は、指定されたフィールドの認識力のステータスを試験する固有の方法である。フィールドが現在、既知の状態である場合は、この方法はブール偽値を返す。そうでない場合は、この方法はブール真値を返す。1つの使用例を以下に示す。
if@fld_isunknown(instancel.fldl)then...end
16.6.3 fld_reset
この識別子は、指定されたフィールドを未知の状態にリセットする固有の方法である。1つの使用例を以下に示す。
@fld_reset(classl.instancel.fld1)
この識別子は、指定されたフィールドを未知の状態にリセットする固有の方法である。1つの使用例を以下に示す。
@fld_reset(classl.instancel.fld1)
16.7 フィールドレベルの方法(セットに特有)
16.7.1 set_addval
この識別子は、指定された値をセットに追加する固有の方法である。セットが既に値を包含している場合は、この演算は効果を有さない。指定された値は、セットにタイプ互換性を有することがある。1つの使用例を以下に示す。
@set_addval(setl,123)
16.7.1 set_addval
この識別子は、指定された値をセットに追加する固有の方法である。セットが既に値を包含している場合は、この演算は効果を有さない。指定された値は、セットにタイプ互換性を有することがある。1つの使用例を以下に示す。
@set_addval(setl,123)
16.7.2 set_doesincludeval
この識別子は、セットが既に指定された値を包含するかどうかを試験する固有の方法である。セットがその値を包含している場合は、この方法はブール真値を返す。そうでない場合は、ブール偽値を返す。指定された値は、セットにタイプ互換性を有することがある。1つの使用例を以下に示す。
if@set_doesincludeval(setl,123)then...end
この識別子は、セットが既に指定された値を包含するかどうかを試験する固有の方法である。セットがその値を包含している場合は、この方法はブール真値を返す。そうでない場合は、ブール偽値を返す。指定された値は、セットにタイプ互換性を有することがある。1つの使用例を以下に示す。
if@set_doesincludeval(setl,123)then...end
16.7.3 set_removeval
この識別子は、セットから指定された値を除去する固有の方法である。その結果、セットは、変更されないままとなり、それ自体のサブセットとなるか、又は空のセットとなる。指定された値は、セットにタイプ互換性を有することがある。1つの使用例を以下に示す。
@set_romoveval(setl,123)
この識別子は、セットから指定された値を除去する固有の方法である。その結果、セットは、変更されないままとなり、それ自体のサブセットとなるか、又は空のセットとなる。指定された値は、セットにタイプ互換性を有することがある。1つの使用例を以下に示す。
@set_romoveval(setl,123)
16.7.4 set_mergeset
この識別子は、指定されたセットをベースセットにマージする固有の方法である。指定されたセットが空である場合は、この演算は効果を有さない。指定されたセットは、ベースセットにタイプ互換性を有することがある。1つの使用例を以下に示す。
@set_mergeset(setl.set2) //merge set2 into setl
この識別子は、指定されたセットをベースセットにマージする固有の方法である。指定されたセットが空である場合は、この演算は効果を有さない。指定されたセットは、ベースセットにタイプ互換性を有することがある。1つの使用例を以下に示す。
@set_mergeset(setl.set2) //merge set2 into setl
16.7.5 set_excludeset
この識別子は、指定されたセットの値をベースセットから除去する固有の方法である。その結果、ベースセットは、変更されないままとなり、それ自体のサブセットとなるか、又は空のセットとなる。指定されたセットは、ベースセットにタイプ互換性を有することがある。1つの使用例を以下に示す。
@set_excludeset(setl,set(123,456))//removevalues from setl
この識別子は、指定されたセットの値をベースセットから除去する固有の方法である。その結果、ベースセットは、変更されないままとなり、それ自体のサブセットとなるか、又は空のセットとなる。指定されたセットは、ベースセットにタイプ互換性を有することがある。1つの使用例を以下に示す。
@set_excludeset(setl,set(123,456))//removevalues from setl
16.7.6 set_intersect
この識別子は、指定されたセットをベースセットと交差させる固有の方法である。その結果、ベースセットは、変更されないままとなり、それ自体のサブセットとなるか、又は空のセットとなる。指定されたセットは、ベースセットにタイプ互換性を有することがある。1つの使用例を以下に示す。
@set_intersect(setl,set(123,456))//possiblymodifies setl
この識別子は、指定されたセットをベースセットと交差させる固有の方法である。その結果、ベースセットは、変更されないままとなり、それ自体のサブセットとなるか、又は空のセットとなる。指定されたセットは、ベースセットにタイプ互換性を有することがある。1つの使用例を以下に示す。
@set_intersect(setl,set(123,456))//possiblymodifies setl
16.7.7 set_doesintersect
この識別子は、指定されたセットがベースセットと交差するかどうかを試験する固有の方法である。セット同士が任意の値を共用している場合は、この方法はブール真値を返す。そうでない場合は、ブール偽値を返す。指定されたセットは、ベースセットにタイプ互換性を有することがある。1つの使用例を以下に示す。
if@set_doesintersect(setl,set2)then...end
この識別子は、指定されたセットがベースセットと交差するかどうかを試験する固有の方法である。セット同士が任意の値を共用している場合は、この方法はブール真値を返す。そうでない場合は、ブール偽値を返す。指定されたセットは、ベースセットにタイプ互換性を有することがある。1つの使用例を以下に示す。
if@set_doesintersect(setl,set2)then...end
16.7.8 set getsize
この識別子は、セット内の要素の数を示す数字値を返す固有の方法である。セットが空である場合は、この方法はゼロを返す。1つの使用例を以下に示す。
var cElementsis number=@set_getsize(setl)
この識別子は、セット内の要素の数を示す数字値を返す固有の方法である。セットが空である場合は、この方法はゼロを返す。1つの使用例を以下に示す。
var cElementsis number=@set_getsize(setl)
16.8 フィールドレベルの方法(文字列に特有)
16.8.1 string_getlength
この識別子は、文字列の長さを示す数字値を返す固有の方法である。文字列が空である場合は、この方法はゼロを返す。1つの使用例を以下に示す。
var cChars isnumber=@string_getlength(stringl)
16.8.1 string_getlength
この識別子は、文字列の長さを示す数字値を返す固有の方法である。文字列が空である場合は、この方法はゼロを返す。1つの使用例を以下に示す。
var cChars isnumber=@string_getlength(stringl)
16.9 ルールセットレベルの方法
16.9.1 ruleset_postrules
この識別子は、指定されたルールセットのための規則を、現在のドメインコンテキストのためのアジェンダにポストする固有の方法である。指定されたルールセットは、「条件付き」のPost_Attrib値を有することがある。1つの使用例を以下に示す。
@ruleset_postrules(domainl.rulesetl)
16.9.1 ruleset_postrules
この識別子は、指定されたルールセットのための規則を、現在のドメインコンテキストのためのアジェンダにポストする固有の方法である。指定されたルールセットは、「条件付き」のPost_Attrib値を有することがある。1つの使用例を以下に示す。
@ruleset_postrules(domainl.rulesetl)
好ましい実施形態及び一般に関連する方法について、本発明を記述してきたが、当業者には、好ましい実施形態及び方法の修正形態及び置換形態が自明であろう。したがって、好ましい例示的実施形態についての上記の記述は、本発明を定義又は制約するものではない。頭記の特許請求の範囲に定義されている本発明の趣旨及び範囲から逸脱することなく、他の変更形態、代替形態、及び修正形態も可能である。
Claims (56)
- 推論サービスを提供する方法であって、
指定されたドメインのための複数の規則を受け取るステップと、
前記規則に関連付けられた少なくとも1つの事前条件を識別するステップとを含み、それぞれの事前条件とは、前記規則を実行する際に使用される入力であり、
さらに、前記規則に関連付けられた少なくとも1つの事後条件を識別することを含み、それぞれの事後条件とは、前記規則の実行からの出力であり、
さらに、前記識別された事前条件に対応する入力値を受け取るステップと、
前記入力値を使用して前記規則の少なくとも一部分を実行し、出力値を生成するステップとを含み、前記出力値が前記識別された事後条件に対応する方法。 - 前記規則が第1の規則を含み、
前記第1の規則の1つが、補足ルールベースから第2のドメインをロードすることにより、部分推論を起動し、前記第1の規則の実行が再開される前に、前記第2のドメインの規則に対する推論が終了する請求項1に記載の方法。 - 前記規則が第1の規則を含み、
前記第1の規則の1つが、第1のルールベースから第2のドメインをロードすることにより、部分推論を起動し、前記第1の規則の実行が再開される前に、前記第2のドメインの規則に対する推論が終了する請求項1に記載の方法。 - 前記規則が第1の規則を含み、前記第1の規則の実行が終了した後に、複数の第2の規則を実行することをさらに含み、前記第2の規則の実行が、前記第1の規則からの前記出力値を前記第2の規則のための入力値として使用する請求項1に記載の方法。
- フィールドを撤回可能なフィールドとして識別するステップと、
撤回不可能な値を前記撤回可能なフィールドに割り当てるステップと、
1つ以上の撤回可能な値を前記撤回可能なフィールドに割り当てるステップと、
前記撤回可能なフィールドを前記撤回不可能な値に撤回するステップとをさらに含む請求項1に記載の方法。 - 前記規則の実行が開始された後に、第1の通信ハンドラを使用して第2の入力値を受け取るステップと、
前記規則の実行が終了する前に、第2の通信ハンドラを使用して前記出力値を伝えるステップとをさらに含む請求項1に記載の方法。 - 第1のフィールドを識別する情報を受け取るステップと、
最終値を前記第1のフィールドに割り当てた第1の規則を識別するステップと、
前記第1の規則をファイアさせた第2のフィールドを識別するステップと、
最終値を前記第2のフィールドに割り当てた第2の規則を識別するステップとをさらに含む請求項1に記載の方法。 - 前記規則の少なくとも一部分を実行することが、決定木規則をファイアする、フェイルする、又は保留するかどうかを判断することを含む請求項1に記載の方法。
- 前記決定木規則を保留することが、前記決定木規則を保留させた2進ステートメントを識別することを含み、
前記決定木規則をアンペンドするステップと、前記決定木規則を保留させた前記2進ステートメントでの実行を再始動するステップとをさらに含む請求項8に記載の方法。 - 前記規則の少なくとも一部分を実行することが、前記規則が実行される時に、単調推論を強制実施することを含む請求項1に記載の方法。
- 前記規則が最終値フィールドに影響を及ぼし、複数の値が、前記最終値フィールドに割り当てられることがある請求項1に記載の方法。
- 前記規則を包含するルールベースの読取り専用画像をメモリ内に格納するステップと、
クライアント特有の情報ブロック内の前記入力及び出力値をメモリ内に格納するステップとをさらに含む請求項1に記載の方法。 - 前記規則の少なくとも一部分を実行することが、特定のフィールドのための第2の入力値なしでは前記実行を完了できないと判断することを含み、
初期設定ハンドラ及び前記規則を包含するルールベースの少なくとも1つを使用して、前記第2の入力値を受け取ることをさらに含み、前記初期設定ハンドラが、ユーザ又はアプリケーションから前記第2の入力値を受け取るよう動作可能であり、前記ルールベースが、前記特定のフィールドのための最後のチャンスの値を識別するよう動作可能である請求項1に記載の方法。 - 前記規則の少なくとも一部分を実行することが、フィールドに割り当てられた値が制約に違反するかどうかを判断することを含み、
前記フィールドに割り当てられた前記値が前記制約に違反する場合は、前記フィールドによって定義された違反アクションを実施することをさらに含む請求項1に記載の方法。 - 前記違反アクションが、前記規則の前記実行を中止するステップと、代入値を前記フィールドに割り当てるステップと、初期設定ハンドラを使用して置換値を要求するステップとのうちの少なくとも1つを含む請求項14に記載の方法。
- 前記規則が、2進ルールベース内の前記指定されたドメインの少なくとも一部分を形成し、前記ドメインが、前記事前条件及び前記事後条件を識別する請求項1に記載の方法。
- 前記ルールベースが、前記規則を定義する、1つ以上のコンパイルされたXML文書を含む請求項16に記載の方法。
- 前記規則の少なくとも一部分を実行することが、前記規則を前向き連鎖すること又は後ろ向き連鎖することのいずれかを含む請求項1に記載の方法。
- 規則スナップショットを生成することをさらに含み、前記規則スナップショットが、前記規則、及び前記規則を保留する、前記規則に関連付けられた任意のフィールドのうちの1つの現在のステータスを識別する請求項1に記載の方法。
- 前記規則の少なくとも一部分を実行することが、推論エンジンオブジェクトを使用して前記規則の少なくとも一部分を実行することを含む請求項1に記載の方法。
- 前記推論エンジンオブジェクトが、ステートレス推論エンジンオブジェクト又はステートフル推論エンジンオブジェクトを含む請求項20に記載の方法。
- 前記複数の規則を受け取ることが、
前記規則に関連付けられた場所を受け取るステップと、
前記場所にアクセスするステップと、
前記アクセスされた場所から前記規則を検索するステップとを含む請求項1に記載の方法。 - 推論サービスを提供するためのシステムであって、
指定されたドメインのために複数の規則を格納するよう動作可能なメモリと、
前記規則に関連付けられた、前記規則を実行する際に使用される入力である事前条件を識別し、
前記規則に関連付けられた、前記規則の前記実行からの出力である事後条件を識別し、
前記事前条件に対応する入力値を受け取り、
前記入力値を使用して前記規則の少なくとも一部分を実行し、前記事後条件に対応する出力値を生成するよう、一括して動作可能な1つ以上のプロセッサとを備えたシステム。 - 前記規則が、第1のルールベースの少なくとも一部分を形成する第1の規則を含み、
前記第1の規則の1つが、補足ルールベースから第2のドメインをロードすることにより、部分推論を起動し、前記第1の規則の実行が再開される前に、前記第2のドメインの規則に対する推論が終了する請求項23に記載のシステム。 - 前記規則が第1の規則を含み、
前記第1の規則の1つが、前記第1のルールベースから第2のドメインをロードすることにより、部分推論を起動し、前記第1の規則の実行が再開される前に、前記第2のドメインの規則に対する推論が終了する請求項23に記載のシステム。 - 前記規則が第1の規則を含み、
前記1つ以上のプロセッサが、前記第1の規則の実行が終了した後に複数の第2の規則を実行するよう、さらに一括して動作可能であり、前記第2の規則の実行が、前記第1の規則からの前記出力値を前記第2の規則のための入力値として使用する請求項23に記載のシステム。 - 前記1つ以上のプロセッサが、
フィールドを撤回可能なフィールドとして識別し、
撤回不可能な値を前記撤回可能なフィールドに割り当て、
1つ以上の撤回可能な値を前記撤回可能なフィールドに割り当て、
前記撤回可能なフィールドを前記撤回不可能な値に撤回するよう、さらに一括して動作可能である請求項23に記載のシステム。 - 前記1つ以上のプロセッサが、
第1のフィールドを識別する情報を受け取り、
最終値を前記第1のフィールドに割り当てた第1の規則を識別し、
前記第1の規則をファイアさせた第2のフィールドを識別し、
最終値を前記第2のフィールドに割り当てた第2の規則を識別するよう、さらに一括して動作可能である請求項23に記載のシステム。 - 前記1つ以上のプロセッサが、
決定木規則をファイアする、フェイルする、又は保留するかどうかを判断するステップと、
前記決定木規則をアンペンドするステップと、前記決定木規則を保留した2進ステートメントで実行を再始動するステップとにより、
前記規則の少なくとも一部分を実行するよう一括して動作可能であり、
前記決定木規則を保留することが、前記決定木規則を保留した前記2進ステートメントを識別することを含む請求項23に記載のシステム。 - 前記1つ以上のプロセッサが、特定のフィールドのための第2の入力値なしでは前記実行が完了できないと判断することにより、前記規則の少なくとも一部分を実行するよう一括して動作可能であり、
前記1つ以上のプロセッサが、初期設定ハンドラ及び前記規則を包含するルールベースのうちの少なくとも1つを使用して前記第2の入力値を受け取るよう、さらに一括して動作可能であり、前記初期設定ハンドラが、ユーザ又はアプリケーションから前記第2の入力値を受け取るよう動作可能であり、前記ルールベースが、前記特定のフィールドのための最後のチャンスの値を識別するよう動作可能である請求項23に記載のシステム。 - 前記1つ以上のプロセッサが、フィールドに割り当てられた値が制約に違反するかどうかを判断することにより、前記規則の少なくとも一部分を実行するよう一括して動作可能であり、
前記1つ以上のプロセッサが、前記フィールドに割り当てられた前記値が前記制約に違反する場合は、前記フィールドによって定義された違反アクションを実行するよう、さらに一括して動作可能である請求項23に記載のシステム。 - 前記1つ以上のプロセッサが、規則スナップショットを生成するよう、さらに一括して動作可能であり、前記規則スナップショットが、前記規則、及び前記規則を保留する、前記規則に関連付けられた任意のフィールドのうちの1つの現在のステータスを識別する請求項23に記載のシステム。
- 少なくとも1つのコンピュータ読取り可能媒体上で具現化される論理であって、
指定されたドメインのための複数の規則に関連付けられた、前記規則を実行する際に使用される入力である事前条件を識別し、
前記規則に関連付けられた、前記規則の前記実行からの出力である事後条件を識別し、
前記事前条件に対応する入力値を受け取り、
前記入力値を使用して前記規則の少なくとも一部分を実行し、前記事後条件に対応する出力値を生成するよう実行される場合に動作可能である論理。 - 推論サービスを提供するためのシステムであって、
指定されたドメインのための複数の規則に関連付けられた事前条件を識別するための手段を備え、前記事前条件が、前記規則を実行する際に使用される入力であり、
さらに、前記規則に関連付けられた事後条件を識別するための手段を備え、前記事後条件が、前記規則の前記実行からの出力であり、
さらに、前記事前条件に対応する入力値を受け取るための手段と、
前記入力値を使用して前記規則の少なくとも一部分を実行し、前記事後条件に対応する出力値を生成するための手段とを備えたシステム。 - 推論サービスを提供する方法であって、
指定されたドメインのための複数の規則を推論エンジンに伝えることを含み、前記規則が事前条件及び事後条件に関連付けられ、前記事前条件が前記規則を実行する際に前記推論エンジンによって使用される入力であり、前記事後条件が前記規則の前記実行からの出力であり、
さらに、前記事前条件に対応する入力値を前記推論エンジンに伝えるステップと、
前記推論エンジンから、前記事後条件に対応する出力値を受け取るステップとを含む方法。 - 前記複数の規則を前記推論エンジンに伝えることが、2進ルールベース及びルールベースの場所のうちの少なくとも1つを前記推論エンジンに伝えることを含む請求項35に記載の方法。
- 前記ルールベースの前記場所が、ユニフォームリソースロケータ(URL)を含む請求項36に記載の方法。
- 前記出力値が、複数の出力値の1つを含み、
前記推論エンジンが、ステートレス推論エンジンを含み、
制御オブジェクトを前記推論エンジンに伝えることをさらに含み、前記制御オブジェクトが、前記推論エンジンが、それぞれが前記出力値の1つを識別する複数の出力メッセージの少なくとも1つを生成するかどうかを識別し、出力文書が、前記出力値のすべて及び規則スナップショットを識別し、前記規則スナップショットが、前記規則、及び前記規則を保留する、前記規則に関連付けられた任意のフィールドのうちの1つの現在のステータスを識別する請求項35に記載の方法。 - 前記出力値が、複数の出力値の1つを含み、
前記推論エンジンが、ステートフル推論エンジンを含み、
前記推論エンジン内の少なくとも1つの機能を起動することをさらに含み、前記少なくとも1つの機能が、前記出力値の1つを識別するステップと、前記出力値のすべてを識別するステップと、前記規則、及び前記規則を保留する、前記規則に関連付けられた任意のフィールドのうちの1つの現在のステータスを識別する規則スナップショットを生成するステップと、前記出力値の1つを解像した前記規則を識別するステップと、撤回可能な値を前記規則によって使用されるフィールドに割り当てるステップと、撤回不可能な値を前記規則によって使用されるフィールドに割り当てるステップと、前記規則によって使用されるフィールドの値を撤回するステップとのうちの少なくとも1つを行うよう動作可能である請求項35に記載の方法。 - 推論サービスを提供する方法であって、
第1のルールベースの少なくとも一部分を含む指定されたドメインのための複数の第1の規則を受け取るステップと、
前記第1の規則をメモリ内にロードするステップと、
第2の規則を含む補足ルールベースを受け取るステップと、
前記第2の規則を前記メモリ内の前記第1の規則に組み合わせるステップと、
前記第1の及び第2の規則の少なくとも一部分を実行して、出力値を生成するステップとを含む方法。 - 第3の規則を含む第2の補足ルールベースを受け取るステップと、
前記第3の規則を前記メモリ内の前記第1の規則に組み合わせるステップと、
前記第1の及び第3の規則の少なくとも一部分を実行して、第2の出力値を生成するステップとをさらに含む請求項40に記載の方法。 - 前記第2の規則が、前記第1のルールベースによって定義されたデータオブジェクト上でのみ動作する請求項40に記載の方法。
- 前記第1のルールベースが、前記第2の規則が前記第1の規則と矛盾する場合に、前記第2の規則が使用できるかどうかを識別する請求項40に記載の方法。
- 前記第1のルールベース及び前記補足ルールベースが、2進ルールベースを含む請求項40に記載の方法。
- 推論サービスを提供するためのシステムであって、
指定されたドメインのための複数の第1の規則を格納するよう動作可能なメモリを備え、前記複数の第1の規則が、第1のルールベースの少なくとも一部分を含み、
さらに、第2の規則を含む補足ルールベースを受け取り、
前記第2の規則を前記メモリ内の前記第1の規則に組み合わせ、
前記第1の及び第2の規則の少なくとも一部分を実行して、出力値を生成するよう、一括して動作可能な1つ以上のプロセッサを備えたシステム。 - 前記第2の規則が、前記第1のルールベースによって定義されたデータオブジェクト上でのみ動作する請求項45に記載のシステム。
- 前記第1のルールベースが、前記第2の規則が前記第1の規則と矛盾する場合に、前記第2の規則が使用できるかどうかを識別する請求項45に記載のシステム。
- 前記第1のルールベース及び前記補足ルールベースが、2進ルールベースを含む請求項45に記載のシステム。
- 少なくとも1つのコンピュータ読取り可能媒体上で具現化される論理であって、
指定されたドメインのための、第1のルールベースの少なくとも一部分を含む複数の第1の規則を受け取り、
前記第1の規則をメモリ内にロードし、
第2の規則を含む補足ルールベースを受け取り、
前記第2の規則を前記メモリ内の前記第1の規則と組み合わせ、
前記第1の及び第2の規則の少なくとも一部分を実行して、出力値を生成するよう実行される場合に動作可能である論理。 - 推論サービスを提供する方法であって、
指定されたドメインのための、第1のルールベースの少なくとも一部分を含む複数の第1の規則を、推論エンジンに伝えるステップと、
第2の規則を含む補足ルールベースを前記推論エンジンに伝えるステップと、
前記推論エンジンが、前記第2の規則を前記メモリ内の前記第1の規則に組み合わせることができるようにするステップと、
前記推論エンジンから出力値を受け取るステップとを含み、前記推論エンジンが、前記第1の及び第2の規則の少なくとも一部分を実行して、前記出力値を生成するよう動作可能である方法。 - 前記複数の第1の規則を前記推論エンジンに伝えることが、前記第1の規則を包含する2進ルールベース及び前記第1の規則を包含するルールベースの場所のうちの少なくとも1つを前記推論エンジンに伝えることを含む請求項50に記載の方法。
- 推論サービスを提供する方法であって、
指定されたドメインのための複数の規則の少なくとも一部分を実行することを含み、前記規則の少なくとも1つが式を含み、
さらに、前記規則内の前記式を解くのに必要なフィールドが未知の値を有する場合に、前記規則の1つを保留するステップと、
前記決定木規則を保留した前記式に関連付けられた2進ステートメントを識別するステップと、
既知の値を前記規則を保留したフィールドに割り当てるステップと、
前記規則をアンペンドするステップと、
前記識別された2進ステートメントで前記規則の実行を再始動するステップとを含む方法。 - 前記規則の少なくとも1つが、決定木規則を含み、前記決定木規則内の前記式が、前記決定木規則を少なくとも2つの部分木に分割する請求項52に記載の方法。
- 推論サービスを提供するためのシステムであって、
指定されたドメインのための複数の規則を格納するよう動作可能なメモリを備え、前記規則の少なくとも1つが式を含み、
さらに、前記規則の少なくとも一部分を実行し、
前記規則内の前記式を解くのに必要なフィールドが未知の値を有する場合に、前記規則の1つを保留し、
前記決定木規則を保留した前記式に関連付けられた2進ステートメントを識別し、
前記規則を保留した前記フィールドに既知の値を割り当て、
前記規則をアンペンドし、
前記識別された2進ステートメントで前記規則の実行を再始動するよう、一括して動作可能な1つ以上のプロセッサを備えたシステム。 - 前記規則の少なくとも1つが決定木規則を含み、前記決定木規則内の前記式が、前記決定木規則を少なくとも2つの部分木に分割する請求項54に記載のシステム。
- 少なくとも1つのコンピュータ読取り可能媒体上で具現化される論理であって、
指定されたドメインのための、式を含む複数の規則の少なくとも一部分を実行し、
前記規則内の前記式を解くのに必要なフィールドが未知の値を有する場合には、前記規則の1つを保留し、
前記決定木規則を保留した前記式に関連付けられた2進ステートメントを識別し、
前記規則を保留した前記フィールドに既知の値を割り当て、
前記規則をアンペンドし、
前記識別された2進ステートメントで前記規則の実行を再始動するよう実行される場合に動作可能である論理。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US37382302P | 2002-04-19 | 2002-04-19 | |
PCT/US2003/012071 WO2003090164A2 (en) | 2002-04-19 | 2003-04-18 | System and method for providing inferencing services |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2005525630A true JP2005525630A (ja) | 2005-08-25 |
Family
ID=29251091
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2003586834A Pending JP2005525630A (ja) | 2002-04-19 | 2003-04-18 | 推論サービスを提供するためのシステム及び方法 |
Country Status (11)
Country | Link |
---|---|
US (4) | US7191163B2 (ja) |
EP (1) | EP1525556B1 (ja) |
JP (1) | JP2005525630A (ja) |
KR (1) | KR20050011745A (ja) |
CN (1) | CN1659589A (ja) |
AU (1) | AU2003230984A1 (ja) |
BR (1) | BR0309333A (ja) |
CA (1) | CA2482956A1 (ja) |
IL (1) | IL164622A0 (ja) |
WO (1) | WO2003090164A2 (ja) |
ZA (1) | ZA200409017B (ja) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2017508224A (ja) * | 2014-01-09 | 2017-03-23 | ファイゲンバウム、トーマス ディ.FEIGENBAUM,Thomas,D. | 知識の認識ベースの処理のためのシステムおよび方法 |
Families Citing this family (142)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20090106353A1 (en) * | 2001-09-19 | 2009-04-23 | Belovich Steven G | Method and system for providing an event auditing client server software arrangement |
US7191163B2 (en) * | 2002-04-19 | 2007-03-13 | Computer Associates Think, Inc. | System and method for providing inferencing services |
AU2002952648A0 (en) * | 2002-11-14 | 2002-11-28 | Softlaw Corporation Limited | Forward-chaining inferencing |
US7831905B1 (en) * | 2002-11-22 | 2010-11-09 | Sprint Spectrum L.P. | Method and system for creating and providing web-based documents to information devices |
US7296263B1 (en) | 2002-12-12 | 2007-11-13 | F5 Networks, Inc. | Method and system for performing operations on data using XML streams |
US7409440B1 (en) | 2002-12-12 | 2008-08-05 | F5 Net Works, Inc. | User defined data items |
US7530015B2 (en) * | 2003-06-25 | 2009-05-05 | Microsoft Corporation | XSD inference |
US7873668B2 (en) * | 2003-08-15 | 2011-01-18 | Laszlo Systems, Inc. | Application data binding |
US7827591B2 (en) * | 2003-10-08 | 2010-11-02 | Fmr Llc | Management of hierarchical reference data |
US7752608B1 (en) | 2003-12-22 | 2010-07-06 | The United States Of America As Represented By The Administrator Of The National Aeronautics And Space Administration | Systems, methods and apparatus for verification of knowledge-based systems |
US7617531B1 (en) * | 2004-02-18 | 2009-11-10 | Citrix Systems, Inc. | Inferencing data types of message components |
US7720877B1 (en) * | 2004-04-14 | 2010-05-18 | Oracle America, Inc. | Class structure based enhancer for data objects |
US7613666B1 (en) | 2004-04-23 | 2009-11-03 | Microsoft Corporation | Generating a class model from a business vocabulary to represent facts expressible in the business vocabulary |
US7802231B2 (en) * | 2004-04-30 | 2010-09-21 | Microsoft Corporation | Generating programmatic interfaces from natural language expressions of authorizations for provision of information |
US7620935B2 (en) | 2004-04-30 | 2009-11-17 | Microsoft Corporation | Generating programmatic interfaces from natural language expressions of authorizations for request of information |
US7480302B2 (en) * | 2004-05-11 | 2009-01-20 | Samsung Electronics Co., Ltd. | Packet classification method through hierarchical rulebase partitioning |
WO2005116827A1 (en) * | 2004-05-31 | 2005-12-08 | Stmicroelectronics Pvt. Ltd. | A method for remotely upgrading the firmware of a target device using wireless technology |
US7499850B1 (en) * | 2004-06-03 | 2009-03-03 | Microsoft Corporation | Generating a logical model of objects from a representation of linguistic concepts for use in software model generation |
US7454430B1 (en) | 2004-06-18 | 2008-11-18 | Glenbrook Networks | System and method for facts extraction and domain knowledge repository creation from unstructured and semi-structured documents |
US7613676B2 (en) | 2004-07-27 | 2009-11-03 | Microsoft Corporation | Generating a database model from natural language expressions of business rules |
US8050907B2 (en) * | 2004-07-30 | 2011-11-01 | Microsoft Corporation | Generating software components from business rules expressed in a natural language |
US7742406B1 (en) * | 2004-12-20 | 2010-06-22 | Packeteer, Inc. | Coordinated environment for classification and control of network traffic |
US7926029B1 (en) * | 2005-01-13 | 2011-04-12 | 21St Century Systems, Inc. | System and method of progressive domain specialization product solutions |
US7343364B2 (en) * | 2005-02-04 | 2008-03-11 | Efunds Corporation | Rules-based system architecture and systems using the same |
US8103640B2 (en) * | 2005-03-02 | 2012-01-24 | International Business Machines Corporation | Method and apparatus for role mapping methodology for user registry migration |
US20060259342A1 (en) * | 2005-05-12 | 2006-11-16 | Bernhard Hartenstein | Rule based document distribution to partners |
WO2007073257A2 (en) * | 2005-12-21 | 2007-06-28 | Telefonaktiebolaget Lm Ericsson (Publ) | Network alarm management |
US7987149B2 (en) * | 2006-03-10 | 2011-07-26 | Trilogy Intellectual Property Holdings, Inc. | Configuration mapping using a multi-dimensional rule space and rule consolidation |
US8205189B2 (en) * | 2006-07-13 | 2012-06-19 | Oracle International Corporation | Method and system for definition control in a data repository application |
KR100860407B1 (ko) * | 2006-12-05 | 2008-09-26 | 한국전자통신연구원 | 멀티모달 융합 처리 방법 및 그 장치 |
US9088554B1 (en) * | 2006-12-29 | 2015-07-21 | At&T Intellectual Property Ii, L.P. | System and method for data modeling |
US9330127B2 (en) * | 2007-01-04 | 2016-05-03 | Health Care Productivity, Inc. | Methods and systems for automatic selection of classification and regression trees |
US7720936B2 (en) | 2007-03-12 | 2010-05-18 | Citrix Systems, Inc. | Systems and methods of freshening and prefreshening a DNS cache |
US7783757B2 (en) * | 2007-03-12 | 2010-08-24 | Citrix Systems, Inc. | Systems and methods of revalidating cached objects in parallel with request for object |
US7584294B2 (en) * | 2007-03-12 | 2009-09-01 | Citrix Systems, Inc. | Systems and methods for prefetching objects for caching using QOS |
US8504775B2 (en) | 2007-03-12 | 2013-08-06 | Citrix Systems, Inc | Systems and methods of prefreshening cached objects based on user's current web page |
US8701010B2 (en) | 2007-03-12 | 2014-04-15 | Citrix Systems, Inc. | Systems and methods of using the refresh button to determine freshness policy |
US8037126B2 (en) | 2007-03-12 | 2011-10-11 | Citrix Systems, Inc. | Systems and methods of dynamically checking freshness of cached objects based on link status |
US8103783B2 (en) | 2007-03-12 | 2012-01-24 | Citrix Systems, Inc. | Systems and methods of providing security and reliability to proxy caches |
US8069129B2 (en) | 2007-04-10 | 2011-11-29 | Ab Initio Technology Llc | Editing and compiling business rules |
DE102007033019B4 (de) | 2007-07-16 | 2010-08-26 | Peter Dr. Jaenecke | Methoden und Datenverarbeitungssysteme für computerisiertes Schlußfolgern |
JP5023865B2 (ja) * | 2007-07-26 | 2012-09-12 | 富士ゼロックス株式会社 | 文書分類装置及び文書分類プログラム |
US8121117B1 (en) | 2007-10-01 | 2012-02-21 | F5 Networks, Inc. | Application layer network traffic prioritization |
US8078556B2 (en) * | 2008-02-20 | 2011-12-13 | International Business Machines Corporation | Generating complex event processing rules utilizing machine learning from multiple events |
US8165984B2 (en) * | 2008-03-28 | 2012-04-24 | Microsoft Corporation | Decision service for applications |
US20090326925A1 (en) * | 2008-06-27 | 2009-12-31 | Microsoft Corporation | Projecting syntactic information using a bottom-up pattern matching algorithm |
US20090326924A1 (en) * | 2008-06-27 | 2009-12-31 | Microsoft Corporation | Projecting Semantic Information from a Language Independent Syntactic Model |
CN104679807B (zh) | 2008-06-30 | 2018-06-05 | 起元技术有限责任公司 | 基于图的计算中的数据日志记录 |
US8332870B2 (en) * | 2008-09-30 | 2012-12-11 | Accenture Global Services Limited | Adapter services |
US9111030B1 (en) | 2008-10-03 | 2015-08-18 | Federal Home Loan Mortgage Corporation | Systems and methods for testing a software application |
US20120102421A1 (en) * | 2010-10-22 | 2012-04-26 | Bigmachines, Inc. | Methods and apparatus for specifying and applying business rules in a product configurator |
US9558164B1 (en) | 2008-12-31 | 2017-01-31 | F5 Networks, Inc. | Methods and system for converting WSDL documents into XML schema |
US20100217737A1 (en) * | 2009-02-20 | 2010-08-26 | Ajay Shama | Method and system for business rules management |
CN101938368A (zh) * | 2009-06-30 | 2011-01-05 | 国际商业机器公司 | 刀片服务器系统中的虚拟机管理器和虚拟机处理方法 |
US8352402B2 (en) * | 2009-08-12 | 2013-01-08 | Red Hat, Inc. | Multiple entry point network for stream support in a rule engine |
US10721269B1 (en) | 2009-11-06 | 2020-07-21 | F5 Networks, Inc. | Methods and system for returning requests with javascript for clients before passing a request to a server |
US8806056B1 (en) | 2009-11-20 | 2014-08-12 | F5 Networks, Inc. | Method for optimizing remote file saves in a failsafe way |
US11140178B1 (en) | 2009-11-23 | 2021-10-05 | F5 Networks, Inc. | Methods and system for client side analysis of responses for server purposes |
US8850071B2 (en) * | 2010-05-10 | 2014-09-30 | Liaison Technologies, Inc. | Map intuition system and method |
US9420049B1 (en) | 2010-06-30 | 2016-08-16 | F5 Networks, Inc. | Client side human user indicator |
US9503375B1 (en) | 2010-06-30 | 2016-11-22 | F5 Networks, Inc. | Methods for managing traffic in a multi-service environment and devices thereof |
US8347100B1 (en) | 2010-07-14 | 2013-01-01 | F5 Networks, Inc. | Methods for DNSSEC proxying and deployment amelioration and systems thereof |
US10296653B2 (en) | 2010-09-07 | 2019-05-21 | F5 Networks, Inc. | Systems and methods for accelerating web page loading |
US8281236B2 (en) * | 2010-09-08 | 2012-10-02 | Microsoft Corporation | Removing style corruption from extensible markup language documents |
US8538903B2 (en) | 2010-09-23 | 2013-09-17 | International Business Machines Corporation | Data based truth maintenance method and system |
US8494999B2 (en) | 2010-09-23 | 2013-07-23 | International Business Machines Corporation | Sensor based truth maintenance method and system |
US8600914B2 (en) * | 2010-11-30 | 2013-12-03 | Red Hat, Inc. | Left and right unlinking for a shared knowledge base |
KR101296279B1 (ko) * | 2011-01-07 | 2013-08-20 | 주식회사 아이싸이랩 | 규칙 서버와 규칙 실행 단말기가 분리된 규칙기반 규칙추론 장치 및 방법 |
US9262719B2 (en) | 2011-03-22 | 2016-02-16 | Patrick Soon-Shiong | Reasoning engines |
WO2012158854A1 (en) | 2011-05-16 | 2012-11-22 | F5 Networks, Inc. | A method for load balancing of requests' processing of diameter servers |
US8396836B1 (en) | 2011-06-30 | 2013-03-12 | F5 Networks, Inc. | System for mitigating file virtualization storage import latency |
US8935136B2 (en) * | 2011-09-22 | 2015-01-13 | Microsoft Corporation | Multi-component model engineering |
US8930285B2 (en) * | 2011-10-21 | 2015-01-06 | International Business Machines Corporation | Composite production rules |
US8463850B1 (en) | 2011-10-26 | 2013-06-11 | F5 Networks, Inc. | System and method of algorithmically generating a server side transaction identifier |
KR101329951B1 (ko) * | 2011-11-21 | 2013-11-14 | 포항공과대학교 산학협력단 | 결정 구조 기반 컨트롤 컴포넌트 개발 방법 및 장치 |
US9384711B2 (en) | 2012-02-15 | 2016-07-05 | Microsoft Technology Licensing, Llc | Speculative render ahead and caching in multiple passes |
US10230566B1 (en) | 2012-02-17 | 2019-03-12 | F5 Networks, Inc. | Methods for dynamically constructing a service principal name and devices thereof |
US9244843B1 (en) | 2012-02-20 | 2016-01-26 | F5 Networks, Inc. | Methods for improving flow cache bandwidth utilization and devices thereof |
US9020912B1 (en) | 2012-02-20 | 2015-04-28 | F5 Networks, Inc. | Methods for accessing data in a compressed file system and devices thereof |
US9519631B2 (en) | 2012-03-30 | 2016-12-13 | Microsoft Technology Licensing, Llc | Semantic diff and automerge |
EP2853074B1 (en) | 2012-04-27 | 2021-03-24 | F5 Networks, Inc | Methods for optimizing service of content requests and devices thereof |
US9177533B2 (en) | 2012-05-31 | 2015-11-03 | Microsoft Technology Licensing, Llc | Virtual surface compaction |
US9230517B2 (en) | 2012-05-31 | 2016-01-05 | Microsoft Technology Licensing, Llc | Virtual surface gutters |
US9286122B2 (en) | 2012-05-31 | 2016-03-15 | Microsoft Technology Licensing, Llc | Display techniques using virtual surface allocation |
US9235925B2 (en) * | 2012-05-31 | 2016-01-12 | Microsoft Technology Licensing, Llc | Virtual surface rendering |
US9135244B2 (en) * | 2012-08-30 | 2015-09-15 | Arria Data2Text Limited | Method and apparatus for configurable microplanning |
US10033837B1 (en) | 2012-09-29 | 2018-07-24 | F5 Networks, Inc. | System and method for utilizing a data reducing module for dictionary compression of encoded data |
US20140107932A1 (en) * | 2012-10-11 | 2014-04-17 | Aliphcom | Platform for providing wellness assessments and recommendations using sensor data |
US9578090B1 (en) | 2012-11-07 | 2017-02-21 | F5 Networks, Inc. | Methods for provisioning application delivery service and devices thereof |
US10375155B1 (en) | 2013-02-19 | 2019-08-06 | F5 Networks, Inc. | System and method for achieving hardware acceleration for asymmetric flow connections |
US9497614B1 (en) | 2013-02-28 | 2016-11-15 | F5 Networks, Inc. | National traffic steering device for a better control of a specific wireless/LTE network |
US9317805B1 (en) * | 2013-03-12 | 2016-04-19 | Ubs Ag | System and method of performing modular quantitative analysis with nodes that have contextual labels |
US8965877B2 (en) | 2013-03-14 | 2015-02-24 | Glenbrook Networks | Apparatus and method for automatic assignment of industry classification codes |
KR101458693B1 (ko) * | 2013-03-22 | 2014-11-05 | 경희대학교 산학협력단 | 예측 모형에 기초한 예측결과의 판단 방법 |
US9305111B1 (en) | 2013-04-11 | 2016-04-05 | Ubs Ag | System and method of performing quantitative analysis via graph nodes representing programs |
US9307007B2 (en) | 2013-06-14 | 2016-04-05 | Microsoft Technology Licensing, Llc | Content pre-render and pre-fetch techniques |
US9946711B2 (en) | 2013-08-29 | 2018-04-17 | Arria Data2Text Limited | Text generation from correlated alerts |
PL405176A1 (pl) * | 2013-08-30 | 2015-03-02 | Akademia Górniczo-Hutnicza im. Stanisława Staszica w Krakowie | System wnioskujący w oparciu o zbiór reguł i sposób wnioskowania |
US9396181B1 (en) | 2013-09-16 | 2016-07-19 | Arria Data2Text Limited | Method, apparatus, and computer program product for user-directed reporting |
SG11201602296WA (en) | 2013-09-27 | 2016-04-28 | Ab Initio Technology Llc | Evaluating rules applied to data |
US10187317B1 (en) | 2013-11-15 | 2019-01-22 | F5 Networks, Inc. | Methods for traffic rate control and devices thereof |
US11838851B1 (en) | 2014-07-15 | 2023-12-05 | F5, Inc. | Methods for managing L7 traffic classification and devices thereof |
EP3026601A1 (en) * | 2014-11-27 | 2016-06-01 | Agfa Healthcare | Data repository querying method |
US10182013B1 (en) | 2014-12-01 | 2019-01-15 | F5 Networks, Inc. | Methods for managing progressive image delivery and devices thereof |
US11895138B1 (en) | 2015-02-02 | 2024-02-06 | F5, Inc. | Methods for improving web scanner accuracy and devices thereof |
US20170024653A1 (en) * | 2015-03-30 | 2017-01-26 | Edgeverve Systems Limited | Method and system to optimize customer service processes |
US10834065B1 (en) | 2015-03-31 | 2020-11-10 | F5 Networks, Inc. | Methods for SSL protected NTLM re-authentication and devices thereof |
US10505818B1 (en) | 2015-05-05 | 2019-12-10 | F5 Networks. Inc. | Methods for analyzing and load balancing based on server health and devices thereof |
US11350254B1 (en) | 2015-05-05 | 2022-05-31 | F5, Inc. | Methods for enforcing compliance policies and devices thereof |
US10476992B1 (en) | 2015-07-06 | 2019-11-12 | F5 Networks, Inc. | Methods for providing MPTCP proxy options and devices thereof |
US11757946B1 (en) | 2015-12-22 | 2023-09-12 | F5, Inc. | Methods for analyzing network traffic and enforcing network policies and devices thereof |
US10404698B1 (en) | 2016-01-15 | 2019-09-03 | F5 Networks, Inc. | Methods for adaptive organization of web application access points in webtops and devices thereof |
US11178150B1 (en) | 2016-01-20 | 2021-11-16 | F5 Networks, Inc. | Methods for enforcing access control list based on managed application and devices thereof |
US10797888B1 (en) | 2016-01-20 | 2020-10-06 | F5 Networks, Inc. | Methods for secured SCEP enrollment for client devices and devices thereof |
US10185720B2 (en) * | 2016-05-10 | 2019-01-22 | International Business Machines Corporation | Rule generation in a data governance framework |
US10412198B1 (en) | 2016-10-27 | 2019-09-10 | F5 Networks, Inc. | Methods for improved transmission control protocol (TCP) performance visibility and devices thereof |
US10467347B1 (en) | 2016-10-31 | 2019-11-05 | Arria Data2Text Limited | Method and apparatus for natural language document orchestrator |
US11063758B1 (en) | 2016-11-01 | 2021-07-13 | F5 Networks, Inc. | Methods for facilitating cipher selection and devices thereof |
US10505792B1 (en) | 2016-11-02 | 2019-12-10 | F5 Networks, Inc. | Methods for facilitating network traffic analytics and devices thereof |
FR3061337A1 (fr) | 2016-12-23 | 2018-06-29 | Dhatim | Moteur de regles universel et optimise pour le traitement de documents de gestion |
US10812266B1 (en) | 2017-03-17 | 2020-10-20 | F5 Networks, Inc. | Methods for managing security tokens based on security violations and devices thereof |
US11122042B1 (en) | 2017-05-12 | 2021-09-14 | F5 Networks, Inc. | Methods for dynamically managing user access control and devices thereof |
US11343237B1 (en) | 2017-05-12 | 2022-05-24 | F5, Inc. | Methods for managing a federated identity environment using security and access control data and devices thereof |
CN108304164B (zh) * | 2017-09-12 | 2021-12-03 | 马上消费金融股份有限公司 | 一种业务逻辑的开发方法及开发系统 |
US11223689B1 (en) | 2018-01-05 | 2022-01-11 | F5 Networks, Inc. | Methods for multipath transmission control protocol (MPTCP) based session migration and devices thereof |
US12112175B1 (en) | 2018-02-08 | 2024-10-08 | Marvell Asia Pte Ltd | Method and apparatus for performing machine learning operations in parallel on machine learning hardware |
US10970080B2 (en) * | 2018-02-08 | 2021-04-06 | Marvell Asia Pte, Ltd. | Systems and methods for programmable hardware architecture for machine learning |
US11995448B1 (en) | 2018-02-08 | 2024-05-28 | Marvell Asia Pte Ltd | Method and apparatus for performing machine learning operations in parallel on machine learning hardware |
US10929779B1 (en) | 2018-05-22 | 2021-02-23 | Marvell Asia Pte, Ltd. | Architecture to support synchronization between core and inference engine for machine learning |
US10929760B1 (en) | 2018-05-22 | 2021-02-23 | Marvell Asia Pte, Ltd. | Architecture for table-based mathematical operations for inference acceleration in machine learning |
US10997510B1 (en) | 2018-05-22 | 2021-05-04 | Marvell Asia Pte, Ltd. | Architecture to support tanh and sigmoid operations for inference acceleration in machine learning |
US10929778B1 (en) | 2018-05-22 | 2021-02-23 | Marvell Asia Pte, Ltd. | Address interleaving for machine learning |
US11016801B1 (en) | 2018-05-22 | 2021-05-25 | Marvell Asia Pte, Ltd. | Architecture to support color scheme-based synchronization for machine learning |
US12003422B1 (en) | 2018-09-28 | 2024-06-04 | F5, Inc. | Methods for switching network packets based on packet data and devices |
US11657124B2 (en) * | 2018-12-10 | 2023-05-23 | Apple Inc. | Integrating binary inference engines and model data for efficiency of inference tasks |
CN109919315B (zh) * | 2019-03-13 | 2021-10-01 | 科大讯飞股份有限公司 | 一种神经网络的前向推理方法、装置、设备及存储介质 |
US11907867B2 (en) * | 2019-06-05 | 2024-02-20 | Paypal, Inc. | Identification and suggestion of rules using machine learning |
KR102185379B1 (ko) * | 2020-01-21 | 2020-12-01 | 한국과학기술원 | 호환되지 않는 IoT 프로토콜 업데이트를 위한 런타임 메시지 추론 장치 및 방법 |
CN111898761B (zh) * | 2020-08-12 | 2022-11-22 | 曙光信息产业(北京)有限公司 | 服务模型生成方法、图像处理方法、装置和电子设备 |
US11461300B2 (en) * | 2021-01-06 | 2022-10-04 | Sap Se | Dynamic model server for multi-model machine learning inference services |
US11816583B2 (en) * | 2021-01-29 | 2023-11-14 | Intuit, Inc. | Knowledge engine module collections |
CN112907234B (zh) * | 2021-05-08 | 2021-07-16 | 武汉众邦银行股份有限公司 | 一种基于动态配置规则的决策引擎实现方法 |
Family Cites Families (41)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5175696A (en) | 1986-09-12 | 1992-12-29 | Digital Equipment Corporation | Rule structure in a procedure for synthesis of logic circuits |
US4884217A (en) * | 1987-09-30 | 1989-11-28 | E. I. Du Pont De Nemours And Company | Expert system with three classes of rules |
US4885705A (en) * | 1988-02-25 | 1989-12-05 | Eastman Kodak Company | Expert system shell for building photofinishing diagnostic systems |
US5218669A (en) * | 1988-03-11 | 1993-06-08 | International Chip Corporation | VLSI hardware implemented rule-based expert system apparatus and method |
US5121496A (en) * | 1988-07-25 | 1992-06-09 | Westinghouse Electric Corp. | Method for creating, maintaining and using an expert system by recursively modifying calibration file and merging with standard file |
US5165011A (en) | 1988-09-22 | 1992-11-17 | Omron Tateisi Electronics Co. | System for switching a rule group |
JPH07100262B2 (ja) * | 1988-10-07 | 1995-11-01 | 三菱電機株式会社 | 放電加工終了判定方法及びその装置 |
US5058043A (en) | 1989-04-05 | 1991-10-15 | E. I. Du Pont De Nemours & Co. (Inc.) | Batch process control using expert systems |
US5355444A (en) * | 1990-01-23 | 1994-10-11 | International Business Machines Corporation | Expert system wtih a plurality of independent knowledge bases |
US5122976A (en) * | 1990-03-12 | 1992-06-16 | Westinghouse Electric Corp. | Method and apparatus for remotely controlling sensor processing algorithms to expert sensor diagnoses |
US5367619A (en) * | 1990-04-27 | 1994-11-22 | Eaton Corporation | Electronic data entry system employing an expert system to facilitate generation of electronic data forms with complex interrelationships between fields and subforms |
US5276775A (en) * | 1990-12-07 | 1994-01-04 | Texas Instruments Inc. | System and method for building knowledge-based applications |
US5363473A (en) | 1991-05-28 | 1994-11-08 | The Trustees Of Columbia University In The City Of New York | Incremental update process and apparatus for an inference system |
FR2720846B1 (fr) * | 1994-06-02 | 1996-07-26 | Bull Sa | Système d'information pour la consultation d'informations centralisées en provenance d'applications opérationnelles. |
US5706406A (en) * | 1995-05-22 | 1998-01-06 | Pollock; John L. | Architecture for an artificial agent that reasons defeasibly |
US6058387A (en) | 1996-01-30 | 2000-05-02 | The University Of Chicago | Dynamic information architecture system and method |
US5778157A (en) * | 1996-06-17 | 1998-07-07 | Yy Software Corporation | System and method for expert system analysis using quiescent and parallel reasoning and set structured knowledge representation |
US5826250A (en) | 1996-06-19 | 1998-10-20 | Pegasystems Inc. | Rules bases and methods of access thereof |
GB2318478B (en) * | 1996-10-21 | 2001-01-17 | Northern Telecom Ltd | Network model for alarm correlation |
GB2318479B (en) * | 1996-10-21 | 2001-04-04 | Northern Telecom Ltd | Problem model for alarm correlation |
US6167520A (en) | 1996-11-08 | 2000-12-26 | Finjan Software, Inc. | System and method for protecting a client during runtime from hostile downloadables |
US6092033A (en) * | 1997-04-16 | 2000-07-18 | Uhlmann; Jeffrey K. | Method and apparatus for fusing mean and covariance estimates |
US6067637A (en) | 1997-05-16 | 2000-05-23 | At&T Corp | Data reduction technique for rule based systems |
US6536935B2 (en) * | 1997-07-23 | 2003-03-25 | Atarum Institute | Computerized system for market-based constraint optimization |
US6092064A (en) | 1997-11-04 | 2000-07-18 | International Business Machines Corporation | On-line mining of quantitative association rules |
US6606616B1 (en) * | 1998-12-01 | 2003-08-12 | Lucent Technologies Inc. | Modified action rules |
US6826552B1 (en) * | 1999-02-05 | 2004-11-30 | Xfi Corporation | Apparatus and methods for a computer aided decision-making system |
US6535864B1 (en) * | 1999-08-05 | 2003-03-18 | Unisys Corporation | Method for mapping alterations in system state to knowledge base objects in a persistent repository-resident knowledge base |
US6829604B1 (en) * | 1999-10-19 | 2004-12-07 | Eclipsys Corporation | Rules analyzer system and method for evaluating and ranking exact and probabilistic search rules in an enterprise database |
US20010029499A1 (en) * | 1999-12-30 | 2001-10-11 | Tuatini Jeffrey Taihana | Rules processing system |
US6681383B1 (en) * | 2000-04-04 | 2004-01-20 | Sosy, Inc. | Automatic software production system |
US6519580B1 (en) * | 2000-06-08 | 2003-02-11 | International Business Machines Corporation | Decision-tree-based symbolic rule induction system for text categorization |
US20020046047A1 (en) * | 2000-07-07 | 2002-04-18 | Budd Jeffrey R. | Patient care management system and method |
WO2002021254A2 (en) * | 2000-09-07 | 2002-03-14 | Hnc Software, Inc. | Mechanism and method for dynamic question handling through an electronic interface |
US20050144114A1 (en) * | 2000-09-30 | 2005-06-30 | Ruggieri Thomas P. | System and method for providing global information on risks and related hedging strategies |
US6965887B2 (en) | 2001-03-21 | 2005-11-15 | Resolutionebs, Inc. | Rule processing methods for automating a decision and assessing satisfiability of rule-based decision diagrams |
US20040030710A1 (en) | 2001-05-21 | 2004-02-12 | Thomas Shadle | Rules-based task browser for engineering systems |
US6910028B2 (en) | 2001-07-27 | 2005-06-21 | International Business Machines Corporation | Conflict-handling assimilator service for exchange of rules with merging |
US20030037063A1 (en) | 2001-08-10 | 2003-02-20 | Qlinx | Method and system for dynamic risk assessment, risk monitoring, and caseload management |
US6868411B2 (en) * | 2001-08-13 | 2005-03-15 | Xerox Corporation | Fuzzy text categorizer |
US7191163B2 (en) * | 2002-04-19 | 2007-03-13 | Computer Associates Think, Inc. | System and method for providing inferencing services |
-
2003
- 2003-04-18 US US10/418,715 patent/US7191163B2/en not_active Expired - Lifetime
- 2003-04-18 BR BRPI0309333-6A patent/BR0309333A/pt unknown
- 2003-04-18 US US10/418,702 patent/US7356522B2/en not_active Expired - Fee Related
- 2003-04-18 AU AU2003230984A patent/AU2003230984A1/en not_active Abandoned
- 2003-04-18 CA CA002482956A patent/CA2482956A1/en not_active Abandoned
- 2003-04-18 CN CN038134349A patent/CN1659589A/zh active Pending
- 2003-04-18 EP EP03724102.3A patent/EP1525556B1/en not_active Expired - Lifetime
- 2003-04-18 WO PCT/US2003/012071 patent/WO2003090164A2/en active Application Filing
- 2003-04-18 JP JP2003586834A patent/JP2005525630A/ja active Pending
- 2003-04-18 KR KR10-2004-7016422A patent/KR20050011745A/ko not_active Application Discontinuation
-
2004
- 2004-10-14 IL IL16462204A patent/IL164622A0/xx unknown
- 2004-11-08 ZA ZA200409017A patent/ZA200409017B/en unknown
-
2008
- 2008-04-07 US US12/098,893 patent/US7849045B2/en not_active Expired - Fee Related
-
2010
- 2010-11-02 US US12/917,990 patent/US7937358B2/en not_active Expired - Fee Related
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2017508224A (ja) * | 2014-01-09 | 2017-03-23 | ファイゲンバウム、トーマス ディ.FEIGENBAUM,Thomas,D. | 知識の認識ベースの処理のためのシステムおよび方法 |
Also Published As
Publication number | Publication date |
---|---|
US20110047123A1 (en) | 2011-02-24 |
BR0309333A (pt) | 2007-02-21 |
AU2003230984A1 (en) | 2003-11-03 |
US7356522B2 (en) | 2008-04-08 |
CA2482956A1 (en) | 2003-10-30 |
WO2003090164A3 (en) | 2005-02-24 |
US7849045B2 (en) | 2010-12-07 |
IL164622A0 (en) | 2005-12-18 |
US7937358B2 (en) | 2011-05-03 |
CN1659589A (zh) | 2005-08-24 |
EP1525556A2 (en) | 2005-04-27 |
WO2003090164A2 (en) | 2003-10-30 |
EP1525556B1 (en) | 2018-12-05 |
US20090089239A1 (en) | 2009-04-02 |
US20040015463A1 (en) | 2004-01-22 |
US7191163B2 (en) | 2007-03-13 |
ZA200409017B (en) | 2005-11-02 |
KR20050011745A (ko) | 2005-01-29 |
US20030229605A1 (en) | 2003-12-11 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
EP1525556B1 (en) | System and method for providing inferencing services | |
US8959480B2 (en) | Methods and apparatus for integration of declarative rule-based processing with procedural programming in a digital data-processing environment | |
US6041179A (en) | Object oriented dispatch optimization | |
US5860011A (en) | Method and system for automatically checking computer source code quality based on rules | |
US20040255277A1 (en) | Method and system for detecting race condition vulnerabilities in source code | |
US20110271258A1 (en) | Software Development Tool | |
US20110271250A1 (en) | Software Development Tool | |
AU2004232058A1 (en) | Method and system for detecting vulnerabilities in source code | |
US10296313B2 (en) | Safely consuming dynamically-typed code from a statically-typed programming language | |
US6345387B1 (en) | Coherent object system architecture | |
US6665866B1 (en) | Extensible compiler utilizing a plurality of question handlers | |
US11609753B2 (en) | Deriving many idiomatic programming language interfaces | |
US7607125B2 (en) | Programming language support for integrating undo and exception handling | |
US20070142929A1 (en) | Specifying optional and default values for method parameters | |
Degano et al. | A two-component language for adaptation: design, semantics and program analysis | |
Marron | Toward Programming Languages for Reasoning: Humans, Symbolic Systems, and AI Agents | |
Mosses | Fundamental constructs in programming languages | |
Valliappan et al. | Typing the wild in Erlang | |
Wingen et al. | Effectiveness of annotation-based static type inference | |
Laneve et al. | Deadlock detection of Java bytecode | |
US7577961B1 (en) | Methods and apparatus for exception-based programming | |
Wielemaker | SWI-Prolog 2.9. 6 | |
Espák | Japlo: Rule-based Programming on Java. | |
Gunnerson et al. | A Programmer's Guide to C# 5.0 | |
van Bakel et al. | Semantic predicate types and approximation for class-based object oriented programming |