我正在使用 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/