java - 使用 Jena API 编写 Tbox 模型

标签 java jena owl ontology

我正在使用 Jena API 将 TBox 模型添加到 ABox 模型中。 TBox 文件包含类、ObjectProperties、DatatypeProperties。 ABox 有个人。我使用了aBoxModel.add(tBoxModel),然后 aBoxModel.write(out),当我使用 Protégé 打开新文件时,它一直搞乱。 TBox 中的所有类(class)都显示在 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é 中一直搞乱的代码。所有类(class)都出现在个人列表和 Protégé 中的类(class)列表中,而这些类(class)本来应该只显示在类(class)中。而且德文字母问题依然存在。 然后我尝试了一些在互联网上找到的代码。

        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.and(model2)中,model2必须是Model,不能是On Model >.

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

相关文章:

java - 为什么ObjectMapper将Date类型改为Long

java - DBpedia YAGO 类的数据集?

java - OWLApi 访客模式 : get superClass axiom

python - 使用 RDFLib 获取 SPARQL 查询中的相交类

java - 跟踪并打印 while 循环的使用次数

java - 如何在列注释中设置默认值

java - 从 runnable 调用函数

java - Apache Jena - 获取所有具有属性的资源

rdf - SPARQL 查询 RDF 文件

sparql - dbpedia 以英语以外的语言获取实体