[使用Jena API编写Tbox的模型

问题描述 投票:0回答:1

我正在使用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();
        }

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

我该如何解决,或者还有其他方法可以尝试?

java jena owl ontology
1个回答
0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.