我正在使用Jena API将TBox模型添加到ABox模型中。 TBox文件包含类,对象属性,数据类型属性。 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é中的“类别”列表中,这些列表应该只在“类别”中显示。而且德语字母问题仍然存在。
然后,我尝试了一些在Internet上找到的代码。

        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();
        }


第三个问题与第二个问题相同。

我该如何解决?还是可以尝试其他方法?

最佳答案

我想到了。只是在方法model1.add(model2)中,model2必须是Model,不能是OntModel

关于java - 使用Jena API编写Tbox模型,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/61200004/

10-10 19:38