-1

前提 (ポイント 7 までは、それらがすべて真実であるか、合理的であるか、適切であると仮定しましょう)

(1) Java は無料で、Swing や Javafx などがあります。

(2) Javaについては、ドキュメントやチュートリアルなどがたくさんあります。

(3) ちょっとしたオントロジーに使いたい - 一階論理推論

(4) プロテジェのことは知っているが、それだけでは十分ではない

(5) 例を挙げてみましょう。

  1. 述語論理言語。

    • フルーツについて話しているふりをしましょう

宣言型言語の疑似コード

公理または類似のもの: ドメインと関数

includedAsSubset(Orange, Fruit);

includedAsSubset(Apple, Fruit);

includedAsSubset(Color, Thing);

includedAsSubset(Fruit, Thing);

isRed: Fruit -> Boolean;

isYellow: Fruit -> Boolean;

hasColor: Fruit -> Color;

    **Facts**                         

isIn(thisOrange, Orange);

not(isRed(thisOrange));

isIn(thisApple, Apple);
  1. Java コードでの翻訳

「AがB、Cを拡張する」ためのインターフェースを使用します

public interface Fruit {
    Boolean isRed();
    Boolean isYellow();
    Color hasColor();
}

public interface Orange extends Fruit {};

public interface Apple extends Fruit {};

public class ConcreteApple implements Apple {

    Color thisAppleColor;
    static ArrayList<Color> concreteApplesColours = new ArrayList<Color>();

    ConcreteApple(Color color) {
        Color red = new Color();
        concreteApplesColours.add(red);
        Color yellow = new Color();
        concreteApplesColours.add(yellow);

        setThisAppleColor(color); // try catch should be added to check for the color...
    }

    @Override
    Boolean isRed() {
        return new Boolean(this.getThisAppleColor().equals(red));
    }
    @Override
    Boolean isYellow() {
        return new Boolean(this.getThisAppleColor().equals(yellow));
    }
    @Override
    Color hasColor() {
        return this.getThisAppleColor();
    }
}

public class Reasoner {
    static void main() {
        Color orange = new Color();
        Color Yellow = new Color();
        Orange thisOrange = new ConcreteOrange(orange);
        Apple thisApple = new ConcreteApple(yellow);
        if(thisApple.isRed() && thisOrange.isRed()) {
            doSomething();
        } else if (thisApple.isRed()) {
            doSomethingElse();
        }
    }
}

(6) プロジェクトのスケッチは次のとおりです。
(6.1) DB またはファイル (おそらく xml ファイルまたは txt。たとえば F1.txt) 「A はクラスです」、「B はサブクラスです」 A」などを集めます(「includeIn(B, A)」などで表します)。
(6.2) 関数述語署名用の別のファイル (F2.txt): "f:Y -> Boolean"、"g:X -> Y" など
(6.3) 事実に関する別のファイル (F3.txt): "x isIn X", "y isIn Y", "f(g(x)) == true AND not(f(y))"
(6.4) (リフレクションによって) F1 を「翻訳」する Java プログラム (J1.jar) .txt および F2.txt を 2 番目の Java プログラム (J2.jar) で使用します。このプログラムでは、ファイル F3.txt を使用して新しいファクトを追加し、古いファクトの一部を削除します。

(7) プロジェクトの比率: 必要に応じて Java コードを変更する代わりに、ファクト (ファイル F3.txt) とルール (F1.txt のドメインまたは F2.txt の述語-関数) を追加する方が簡単です (そうであると思います)。そして、多くのライブラリ、IDE、GUI ツールなどとしての Java。

(8) 同様のトピックと質問 (明らかに私のニーズには不十分です):

質問 (2 つ):

そのようなトピックの名前や、別のパラダイムの OO 言語を混合した方法で使用するプログラミング方法はありますか (オントロジーhttp://protegewiki.stanford.edu/wiki/Main_Pagehttp://www. w3.org/TR/owl-features/、説明ロジックと宣言型プログラミング)?

それは間違ったアプローチだと思いますか?

どうもありがとう

4

1 に答える 1

0

実際に、ファクトのメモリ内データベースを構築しており、それに対してクエリを実行したいと考えています。他のデータベースと同様に、主要なファクトが変更されたとき (またはファクトが追加または削除されたとき) のインデックスの正確な変更、クエリ評価の計画、バックエンド ストレージとの同期など、いくつかの問題に直面します。この技術的な側面は、プログラム内のビジネス ロジックと混在させるべきではないため、フレームワーク (ライブラリ) に集中する必要があります。独自のフレームワークを開発するか、既存のフレームワークを使用します。

オープンソースの SPARQL Java 実装を試してみることをお勧めします。その後、テキストによるファクト/クエリ表現よりも Java プログラムを好む場合は、その実装をハックし、テキスト表現をバイパスして内部を直接使用します。

于 2013-08-30T13:48:32.017 に答える