DL Query and OWL

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

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

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

У меня есть свойство объекта "using" с двумя подчиненными свойствами "пить" и "потреблять". Доменом свойства "using" является класс Person, а диапазоном - класс AlcoholicBeverage.

Класс NegativeChange имеет суперкласс, указанный в этом выражении "использование некоторого AlcoholicBeverage".

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

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

1 ответ

Решение

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

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

Семантически правильным решением для извлечения потребителей алкоголя было бы создание класса под названием AlcoholConsumer, подкласс Person. Эквивалентное определение AlcoholConsumer будет использовать некоторый AlcoholicBeverage. Реализация с использованием мозга:

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");
}
Другие вопросы по тегам