前提 (ポイント 7 までは、それらがすべて真実であるか、合理的であるか、適切であると仮定しましょう)
(1) Java は無料で、Swing や Javafx などがあります。
(2) Javaについては、ドキュメントやチュートリアルなどがたくさんあります。
(3) ちょっとしたオントロジーに使いたい - 一階論理推論
(4) プロテジェのことは知っているが、それだけでは十分ではない
(5) 例を挙げてみましょう。
述語論理言語。
- フルーツについて話しているふりをしましょう
宣言型言語の疑似コード
公理または類似のもの: ドメインと関数
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);
- 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_Page、http://www. w3.org/TR/owl-features/、説明ロジックと宣言型プログラミング)?
それは間違ったアプローチだと思いますか?
どうもありがとう