質問

私たちはテキストベース (XML なし) のメッセージを扱います。私たちの目標はメッセージを検証することであり、コンテンツが正しい場合、メッセージは有効です。私たちは、メッセージに関するルールを表現するために XML で定義された独自の言語を開発しました。より複雑なルールを追加する必要があるため、他の代替手段を検討し、実際のルール エンジンを使用する時期が来たと考えています。次のタイプのルールがサポートされています。

  • 値のリスト内の名前または通常の 式 ex {SMITH, MOORE, A*}
  • 名前がメッセージに含まれています-
  • メッセージに名前がありません
  • 条件の場合、名前 = ジョン、そうでない場合、名前 = ジェーンこの条件は単純であり、論理演算子が含まれていないことに注意してください。

次のタイプのルールをサポートする必要があります。

  • if then else ただし条件に論理演算子が含まれている
  • のために ...ループ:
    • メッセージ内のすべての顧客に対して、米国から少なくとも 1 人、フランスから少なくとも 1 人が必要です。
    • メッセージ内のすべての顧客のうち、米国在住で年間 1000 ドル以上購入している顧客が少なくとも 5 名必要です。
    • John という名前の顧客の場合、姓は Doe でなければなりません
  • John という名前の顧客の合計が 15 未満
  • 会社名はメッセージ内の別の場所にある会社名と同じです

ルールは処理するメッセージの種類によって異なります。そこで私たちは、次のようないくつかの既存のソリューションを調査していました。

  • ジェス
  • OWL (一貫性チェック)
  • Schematron (メッセージを XML に変換することによる)

Java で開発する場合、最良の代替手段は何でしょうか?もう 1 つ考慮すべき点は、エラーの説明、エラーの場所 (行番号と列番号) などのエラー レポートを実行できる必要があることです。

役に立ちましたか?

解決

私には、あなたはすでに正しい軌道に乗っているように思えます。私の提案は次のとおりです。

  1. パーサー/インタープリターを使用してテキストベースのメッセージを直接検査し、生成されたオブジェクトにルールを適用します。@Kdeveloperが提案しました JavaCC パーサー/インタープリターを生成するためのもので、個人的に保証することでこれに追加できます。 ANTLRv3 これは、(他の言語の中でも特に) Java でパーサー/インタープリター/トランスフォーマーを生成するための優れた環境です。そこから、Jess またはその他の Java ルール エンジンを使用して、生成したオブジェクトを検証できます。ルールをパーサー/インタープリターに直接エンコードしてみることもできますが、これには反対し、解析とセマンティック検証のステップを分離するためにルールを分離することを選択することをお勧めします。
  2. Schematron を適用するためにテキストベースのメッセージを XML に変換することも実行可能なオプションですが、とにかくテキスト メッセージを解析して XML に変換する必要があることは明らかです。このためには、JavaCC または ANTLRv3 を検討し、おそらく XML にマーシャリングできる事前定義されたオブジェクト モデル (たとえば、 キャスター または JAXB から W3C XML スキーマ)。そこから、結果の XML に Schematron を適用できます。
  3. OWLへの変換はあなたの提案の中で最も難しいオプションですが、最も強力である可能性があると私は主張します。まず最初に、おそらく オントロジー用語 (TBox) (クラス、プロパティなど)。マッピングするには インスタンスデータ (ABox) の中へ。そこから一貫性チェックを行っても、ここまでは限界があります。キャプチャしたいと概説した種類の制約の多くは、OWL で表現したり、DL リーズナーだけを使用して検証したりすることはできません。ただし、OWL オントロジーを スワール (たとえば) ルールを作成すると、これまでに概説したルールの種類の多くを把握できる可能性があります。ルールの種類を見て、 SWRL で利用可能な組み込み機能 これがあなたにとって十分な表現力であるかどうかを確認してください。その場合は、次のような SWRL サポートを備えた DL-Reasoner の使用を採用できます。 ペレット または 隠者. 。これらのようなOWL/SWRL推論器の個々の実装では、多かれ少なかれ以下の機能が実装される可能性があることに注意してください。 W3C仕様, そのため、それぞれを検査して適用性を判断する必要があります。

他のヒント

ルールが静的である場合(つまり、コンパイル時に既知です)、よく知られている Java パーサー ジェネレーターを使用してこれを作成できます。 JavaCC.

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top