0

私はprotegeでオントロジーを作成しました。

私はAlcoholicBeverageというクラスを持っています。このクラスの下には、ビール、ワインのサブクラスがあります。これらのサブクラスは互いに素です。

Personというクラスがあります(サブクラスはありません)。2つのサブクラス「PositiveChange」と「NegativeChange」を持つBehaviorと呼ばれる別のクラス。

「drinking」と「sumption」の2つのサブプロパティを持つ「using」オブジェクトプロパティがあります。「using」プロパティのドメインはPersonクラスで、範囲はAlcoholicBeverageクラスです。

NegativeChangeクラスには、「AlcoholicBeverageを使用する」というステートメントで示されるスーパークラスがあります。

「ビールを使う」、「ビールを飲む」、「ビールを飲む」などのDLクエリを作成すると、NegativeChangeとして分類されますが、分類されません。ただし、AlcoholicBeverageスーパークラスのセクションで記述されているのとまったく同じ定義である「alcoholicBeverageを使用して」と記述した場合にのみ分類されます。クラスまたはオブジェクトの継承は考慮されません。ビールをアルコール飲料として分類するか、「消費する」オブジェクトプロパティを「使用する」オブジェクトプロパティとして分類する必要があると思います。

ご協力いただきありがとうございます。

4

1 に答える 1

1

作成したクエリによると、アルコールを使用している人を検索したいようです。

現在の構成では、 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");
}
于 2012-11-06T14:03:05.060 に答える