-1

前提('直到第 7 点,让我们假装它们都是真实的、合理的或相关的,拜托)

(1) Java 是免费的,有 Swing 和 Javafx 等。

(2) 关于Java有很多文档、教程等。

(3) 我想用它来做一个本体论——一阶逻辑推理

(4) 我知道protegé,但还不够

(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 在第二个 java 程序 (J2.jar) 中,文件 F3.txt 用于附加新事实并删除一些旧事实。

(7) 项目比率:添加事实(文件 F3.txt)和规则(F1.txt 中的域或 F2.txt 中的谓词-函数)更简单(我想是),而不是在需要时修改 java 代码。和 Java 一样有很多库、ide、gui 工具等。

(8) 类似的主题和问题(显然不足以满足我的需求):

问题(双重):

是否有这样一个主题或使用 OO 语言以混合方式进行另一种范式的编程方式的名称(它与本体有关http://protegewiki.stanford.edu/wiki/Main_Pagehttp://www. w3.org/TR/owl-features/,描述逻辑和声明式编程)?

您是否认为这是错误的方法(如果您需要声明性-功能性-逻辑编程使用另一种语言:它们是否不如 Java 的 GUI 好,它们不是平台独立的、健壮的等)?

非常感谢

4

1 回答 1

0

实际上,您正在构建一个内存中的事实数据库,并希望对其进行查询。与任何其他数据库一样,您面临几个问题:当主要事实发生更改(或添加或删除事实)时准确修改索引、规划查询评估、与后端存储同步。这些技术方面不应该与您的程序中的业务逻辑混在一起,因此它们应该集中在一个框架(库)中。您要么开发自己的框架,要么采用现有的框架。

我建议使用一些开源 SPARQL java 实现,然后,如果您仍然更喜欢 java 程序而不是文本事实/查询表示,则破解该实现并直接使用内部,绕过文本表示。

于 2013-08-30T13:48:32.017 回答