作成したクエリによると、アルコールを使用している人を検索したいようです。
現在の構成では、 using objectプロパティのドメインのため、Behaviorクラスは最初にPersonとして「誤って」分類されます。さらに、AlcoholicBeverageを使用して匿名式を、現在のようにスーパークラスではなく、NegativeChangeクラスと同等であると宣言する必要があります。ビールを使用したり、ワインを飲んだりするクエリは、NegativeChangeに正しく分類されます。
アルコール消費者を取得するための意味的に正しい解決策は、PersonのサブクラスであるAlcoholConsumerと呼ばれるクラスを作成することです。AlcoholConsumerの同等の定義は、AlcoholicBeverageを使用することです。Brainを使用した実装:
public static void main(String[] args) throws BrainException {
//Declare all the axioms
Brain brain = new Brain();
brain.addClass("AlcoholicBeverage");
brain.addClass("Beer");
brain.subClassOf("Beer", "AlcoholicBeverage");
brain.addClass("Wine");
brain.subClassOf("Wine", "AlcoholicBeverage");
brain.addClass("Person");
brain.addObjectProperty("using");
brain.addObjectProperty("drinking");
brain.subPropertyOf("drinking", "using");
brain.addObjectProperty("consuming");
brain.subPropertyOf("consuming", "using");
brain.addClass("AlcoholConsumer");
brain.subClassOf("AlcoholConsumer", "Person");
brain.equivalentClasses("AlcoholConsumer", "using some AlcoholicBeverage");
//Add the queries
brain.addClass("Query1");
brain.equivalentClasses("Query1", "using some Beer");
brain.addClass("Query2");
brain.equivalentClasses("Query2", "drinking some Beer");
brain.addClass("Query3");
brain.equivalentClasses("Query3", "consuming some Wine");
List<String> subClasses = brain.getSubClasses("AlcoholConsumer", false);
//Should list all the queries
System.out.println(subClasses);
brain.sleep();
brain.save("/home/samuel/Desktop/so.owl");
}