前提('直到第7点让我们假装他们都是真的,合理的或相关的,请)
(1)Java是免费的,有Swing和Javafx等。
(2)关于Java,有很多文档,教程等。
(3)我想将它用于有点本体论 - 一阶逻辑推理
(4)我知道protegé但这还不够
(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);
我使用“A extends 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 - &gt;布尔”,“g:X - &gt; Y”等。
(6.3)关于事实的另一个文件(F3.txt):“x isIn X”,“y isIn Y”,“f(g(x))== true AND not(f(y))”
(6.4)一个Java程序(J1.jar),它在第二个java程序(J2.jar)中“翻译”(通过Reflection)F1.txt和F2.txt,文件F3.txt用于附加新事实并删除一些旧的。
(7)项目比率:更简单(我想是)添加事实(文件F3.txt)和规则(F1.txt中的域或F2.txt中的谓词 - 函数)而不是在需要时修改java代码。而Java作为很多库,ide,gui工具等。
(8)类似的主题和问题(显然不足以满足我的需要):
问题(双重):
是否有任何关于使用OO语言以混合方式编写另一种范式的主题或编程方式的名称(它与本体http://protegewiki.stanford.edu/wiki/Main_Page,http://www.w3.org/TR/owl-features/,描述逻辑和声明性编程有关)?
你认为它是错误的方法(如果你需要声明 - 功能逻辑编程使用另一种语言:如果它们不如GUI的Java那么好,它们不是平台独立,强大等等。 )?
非常感谢
答案 0 :(得分:0)
实际上,您正在构建事实的内存数据库,并希望对其进行查询。与任何其他数据库一样,您将面临以下几个问题:在更改主要事实(或添加或删除事实)时准确修改索引,规划查询评估,与后端存储同步。这些技术方面不应与程序中的业务逻辑混合,因此它们应集中在框架(库)中。要么开发自己的框架,要么采用现有的框架。
我建议使用一些开源SPARQL java实现,然后,如果您仍然喜欢java程序而不是文本事实/查询表示,那么破解该实现并直接使用内部,绕过文本表示。