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);
但是,我发现合并的本体o中仅包含ABox中的类断言,这意味着不包括所有角色断言。我做了很多尝试,最后我通过将属性的类型断言添加到我的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的设计问题吗?还是我有更好和更常见的方式来解决这个问题?
P.S:
我的ABox文件(即test.nt)非常简单,仅包含多个三元组,没有其他任何内容。我也没有在我的ABox中导入TBox,因为它只包含三元组。
例如,原始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> .
第二个三元组不能识别为对象属性断言。
尽管在test.nt上添加了另一个三条声明,即takeCourse是对象属性,然后可以识别该对象属性。
但是,TBox中已经有一个声明,它声明takesCourse是一个对象属性,而不是其他任何属性。那么,既然我已经将TBox与我的ABox合并了,为什么还要再次将其添加到ABox中呢?
答案 0 :(得分:2)
您的abox
文件必须使用owl:imports
来包含tbox
。如果没有属性声明,将无法正确解析abox
。