2012-11-05 8 views
0

나는 protege에서 온톨로지를 만들었습니다.DL 쿼리 및 OWL

나는 AlcoholicBeverage라는 클래스를 가지고 있는데,이 클래스 아래에는 Beer, Wine 하위 클래스가 있습니다. 이러한 하위 클래스는 서로 얽혀 있습니다.

Person (하위 클래스 없음)이라는 클래스가 있습니다. "PositiveChange"및 "NegativeChange"의 두 하위 클래스가있는 Behavior라는 또 다른 클래스입니다.

"drink"와 "consuming"이라는 두 개의 하위 속성이있는 객체 속성 "using"이 있습니다. "using"속성의 도메인은 Person 클래스이고 범위는 AlcoholicBeverage 클래스입니다.

NegativeChange 클래스에는 "AlcoholicBeverage를 사용하는"문으로 표시된 수퍼 클래스가 있습니다.

"일부 맥주 사용"또는 "일부 맥주 사용 중"또는 "일부 맥주 사용 중"과 같은 DL 쿼리를 작성할 때 NegativeChange로 분류해야하지만 그렇지 않습니다. 그러나 AlcoholicBeverage 수퍼 클래스 섹션에 쓰여진 것과 정확히 같은 정의 인 "AlcoholicBeverage를 사용하여"를 작성할 때만 분류 작업을 수행합니다. 클래스 또는 객체 상속을 고려하지 않습니다. 저는 그것이 맥주를 알콜 음료 또는 "소비"하는 "또는"사용하는 "물건 속성으로 분류해야합니다.

도움 주셔서 감사합니다.

답변

1

공식화 된 쿼리에 따르면을 사용하는 사람 명을 검색하는 것으로 보입니다.

개체 속성을 사용하는 의 도메인 때문에 현재 구성 요소에서 동작 클래스가 먼저 "잘못 구성됨"입니다. 또한 익명의 표현 인 을 AlcoholicBeverageequivalent으로 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"); 
}