owlapi предоставляет нам слияние классов, которое позволяет нам загружать онтологию из нескольких файлов / источников, а затем объединять их вместе.Теперь моя онтология разделена на две непересекающиеся части, то есть одну часть для аксиом TBox и другую для утверждений ABox.Поэтому я просто использую слияние в качестве следующего кода:
OWLOntology TBox= m.loadOntologyFromOntologyDocument(new File(("XXXXXXXX/UOBM.owl")));
OWLOntology ABox = m.loadOntologyFromOntologyDocument(new File("XXXX/test.nt"));
OWLOntologyMerger merger = new OWLOntologyMerger(m);
OWLOntology o = merger.createMergedOntology(m, null);
Однако я обнаружил, что только утверждения класса в ABox включены в онтологию слияния o, что означает, что все утверждения роли не включены.Я сделал много попыток и, наконец, решил проблему, добавив утверждения типа свойств в мой файл ABox, например, <http://semantics.crl.ibm.com/univ-bench-dl.owl#takesCourse> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/2002/07/owl#ObjectProperty> .
Это действительно странно, поскольку такие утверждения уже включены в TBoxфайл, и я слил TBox и ABox с слиянием.Так почему я должен снова добавить их вручную?Это вопрос дизайна owlapi?Или есть лучший и более распространенный для меня способ решения этой проблемы?
PS:
Мой файл ABox, а именно test.nt, довольно простой, который содержит только три тройки, без чего-либо еще.Я также не импортировал TBox в свой ABox, поскольку он включает только тройки.
Например, содержимое исходного test.nt может быть:
<http://semantics.crl.ibm.com/univ-bench-dl.owl#a> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://semantics.crl.ibm.com/univ-bench-dl.owl#LeisureStudent> .
<http://semantics.crl.ibm.com/univ-bench-dl.owl#a> <http://semantics.crl.ibm.com/univ-bench-dl.owl#takesCourse> <http://semantics.crl.ibm.com/univ-bench-dl.owl#c0> .
Вторая тройка не может быть распознана какутверждение свойства объекта.В то время как добавление еще одного тройного утверждения о том, что takeCourse является свойством объекта для test.nt, свойство объекта может быть распознано.
Однако в TBox уже было объявление, которое объявляет takeCourse как свойство объекта, а не что-либо еще.Так зачем мне снова добавлять его в ABox, так как я уже слил TBox с моим ABox?