Я использую Jena API для добавления модели TBox в модель ABox. Файл TBox содержит Classes, 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é, но есть одна небольшая вещь: комментарии пишутся на немецком языке, а немецкая буква, такая как ö, ä, ü, ß, отображается только как вопросительный знак "?" в новом файле, пока они правильно отображаются в старом файле. И я не могу использовать приведенный выше код, потому что он не помогает, когда я пытаюсь добавить модель 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é, который должен был отображаться только в классах. И проблема немецкого письма все еще существует. Затем я попробовал некоторые коды, которые я нашел на Inte rnet.
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();
}
, у третьего проблемы те же, что и у второго.
Как это исправить или есть какие-то способы еще я могу попробовать?