【问题标题】:write model of Tbox using Jena API使用 Jena API 编写 Tbox 模型
【发布时间】:2020-04-14 02:54:04
【问题描述】:

我正在使用 Jena API 将 TBox 模型添加到 ABox 模型中。 TBox 文件包含类、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é中没有问题的代码,但有一点:cmets是用德语写的,像ö,ä,ü,ß这样的德语字母只显示为问号“?”在新文件中,而它们在旧文件中正确显示。 而且我不能使用上面的代码,因为当我尝试将 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é 中的课程列表中,而这些课程应该只显示在课程中。而且德文字母问题依然存在。 然后我尝试了一些我在网上找到的代码。

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

第三个和第二个有同样的问题。

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

【问题讨论】:

  • 没有看到你结合两个模型之前和之后的数据,不可能说什么有意义的......
  • 关于德语字母,这很可能是一个编码问题,无论是在文件级别还是在您的 URI 中

标签: java jena owl ontology


【解决方案1】:

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

【讨论】:

  • 我不明白。您的代码中既没有 model1 也没有 model2。我也不明白为什么这应该是解决方案
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-06-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多