написать модель Tbox, используя Jena API - PullRequest
0 голосов
/ 14 апреля 2020

Я использую Jena API для добавления модели TBox в модель ABox. Файл TBox содержит Classes, ObjectProperties, DatatypeProperties. У ABox есть люди. Я использовал aBoxModel.add(tBoxModel), затем aBoxModel.write(out), что постоянно мешает, когда я использую Protégé, чтобы открыть новый файл. Все классы из TBox появились в списке людей в Protégé. Затем я обнаружил, что проблема возникает в TBox, а не в Abox. И я попробовал разные способы выписать это, что дает мне разные результаты. Код следующим образом:

import java.io.FileWriter;
import java.io.IOException;
import org.apache.jena.ontology.OntClass;
import org.apache.jena.ontology.OntModel;
import org.apache.jena.rdf.model.Model;
import org.apache.jena.rdf.model.ModelFactory;
import org.apache.jena.riot.RDFDataMgr;

public class TestWriteOwl {

    public static void main(String[] args) {

        OntModel oldModel = ModelFactory.createOntologyModel();
        RDFDataMgr.read(oldModel, "TBox.owl");  

        FileWriter out;
        try {
            out = new FileWriter("myModel.owl");
            oldModel.write(out,"RDF/XML");
            out.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

}

Выше приведен код без проблем в Protégé, но есть одна небольшая вещь: комментарии пишутся на немецком языке, а немецкая буква, такая как ö, ä, ü, ß, отображается только как вопросительный знак "?" в новом файле, пока они правильно отображаются в старом файле. И я не могу использовать приведенный выше код, потому что он не помогает, когда я пытаюсь добавить модель tBox в другую модель. Итак, я попробовал приведенный ниже код.

        OntModel newModel = ModelFactory.createOntologyModel();
        newModel.add(oldModel);

        FileWriter out;
        try {
            out = new FileWriter("myModel.owl");
            newModel.write(out,"RDF/XML");
            out.close();
        } catch (IOException e) {
            e.printStackTrace();
        }

, и этот второй код постоянно портится в Protégé. Все классы отображались как в списке отдельных лиц, так и в списке классов в Protégé, который должен был отображаться только в классах. И проблема немецкого письма все еще существует. Затем я попробовал некоторые коды, которые я нашел на Inte rnet.

        Reasoner reasoner = ReasonerRegistry.getOWLReasoner().bindSchema( oldModel );
        OntModelSpec spec = new OntModelSpec( OntModelSpec.OWL_MEM_RULE_INF );
        spec.setReasoner( reasoner );
        OntModel m = ModelFactory.createOntologyModel( spec, newModel );

        FileWriter out;
        try {
            out = new FileWriter("myModel.owl");
            m.write(out,"RDF/XML");
            out.close();
        } catch (IOException e) {
            e.printStackTrace();
        }

, у третьего проблемы те же, что и у второго.

Как это исправить или есть какие-то способы еще я могу попробовать?

1 Ответ

0 голосов
/ 14 апреля 2020

Я понял это. Это просто в методе model1.add(model2), model2 должно быть Model, не может быть OntModel.

...