DL-запрос и OWL

Я создал онтологию в протеже.

У меня есть класс AlcoholicBeverage, под этим классом есть подклассы Beer, Wine. Эти подклассы не пересекаются.

У меня есть класс под названием Person (без подклассов). Другой класс называется Behavior с двумя подклассами «PositiveChange» и «NegativeChange».

У меня есть свойство объекта «использование» с двумя подсвойствами «пить» и «потреблять». Домен свойства «использование» — это класс Person, а диапазон — класс AlcoholicBeverage.

У класса NegativeChange есть надкласс, указанный в этом утверждении «использующий некоторые алкогольные напитки».

Когда я пишу запрос DL, такой как «употребить немного пива», «выпить немного пива» или «употребить немного пива», он должен классифицировать его как NegativeChange, но это не так. Тем не менее, это делает классификацию только тогда, когда я пишу «используя некоторый Алкогольный напиток», что точно такое же определение, как и в разделе суперкласса Алкогольного напитка. Он не принимает во внимание наследование классов или объектов. Я ожидаю, что он должен классифицировать пиво как алкогольный напиток или «потребляющее» свойство объекта как «использующее» свойство объекта.

Спасибо за вашу помощь.


person alan turing    schedule 05.11.2012    source источник


Ответы (1)


Судя по сформулированному вами запросу, кажется, что вы хотите получить людей, употребляющих алкоголь.

С вашими текущими конструкциями класс Behavior сначала "неправильно" классифицируется как Person из-за домена свойства объекта using. Кроме того, вы должны объявить анонимное выражение, использующее какой-либо алкогольный напиток, как эквивалентное классу NegativeChange, а не как суперкласс, как это имеет место в настоящее время. Запросы употребление пива или употребление вина будут правильно отнесены к NegativeChange.

Семантически правильным решением для извлечения потребителей алкоголя было бы создание класса с именем AlcoholConsumer, подкласса Person. Эквивалентным определением AlcoholConsumer будет использование некоторого алкогольного напитка. Реализация с использованием 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");
}
person loopasam    schedule 06.11.2012