получение всех типов, например, с помощью owl api 3.4.10 и jfact 1.2.1

Я использовал Protege для создания онтологии. Он состоит из двух базовых классов. Каждый из них имеет три подкласса. Подклассы — это классы с определенными свойствами объектов и данных. Когда я делаю экземпляр, я делаю его отдельным классом, но с такими свойствами данных, чтобы этот экземпляр также принадлежал какому-то подклассу. Когда я запускаю Hermit в Protege, это хорошо. В нем говорится, что мой экземпляр принадлежит к классу и подклассу. Но в Jfact в Java и Owlapi, когда я пытаюсь распечатать все экземпляры из подклассов, мой экземпляр принадлежит только суперклассу, а не подклассу. Это про JFact или что-то еще?

for (OWLClass c : ont.getClassesInSignature()) {
            if (c.getIRI().getFragment().equals("Baby")) {
                NodeSet<OWLClass> subClasses = reasoner.getSubClasses(c, false);

                for (OWLClass subClass : subClasses.getFlattened()) {
                    System.out.println(subClass.getIRI().getFragment());


                    NodeSet<OWLNamedIndividual> instances = reasoner.getInstances(subClass, false);

                    for (OWLNamedIndividual i : instances.getFlattened()) {
                        System.out.println(i.getIRI().getFragment());

                        s += i.getIRI().getFragment() + " ";
                    }
                }
                }
            }

person melnej    schedule 17.10.2016    source источник
comment
Пожалуйста, поделитесь кодом, с которым у вас возникли проблемы.   -  person Ruben Steins    schedule 17.10.2016
comment
Я поделился кодом. Это работает, но результат не такой, как я ожидал (как Hermit в Protege). Этот класс Baby имеет три подкласса. Я создал экземпляр Baby, но он должен быть распознан Reasoner как экземпляр одного из подклассов, но этот код говорит, что подклассы не имеют своих экземпляров.   -  person melnej    schedule 17.10.2016


Ответы (1)


Похоже на ошибку в JFact. Можете ли вы добавить задачу на его трекер с версией и онтологией?

Изменить: JFact 1.2.1 является древним и имеет известные ошибки. Обновите как минимум до 1.2.4 (и OWLAPI 3.5.5, самого последнего выпуска для версии 3.x).

По возможности рекомендую обновиться до OWLAPI 4 (для Java 7) или 5 (для Java 8) и той же основной версии для JFact.

person Ignazio    schedule 17.10.2016
comment
Я отправляю вам сообщение на sourceforge. - person melnej; 18.10.2016
comment
Я пытался, но у меня проблемы с импортом OWLAPI в проект Android. JFact 1.2.4 и тот же старый OWL не решили мою проблему вывода подклассов для заданных экземпляров. Кроме того, я делаю новый проект для Android, пытаясь использовать Pellet, но также безуспешно импортирую. - person melnej; 19.10.2016
comment
Можете ли вы описать неудачу? Если хотите, поднимите вопрос на GitHub, чтобы мы могли решить проблему с импортом. - person Ignazio; 19.10.2016