Выведение использования Йена

InfModel infmodel = ModelFactory.createInfModel(reasoner, m);
Resource vegetarian = infmodel.getResource(source + "Vegetarian");
Resource margherita = infmodel.getResource(source + "Example-Margherita");
if (infmodel.contains(margherita, RDF., vegetarian)) {
        System.out.println("Margherita is a memberOf Vegetarian pizza");
    }

Пример, данный выше, формируется формальным pizza.owl. У этой совы Примером-Margherita является человек класса Margherita. Так, это уже записано в файле совы. Однако проблема состоит в том, что reasoner должен вывести тот margherita-пример, должна быть также вегетарианская пицца. Кто-либо мог дать пример, который показывает, как найти возможные выведенные классы человека как в Протеже? (Протеже правильно выводит, что Примером-Margherita является Вегетарианская Пицца. Однако я не могу вывести программно),

6
задан Mikae 11 June 2010 в 15:56
поделиться

1 ответ

Я решил свой вопрос. Я думаю, что была проблема с моей онтологией. Поэтому я создал другую онтологию для вывода индивидов. Онтология, которую я создал, содержит Person и подклассы Person: MalePerson, FemalePerson и MarriedPerson. Есть два свойства объекта (hasSpouse, hasSibling) и одно свойство типа данных (hasAge). Я создал 3 личности. John - MalePerson - hasAge(20) - hasSibling(Jane) Jane - FemalePerson - hasSibling(John) - hasSpouse(Bob) Bob - MalePerson - hasSpouse(Jane)

И я наложил два ограничения для классов MalePerson и FemalePerson. Для MalePerson : hasSpouse max 1 hasSpouse только MalePerson Для класса FemalePerson : hasSpouse max 1 hasSpouse only FemalePerson

Наконец, я сделал MarriedPerson определяемым классом. До рассуждения, MarriedPerson не имеет индивидуума. Однако модель должна сделать вывод, что Джейн и Боб женаты. Поэтому в конце класс MarriedPerson должен иметь 2 индивидуума.

Когда я выполнил этот код на Java с помощью Jena, я получил 2 индивида.

OntModel ontModel = ModelFactory.createOntologyModel();
    InputStream in = FileManager.get().open(inputFileName);
    if (in == null) {
        throw new IllegalArgumentException( "File: " + inputFileName + " not found");
    }
    ontModel.read(in, "");


    Reasoner reasoner = ReasonerRegistry.getOWLReasoner();
    reasoner = reasoner.bindSchema(ontModel);
    // Obtain standard OWL-DL spec and attach the Pellet reasoner
    OntModelSpec ontModelSpec = OntModelSpec.OWL_DL_MEM;
    ontModelSpec.setReasoner(reasoner);
    // Create ontology model with reasoner support
    OntModel model = ModelFactory.createOntologyModel(ontModelSpec, ontModel);

    // MarriedPerson has no asserted instances
    // However, if an inference engine is used, two of the three
    // individuals in the example presented here will be
    // recognized as MarriedPersons
            //ns is the uri
    OntClass marPerson = model.getOntClass(ns + "OWLClass_00000003866036241880"); // this is the uri for MarriedPerson class
    ExtendedIterator married = marPerson.listInstances();
    while(married.hasNext()) {
        OntResource mp = (OntResource)married.next();
        System.out.println(mp.getURI());
    } // this code returns 2 individuals with the help of reasoner
9
ответ дан 10 December 2019 в 02:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: