【发布时间】: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 中