OWLAPI 5: как перебирать классы моей онтологии для вставки отдельных лиц? - PullRequest
1 голос
/ 24 января 2020

Я построил небольшую онтологию с протеже 5, которая содержит 4 класса: класс Person и его подклассы (Student, Lecturer) и класс Module и его подклассы (MathModule и CSModule), у меня есть два свойства объекта: Teaches и учится. Я все еще начинающий с OWL API, и я хочу загрузить эту онтологию и выполнить итерации по различным классам (включая подклассы), чтобы создавать и вставлять индивиды относительно свойств объекта. Я начал делать это только для одного класса, но я не уверен, как я мог сделать это для остальных классов.

public class adding_individuals {
    public static void main(String[] args) throws OWLOntologyCreationException, OWLOntologyStorageException {

        OWLOntologyManager manager = OWLManager.createOWLOntologyManager();
        try {

            OWLOntology ontology = manager.loadOntologyFromOntologyDocument(new File("C:\\..\\university.owl"));
            OWLDataFactory dataFactory = manager.getOWLDataFactory();
            //:lecturer 3 is an instance of the class :Lecturer and CS101 is an instance of CSModule
            OWLClass Lecturer = dataFactory.getOWLClass(":Lecturer");
            OWLClass CSModule = dataFactory.getOWLClass(":CSModule");
            OWLNamedIndividual lecturer3 = dataFactory.getOWLNamedIndividual(":lecturer3");
            OWLNamedIndividual CS101 = dataFactory.getOWLNamedIndividual(":CS101");
            // create a property "teaches"
            OWLObjectProperty teaches = dataFactory.getOWLObjectProperty(":teaches");
            // To specify that :lecturer3 is related to :CS101 via the :teaches property, we create an object property
            // assertion and add it to the ontology
            OWLObjectPropertyAssertionAxiom propertyAssertion = dataFactory.getOWLObjectPropertyAssertionAxiom(teaches, lecturer3, CS101);
            manager.addAxiom(ontology, propertyAssertion);

            // Dump the ontology
            StreamDocumentTarget target = new StreamDocumentTarget(new ByteArrayOutputStream());

            manager.saveOntology(ontology);
        } catch (OWLOntologyCreationException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (OWLOntologyStorageException eo) {
            // TODO Auto-generated catch block
            eo.printStackTrace();
        }
    }
}

1 Ответ

0 голосов
/ 25 января 2020

Чтобы перебрать все классы, используйте ontology.classesInSignature() (в OWLAPI 5, в противном случае ontology.getClassesInSignature()).

Однако я предполагаю, что вам понадобится более точный критерий, чтобы выбрать, какие классы использовать - итерация по всем классам будет включать в себя итерации по всем Persons и Modules. Я полагаю, вам нужно быть более избирательным.

...